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