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