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