1b1994897Sopenharmony_ci# Copyright (c) 2021-2022 Huawei Device Co., Ltd. 2b1994897Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 3b1994897Sopenharmony_ci# you may not use this file except in compliance with the License. 4b1994897Sopenharmony_ci# You may obtain a copy of the License at 5b1994897Sopenharmony_ci# 6b1994897Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 7b1994897Sopenharmony_ci# 8b1994897Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 9b1994897Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 10b1994897Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11b1994897Sopenharmony_ci# See the License for the specific language governing permissions and 12b1994897Sopenharmony_ci# limitations under the License. 13b1994897Sopenharmony_ci 14b1994897Sopenharmony_ci# 15b1994897Sopenharmony_ci# v1 = 0; 16b1994897Sopenharmony_ci# INT32_MAX = 2147483647 17b1994897Sopenharmony_ci# for (int32 v0 = int32_max - 7, v0 > 0; v0++) { 18b1994897Sopenharmony_ci# v1++; 19b1994897Sopenharmony_ci# } 20b1994897Sopenharmony_ci# return v1 - 8; 21b1994897Sopenharmony_ci# 22b1994897Sopenharmony_ci.function i32 run_case1() <static> { 23b1994897Sopenharmony_ci movi v0, 2147483640 24b1994897Sopenharmony_ci movi v1, 0 25b1994897Sopenharmony_ciloop: 26b1994897Sopenharmony_ci lda v0 27b1994897Sopenharmony_ci jlez loop_exit 28b1994897Sopenharmony_ci inci v0, 1 29b1994897Sopenharmony_ci inci v1, 1 30b1994897Sopenharmony_ci jmp loop 31b1994897Sopenharmony_ciloop_exit: 32b1994897Sopenharmony_ci lda v1 33b1994897Sopenharmony_ci subi 8 34b1994897Sopenharmony_ci return 35b1994897Sopenharmony_ci} 36b1994897Sopenharmony_ci 37b1994897Sopenharmony_ci# 38b1994897Sopenharmony_ci# v1 = 0 39b1994897Sopenharmony_ci# while (a0 < a1): 40b1994897Sopenharmony_ci# a0++ 41b1994897Sopenharmony_ci# v1++ 42b1994897Sopenharmony_ci# return v1 43b1994897Sopenharmony_ci# 44b1994897Sopenharmony_ci.function i32 run_case2(i32 a0, i32 a1) <static> { 45b1994897Sopenharmony_ci movi v1, 0 46b1994897Sopenharmony_ciloop: 47b1994897Sopenharmony_ci lda a0 48b1994897Sopenharmony_ci jge a1, loop_exit 49b1994897Sopenharmony_ci inci a0, 1 50b1994897Sopenharmony_ci inci v1, 1 51b1994897Sopenharmony_ci jmp loop 52b1994897Sopenharmony_ciloop_exit: 53b1994897Sopenharmony_ci lda v1 54b1994897Sopenharmony_ci return 55b1994897Sopenharmony_ci} 56b1994897Sopenharmony_ci 57b1994897Sopenharmony_ci.function i32 run_case2a(i32 a0) <static> { 58b1994897Sopenharmony_ci movi v0, 0x80000002 59b1994897Sopenharmony_ci movi v1, 0 60b1994897Sopenharmony_ciloop: 61b1994897Sopenharmony_ci lda a0 62b1994897Sopenharmony_ci jge v0, loop_exit 63b1994897Sopenharmony_ci inci a0, 1 64b1994897Sopenharmony_ci inci v1, 1 65b1994897Sopenharmony_ci jmp loop 66b1994897Sopenharmony_ciloop_exit: 67b1994897Sopenharmony_ci lda v1 68b1994897Sopenharmony_ci return 69b1994897Sopenharmony_ci} 70b1994897Sopenharmony_ci 71b1994897Sopenharmony_ci# 72b1994897Sopenharmony_ci# v1 = 0 73b1994897Sopenharmony_ci# while (a0 < a1): 74b1994897Sopenharmony_ci# a0++ 75b1994897Sopenharmony_ci# v1++ 76b1994897Sopenharmony_ci# return v1 77b1994897Sopenharmony_ci# 78b1994897Sopenharmony_ci.function i32 run_case3(i64 a0, i64 a1) <static> { 79b1994897Sopenharmony_ci movi v1, 0 80b1994897Sopenharmony_ci movi.64 v2, 1 81b1994897Sopenharmony_ciloop: 82b1994897Sopenharmony_ci lda.64 a0 83b1994897Sopenharmony_ci cmp.64 a1 84b1994897Sopenharmony_ci jgez loop_exit 85b1994897Sopenharmony_ci lda.64 a0 86b1994897Sopenharmony_ci add2.64 v2 87b1994897Sopenharmony_ci sta.64 a0 88b1994897Sopenharmony_ci inci v1, 1 89b1994897Sopenharmony_ci jmp loop 90b1994897Sopenharmony_ciloop_exit: 91b1994897Sopenharmony_ci lda v1 92b1994897Sopenharmony_ci return 93b1994897Sopenharmony_ci} 94b1994897Sopenharmony_ci 95b1994897Sopenharmony_ci.function i32 run_case3a(i64 a0) <static> { 96b1994897Sopenharmony_ci movi.64 v0, 0x8000000000000002 97b1994897Sopenharmony_ci movi v1, 0 98b1994897Sopenharmony_ci movi.64 v2, 1 99b1994897Sopenharmony_ciloop: 100b1994897Sopenharmony_ci lda.64 a0 101b1994897Sopenharmony_ci cmp.64 v0 102b1994897Sopenharmony_ci jgez loop_exit 103b1994897Sopenharmony_ci lda.64 a0 104b1994897Sopenharmony_ci add2.64 v2 105b1994897Sopenharmony_ci sta.64 a0 106b1994897Sopenharmony_ci inci v1, 1 107b1994897Sopenharmony_ci jmp loop 108b1994897Sopenharmony_ciloop_exit: 109b1994897Sopenharmony_ci lda v1 110b1994897Sopenharmony_ci return 111b1994897Sopenharmony_ci} 112b1994897Sopenharmony_ci 113b1994897Sopenharmony_ci# 114b1994897Sopenharmony_ci# v1 = 0 115b1994897Sopenharmony_ci# while (a0 > a1): 116b1994897Sopenharmony_ci# a0-- 117b1994897Sopenharmony_ci# v1++ 118b1994897Sopenharmony_ci# return v1 119b1994897Sopenharmony_ci# 120b1994897Sopenharmony_ci.function i32 run_case4(i32 a0, i32 a1) <static> { 121b1994897Sopenharmony_ci movi v1, 0 122b1994897Sopenharmony_ciloop: 123b1994897Sopenharmony_ci lda a0 124b1994897Sopenharmony_ci jle a1, loop_exit 125b1994897Sopenharmony_ci inci a0, -1 126b1994897Sopenharmony_ci inci v1, 1 127b1994897Sopenharmony_ci jmp loop 128b1994897Sopenharmony_ciloop_exit: 129b1994897Sopenharmony_ci lda v1 130b1994897Sopenharmony_ci return 131b1994897Sopenharmony_ci} 132b1994897Sopenharmony_ci 133b1994897Sopenharmony_ci.function i32 run_case4a(i32 a0) <static> { 134b1994897Sopenharmony_ci movi v0, 0x7ffffffd 135b1994897Sopenharmony_ci movi v1, 0 136b1994897Sopenharmony_ciloop: 137b1994897Sopenharmony_ci lda a0 138b1994897Sopenharmony_ci jle v0, loop_exit 139b1994897Sopenharmony_ci inci a0, -1 140b1994897Sopenharmony_ci inci v1, 1 141b1994897Sopenharmony_ci jmp loop 142b1994897Sopenharmony_ciloop_exit: 143b1994897Sopenharmony_ci lda v1 144b1994897Sopenharmony_ci return 145b1994897Sopenharmony_ci} 146b1994897Sopenharmony_ci 147b1994897Sopenharmony_ci# 148b1994897Sopenharmony_ci# v1 = 0 149b1994897Sopenharmony_ci# while (a0 > a1): 150b1994897Sopenharmony_ci# a0-- 151b1994897Sopenharmony_ci# v1++ 152b1994897Sopenharmony_ci# return v1 153b1994897Sopenharmony_ci# 154b1994897Sopenharmony_ci.function i32 run_case5(i64 a0, i64 a1) <static> { 155b1994897Sopenharmony_ci movi v1, 0 156b1994897Sopenharmony_ci movi.64 v2, 1 157b1994897Sopenharmony_ciloop: 158b1994897Sopenharmony_ci lda.64 a0 159b1994897Sopenharmony_ci cmp.64 a1 160b1994897Sopenharmony_ci jlez loop_exit 161b1994897Sopenharmony_ci lda.64 a0 162b1994897Sopenharmony_ci sub2.64 v2 163b1994897Sopenharmony_ci sta.64 a0 164b1994897Sopenharmony_ci inci v1, 1 165b1994897Sopenharmony_ci jmp loop 166b1994897Sopenharmony_ciloop_exit: 167b1994897Sopenharmony_ci lda v1 168b1994897Sopenharmony_ci return 169b1994897Sopenharmony_ci} 170b1994897Sopenharmony_ci 171b1994897Sopenharmony_ci.function i32 run_case5a(i64 a0) <static> { 172b1994897Sopenharmony_ci movi.64 v0, 0x7ffffffffffffffd 173b1994897Sopenharmony_ci movi v1, 0 174b1994897Sopenharmony_ci movi.64 v2, 1 175b1994897Sopenharmony_ciloop: 176b1994897Sopenharmony_ci lda.64 a0 177b1994897Sopenharmony_ci cmp.64 v0 178b1994897Sopenharmony_ci jlez loop_exit 179b1994897Sopenharmony_ci lda.64 a0 180b1994897Sopenharmony_ci sub2.64 v2 181b1994897Sopenharmony_ci sta.64 a0 182b1994897Sopenharmony_ci inci v1, 1 183b1994897Sopenharmony_ci jmp loop 184b1994897Sopenharmony_ciloop_exit: 185b1994897Sopenharmony_ci lda v1 186b1994897Sopenharmony_ci return 187b1994897Sopenharmony_ci} 188b1994897Sopenharmony_ci 189b1994897Sopenharmony_ci.function i32 main() <static> { 190b1994897Sopenharmony_ci call.short run_case1 191b1994897Sopenharmony_ci jnez exit_failure 192b1994897Sopenharmony_ci 193b1994897Sopenharmony_ci movi v0, 0x7ffffff7 194b1994897Sopenharmony_ci movi v1, 0x80000002 195b1994897Sopenharmony_ci call.short run_case2, v0, v1 196b1994897Sopenharmony_ci jnez exit_failure 197b1994897Sopenharmony_ci 198b1994897Sopenharmony_ci movi v0, 0x80000000 199b1994897Sopenharmony_ci movi v1, 0x80000002 200b1994897Sopenharmony_ci call.short run_case2, v0, v1 201b1994897Sopenharmony_ci subi 2 202b1994897Sopenharmony_ci jnez exit_failure 203b1994897Sopenharmony_ci 204b1994897Sopenharmony_ci movi v0, 0x7ffffff7 205b1994897Sopenharmony_ci call.short run_case2a, v0 206b1994897Sopenharmony_ci jnez exit_failure 207b1994897Sopenharmony_ci 208b1994897Sopenharmony_ci movi v0, 0x80000000 209b1994897Sopenharmony_ci call.short run_case2a, v0 210b1994897Sopenharmony_ci subi 2 211b1994897Sopenharmony_ci jnez exit_failure 212b1994897Sopenharmony_ci 213b1994897Sopenharmony_ci movi.64 v0, 0x7ffffffffffffff7 214b1994897Sopenharmony_ci movi.64 v1, 0x8000000000000002 215b1994897Sopenharmony_ci call.short run_case3, v0, v1 216b1994897Sopenharmony_ci jnez exit_failure 217b1994897Sopenharmony_ci 218b1994897Sopenharmony_ci movi.64 v0, 0x8000000000000000 219b1994897Sopenharmony_ci movi.64 v1, 0x8000000000000002 220b1994897Sopenharmony_ci call.short run_case3, v0, v1 221b1994897Sopenharmony_ci subi 2 222b1994897Sopenharmony_ci jnez exit_failure 223b1994897Sopenharmony_ci 224b1994897Sopenharmony_ci movi.64 v0, 0x7ffffffffffffff7 225b1994897Sopenharmony_ci call.short run_case3a, v0 226b1994897Sopenharmony_ci jnez exit_failure 227b1994897Sopenharmony_ci 228b1994897Sopenharmony_ci movi.64 v0, 0x8000000000000000 229b1994897Sopenharmony_ci call.short run_case3a, v0 230b1994897Sopenharmony_ci subi 2 231b1994897Sopenharmony_ci jnez exit_failure 232b1994897Sopenharmony_ci 233b1994897Sopenharmony_ci movi v0, 0x8000000a 234b1994897Sopenharmony_ci movi v1, 0x7ffffffd 235b1994897Sopenharmony_ci call.short run_case4, v0, v1 236b1994897Sopenharmony_ci jnez exit_failure 237b1994897Sopenharmony_ci 238b1994897Sopenharmony_ci movi v0, 0x7fffffff 239b1994897Sopenharmony_ci movi v1, 0x7ffffffd 240b1994897Sopenharmony_ci call.short run_case4, v0, v1 241b1994897Sopenharmony_ci subi 2 242b1994897Sopenharmony_ci jnez exit_failure 243b1994897Sopenharmony_ci 244b1994897Sopenharmony_ci movi v0, 0x8000000a 245b1994897Sopenharmony_ci call.short run_case4a, v0 246b1994897Sopenharmony_ci jnez exit_failure 247b1994897Sopenharmony_ci 248b1994897Sopenharmony_ci movi v0, 0x7fffffff 249b1994897Sopenharmony_ci call.short run_case4a, v0 250b1994897Sopenharmony_ci subi 2 251b1994897Sopenharmony_ci jnez exit_failure 252b1994897Sopenharmony_ci 253b1994897Sopenharmony_ci movi.64 v0, 0x800000000000000a 254b1994897Sopenharmony_ci movi.64 v1, 0x7ffffffffffffffd 255b1994897Sopenharmony_ci call.short run_case5, v0, v1 256b1994897Sopenharmony_ci jnez exit_failure 257b1994897Sopenharmony_ci 258b1994897Sopenharmony_ci movi.64 v0, 0x7fffffffffffffff 259b1994897Sopenharmony_ci movi.64 v1, 0x7ffffffffffffffd 260b1994897Sopenharmony_ci call.short run_case5, v0, v1 261b1994897Sopenharmony_ci subi 2 262b1994897Sopenharmony_ci jnez exit_failure 263b1994897Sopenharmony_ci 264b1994897Sopenharmony_ci movi.64 v0, 0x800000000000000a 265b1994897Sopenharmony_ci call.short run_case5a, v0 266b1994897Sopenharmony_ci jnez exit_failure 267b1994897Sopenharmony_ci 268b1994897Sopenharmony_ci movi.64 v0, 0x7fffffffffffffff 269b1994897Sopenharmony_ci call.short run_case5a, v0 270b1994897Sopenharmony_ci subi 2 271b1994897Sopenharmony_ci jnez exit_failure 272b1994897Sopenharmony_ci 273b1994897Sopenharmony_ci ldai 0 274b1994897Sopenharmony_ci return 275b1994897Sopenharmony_ci 276b1994897Sopenharmony_ciexit_failure: 277b1994897Sopenharmony_ci ldai 1 278b1994897Sopenharmony_ci return 279b1994897Sopenharmony_ci} 280