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
14definitions:
15  - name: main
16    template: |
17        # header
18        .function i32 main() {
19  - name: none
20    template: |
21      }
22  - name: empty
23    template: ''
24  - name: exit-positive
25    template: |
26      #
27          ldai 0
28          return
29      }
30  - name: no-check
31    template: |
32      #
33          return
34      }
35  - name: check-positive
36    template: |
37        #   check positive
38            jnez exit_failure
39            ldai 0 # passed
40            return
41        exit_failure:
42            ldai 1 # failed
43            return
44        }
45  - name: check-negative
46    template: |
47      #   check negative
48          jeqz exit_failure
49          ldai 0 # passed
50          return
51      exit_failure:
52          ldai 1 # failed
53          return
54      }
55  - name: check-acc-nan-f64
56    template: |
57        #   check acc contains NaN
58            sta.64 v0
59            fcmpg.64 v0
60            jeqz exit_failure
61        # NaN != NaN
62            ldai 0 # passed
63            return
64        exit_failure:
65            ldai 1 # failed
66            return
67        }
68  - name: check-acc-nan-f32
69    template: |
70        #   check acc contains NaN
71            sta v0
72            fcmpg v0
73            jeqz exit_failure
74        # NaN != NaN
75            ldai 0 # passed
76            return
77        exit_failure:
78            ldai 1 # failed
79            return
80        }
81  - name: check-acc-minus-1
82    template: |
83      #   check acc = -1
84          movi v0, -1 # unexpected result
85          jne v0, exit_failure
86          ldai 0 # passed
87          return
88      exit_failure:
89          ldai 1 # failed
90          return
91      }
92  - name: check-acc-1
93    template: |
94      #   check positive
95          movi v0, 1 # expected result
96          jne v0, exit_failure
97          ldai 0 # passed
98          return
99      exit_failure:
100          ldai 1 # failed
101          return
102      }
103
104  - name: ArithmeticException
105    template: |
106      # header
107      .record panda.ArithmeticException <external>
108
109  - name: main-exitcode-wrapper
110    # This is the wrapper for _GLOBAL::main function to avoid false-positive cases.
111    # Please, do not use this wrapper in test definition directly
112    template: |
113      #
114      .function i32 main_exitcode_wrapper() {
115          call main
116          jeqz wrapper_exit_positive
117          ldai 81
118          return
119      wrapper_exit_positive:
120          ldai 80
121          return
122      }
123
124  - name: obj_ctor
125    template: |
126      .record Obj {}
127
128      .function void Obj.ctor(Obj a0) <ctor> {
129          return.void
130      }
131
132  - name: panda_string
133    template: |
134      .record panda.String <external>
135
136  - name: xorshift32
137    template: |
138      #
139      # Next random number
140      # x ^= x << 13;
141      # x ^= x >> 17;
142      # x ^= x << 5;
143      .function i32 nextRand(i32 a0) {
144          mov v0, a0
145          lda v0
146          shli 13
147          xor2 v0
148          sta v0 # v-: v0 ^= v0 << 13;
149          shri 17
150          xor2 v0
151          sta v0 # v0: v0 ^= v0>> 17;
152          shli 5
153          xor2 v0 #  acc: v0 ^= v0 << 5;
154          return
155      }
156
157tests:
158  - include: 'add.yaml'
159  - include: 'add2.64.yaml'
160  - include: 'add2.yaml'
161  - include: 'addi.yaml'
162  - include: 'and.yaml'
163  - include: 'and2.64.yaml'
164  - include: 'and2.yaml'
165  - include: 'andi.yaml'
166  - include: 'ashr.yaml'
167  - include: 'ashr2.64.yaml'
168  - include: 'ashr2.yaml'
169  - include: 'ashri.yaml'
170  - include: 'call.acc.short.yaml'
171  - include: 'call.acc.yaml'
172  - include: 'call.polymorphic.range.yaml'
173  - include: 'call.polymorphic.short.yaml'
174  - include: 'call.polymorphic.yaml'
175  - include: 'call.range.yaml'
176  - include: 'call.short.yaml'
177  - include: 'call.virt.acc.short.yaml'
178  - include: 'call.virt.acc.yaml'
179  - include: 'call.virt.negative.yaml'
180  - include: 'call.virt.range.negative.yaml'
181  - include: 'call.virt.range.yaml'
182  - include: 'call.virt.range_base.yaml'
183  - include: 'call.virt.short.negative.yaml'
184  - include: 'call.virt.short.yaml'
185  - include: 'call.virt.yaml'
186  - include: 'call.yaml'
187  - include: 'calle.polymorphic.range.yaml'
188  - include: 'calle.polymorphic.short.yaml'
189  - include: 'calle.polymorphic.yaml'
190  - include: 'checkcast.yaml'
191  - include: 'cmp.64.yaml'
192  - include: 'div.yaml'
193  - include: 'div2.64.yaml'
194  - include: 'div2.yaml'
195  - include: 'divi.yaml'
196  - include: 'divu2.64.yaml'
197  - include: 'divu2.yaml'
198  - include: 'f32tof64.yaml'
199  - include: 'f32toi32.yaml'
200  - include: 'f32toi64.yaml'
201  - include: 'f32tou32.yaml'
202  - include: 'f32tou64.yaml'
203  - include: 'f64tof32.yaml'
204  - include: 'f64toi32.yaml'
205  - include: 'f64toi64.yaml'
206  - include: 'f64tou32.yaml'
207  - include: 'f64tou64.yaml'
208  - include: 'fadd2.64.yaml'
209  - include: 'fadd2.yaml'
210  - include: 'fcmpg.64.yaml'
211  - include: 'fcmpg.yaml'
212  - include: 'fcmpl.64.yaml'
213  - include: 'fcmpl.yaml'
214  - include: 'fdiv2.64.yaml'
215  - include: 'fdiv2.yaml'
216  - include: 'fldai.64.yaml'
217  - include: 'fldai.yaml'
218  - include: 'fldarr.32.yaml'
219  - include: 'fldarr.64.yaml'
220  - include: 'fmod2.64.yaml'
221  - include: 'fmod2.yaml'
222  - include: 'fmovi.64.yaml'
223  - include: 'fmovi.yaml'
224  - include: 'fmul2.64.yaml'
225  - include: 'fmul2.yaml'
226  - include: 'fneg.64.yaml'
227  - include: 'fneg.yaml'
228  - include: 'fp.yaml'
229  - include: 'fstarr.32.yaml'
230  - include: 'fstarr.64.yaml'
231  - include: 'fsub2.64.yaml'
232  - include: 'fsub2.yaml'
233  - include: 'i32tof32.yaml'
234  - include: 'i32tof64.yaml'
235  - include: 'i32toi16.yaml'
236  - include: 'i32toi64.yaml'
237  - include: 'i32toi8.yaml'
238  - include: 'i32tou1.yaml'
239  - include: 'i32tou16.yaml'
240  - include: 'i32tou8.yaml'
241  - include: 'i64tof32.yaml'
242  - include: 'i64tof64.yaml'
243  - include: 'i64toi32.yaml'
244  - include: 'i64tou1.yaml'
245  - include: 'inci.yaml'
246  - include: 'initobj.range.yaml'
247  - include: 'initobj.short.yaml'
248  - include: 'initobj.yaml'
249  - include: 'isinstance.yaml'
250  - include: 'jeq.obj.yaml'
251  - include: 'jeq.yaml'
252  - include: 'jeqz.obj.yaml'
253  - include: 'jeqz.yaml'
254  - include: 'jge.yaml'
255  - include: 'jgez.yaml'
256  - include: 'jgt.yaml'
257  - include: 'jgtz.yaml'
258  - include: 'jle.yaml'
259  - include: 'jlez.yaml'
260  - include: 'jlt.yaml'
261  - include: 'jltz.yaml'
262  - include: 'jmp.yaml'
263  - include: 'jne.obj.yaml'
264  - include: 'jne.yaml'
265  - include: 'jnez.obj.yaml'
266  - include: 'jnez.yaml'
267  - include: 'lda.64.yaml'
268  - include: 'lda.const.yaml'
269  - include: 'lda.null.yaml'
270  - include: 'lda.obj.yaml'
271  - include: 'lda.str.yaml'
272  - include: 'lda.type.yaml'
273  - include: 'lda.yaml'
274  - include: 'ldai.64.yaml'
275  - include: 'ldai.yaml'
276  - include: 'ldarr.16.yaml'
277  - include: 'ldarr.64.yaml'
278  - include: 'ldarr.8.yaml'
279  - include: 'ldarr.obj.yaml'
280  - include: 'ldarr.yaml'
281  - include: 'ldarru.16.yaml'
282  - include: 'ldarru.8.yaml'
283  - include: 'ldobj.64.yaml'
284  - include: 'ldobj.obj.yaml'
285  - include: 'ldobj.v.64.yaml'
286  - include: 'ldobj.v.obj.yaml'
287  - include: 'ldobj.v.yaml'
288  - include: 'ldobj.yaml'
289  - include: 'ldstatic.64.yaml'
290  - include: 'ldstatic.obj.yaml'
291  - include: 'ldstatic.yaml'
292  - include: 'lenarr.yaml'
293  - include: 'mod.yaml'
294  - include: 'mod2.64.yaml'
295  - include: 'mod2.yaml'
296  - include: 'modi.yaml'
297  - include: 'modu2.64.yaml'
298  - include: 'modu2.yaml'
299  - include: 'monitor.yaml'
300  - include: 'mov.64.yaml'
301  - include: 'mov.null.yaml'
302  - include: 'mov.obj.yaml'
303  - include: 'mov.yaml'
304  - include: 'movi.64.yaml'
305  - include: 'movi.yaml'
306  - include: 'mul.yaml'
307  - include: 'mul2.64.yaml'
308  - include: 'mul2.yaml'
309  - include: 'muli.yaml'
310  - include: 'neg.64.yaml'
311  - include: 'neg.yaml'
312  - include: 'newarr.yaml'
313  - include: 'newobj.yaml'
314  - include: 'nop.yaml'
315  - include: 'not.64.yaml'
316  - include: 'not.yaml'
317  - include: 'or.yaml'
318  - include: 'or2.64.yaml'
319  - include: 'or2.yaml'
320  - include: 'ori.yaml'
321  - include: 'return.64.yaml'
322  - include: 'return.obj.yaml'
323  - include: 'return.void.yaml'
324  - include: 'return.yaml'
325  - include: 'shl.yaml'
326  - include: 'shl2.64.yaml'
327  - include: 'shl2.yaml'
328  - include: 'shli.yaml'
329  - include: 'shr.yaml'
330  - include: 'shr2.64.yaml'
331  - include: 'shr2.yaml'
332  - include: 'shri.yaml'
333  - include: 'sta.64.yaml'
334  - include: 'sta.obj.yaml'
335  - include: 'sta.yaml'
336  - include: 'starr.16.yaml'
337  - include: 'starr.64.yaml'
338  - include: 'starr.8.yaml'
339  - include: 'starr.obj.yaml'
340  - include: 'starr.yaml'
341  - include: 'stobj.64.yaml'
342  - include: 'stobj.obj.yaml'
343  - include: 'stobj.v.64.yaml'
344  - include: 'stobj.v.obj.yaml'
345  - include: 'stobj.v.yaml'
346  - include: 'stobj.yaml'
347  - include: 'ststatic.64.yaml'
348  - include: 'ststatic.obj.yaml'
349  - include: 'ststatic.yaml'
350  - include: 'sub.yaml'
351  - include: 'sub2.64.yaml'
352  - include: 'sub2.yaml'
353  - include: 'subi.yaml'
354  - include: 'throw.yaml'
355  - include: 'u32tof32.yaml'
356  - include: 'u32tof64.yaml'
357  - include: 'u32toi16.yaml'
358  - include: 'u32toi64.yaml'
359  - include: 'u32toi8.yaml'
360  - include: 'u32tou1.yaml'
361  - include: 'u32tou16.yaml'
362  - include: 'u32tou8.yaml'
363  - include: 'u64tof32.yaml'
364  - include: 'u64tof64.yaml'
365  - include: 'u64toi32.yaml'
366  - include: 'u64tou1.yaml'
367  - include: 'u64tou32.yaml'
368  - include: 'ucmp.64.yaml'
369  - include: 'ucmp.yaml'
370  - include: 'xor.yaml'
371  - include: 'xor2.64.yaml'
372  - include: 'xor2.yaml'
373  - include: 'xori.yaml'
374