1# Copyright (c) 2021 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--- 15definitions: [] 16tests: 17 - file-name: add 18 isa: 19 title: Three address binary operation 20 description: Perform specified binary operation on two registers and store result 21 into accumulator 22 exceptions: 23 - x_none 24 commands: 25 - file-name: op_vs1_4_vs2_4_zero 26 isa: 27 instructions: 28 - sig: add v1:in:i32, v2:in:i32 29 acc: out:i32 30 format: [op_v1_4_v2_4] 31 code-template: | 32 # 33 movi v0, 0 34 movi v1, %s 35 add v0, v1 36 movi v0, %s 37 jne v0, set_failure 38 ldai 0 39 jmp fall_through 40 set_failure: 41 ldai 1 42 fall_through: 43 description: Check add with zero and various values. 44 cases: 45 - values: 46 - '0' 47 - '0' 48 - values: 49 - '1' 50 - '1' 51 - values: 52 - "-1" 53 - "-1" 54 - values: 55 - '0x7FFFFFFF' 56 - '0x7FFFFFFF' 57 - values: 58 - '0x80000000' 59 - '0x80000000' 60 - values: 61 - "-0x7FFFFFFF" 62 - "-0x7FFFFFFF" 63 - values: 64 - "-0x80000000" 65 - "-0x80000000" 66 - values: 67 - '0xFFFFFFFF' 68 - '0xFFFFFFFF' 69 - values: 70 - "-0xFFFFFFFF" 71 - "-0xFFFFFFFF" 72 - file-name: op_vs1_4_vs2_4_pone 73 isa: 74 instructions: 75 - sig: add v1:in:i32, v2:in:i32 76 acc: out:i32 77 format: [op_v1_4_v2_4] 78 code-template: | 79 # 80 movi v0, 1 81 movi v1, %s 82 add v0, v1 83 movi v0, %s 84 jne v0, set_failure 85 ldai 0 86 jmp fall_through 87 set_failure: 88 ldai 1 89 fall_through: 90 description: Check add with +1 and various values. 91 cases: 92 - values: 93 - '0' 94 - '1' 95 - values: 96 - '1' 97 - '2' 98 - values: 99 - "-1" 100 - '0' 101 - values: 102 - '0x7FFFFFFF' 103 - '0x80000000' 104 tags: ["clang_release_sanitizer"] 105 bugid: ["966"] 106 - values: 107 - '0x80000000' 108 - '0x80000001' 109 - values: 110 - "-0x7FFFFFFF" 111 - "-0x7FFFFFFE" 112 - values: 113 - "-0x80000000" 114 - "-0x7FFFFFFF" 115 - values: 116 - '0xFFFFFFFF' 117 - '0' 118 - values: 119 - "-0xFFFFFFFF" 120 - "-0xFFFFFFFE" 121 - file-name: op_vs1_4_vs2_4_none 122 isa: 123 instructions: 124 - sig: add v1:in:i32, v2:in:i32 125 acc: out:i32 126 format: [op_v1_4_v2_4] 127 code-template: | 128 # 129 movi v0, -1 130 movi v1, %s 131 add v0, v1 132 movi v0, %s 133 jne v0, set_failure 134 ldai 0 135 jmp fall_through 136 set_failure: 137 ldai 1 138 fall_through: 139 description: Check add with -1 and various values. 140 cases: 141 - values: 142 - '0' 143 - "-1" 144 - values: 145 - '1' 146 - '0' 147 - values: 148 - "-1" 149 - "-2" 150 - values: 151 - '0x7FFFFFFF' 152 - '0x7FFFFFFE' 153 - values: 154 - '0x80000000' 155 - '0x7FFFFFFF' 156 tags: ["clang_release_sanitizer"] 157 bugid: ["966"] 158 - values: 159 - "-0x7FFFFFFF" 160 - "-0x80000000" 161 - values: 162 - "-0x80000000" 163 - "-0x80000001" 164 tags: ["clang_release_sanitizer"] 165 bugid: ["966"] 166 - values: 167 - '0xFFFFFFFF' 168 - "-2" 169 - values: 170 - "-0xFFFFFFFF" 171 - '0' 172 - file-name: op_vs1_4_vs2_4_pmax 173 isa: 174 instructions: 175 - sig: add v1:in:i32, v2:in:i32 176 acc: out:i32 177 format: [op_v1_4_v2_4] 178 code-template: | 179 # 180 movi v0, 0x7FFFFFFF 181 movi v1, %s 182 add v0, v1 183 movi v0, %s 184 jne v0, set_failure 185 ldai 0 186 jmp fall_through 187 set_failure: 188 ldai 1 189 fall_through: 190 description: Check add with +max and various values. 191 cases: 192 - values: 193 - '0' 194 - '0x7fffffff' 195 - values: 196 - '1' 197 - '0x80000000' 198 tags: ["clang_release_sanitizer"] 199 bugid: ["966"] 200 - values: 201 - "-1" 202 - '0x7FFFFFFE' 203 - values: 204 - '0x7FFFFFFF' 205 - '0xFFFFFFFE' 206 tags: ["clang_release_sanitizer"] 207 bugid: ["966"] 208 - values: 209 - '0x80000000' 210 - '0xFFFFFFFF' 211 - values: 212 - "-0x7FFFFFFF" 213 - '0' 214 - values: 215 - "-0x80000000" 216 - '0xFFFFFFFF' 217 - values: 218 - '0xFFFFFFFF' 219 - '0x7FFFFFFE' 220 - values: 221 - "-0xFFFFFFFF" 222 - '0x80000000' 223 tags: ["clang_release_sanitizer"] 224 bugid: ["966"] 225 - file-name: op_vs1_4_vs2_4_nmax 226 isa: 227 instructions: 228 - sig: add v1:in:i32, v2:in:i32 229 acc: out:i32 230 format: [op_v1_4_v2_4] 231 code-template: | 232 # 233 movi v0, -0x80000000 234 movi v1, %s 235 add v0, v1 236 movi v0, %s 237 jne v0, set_failure 238 ldai 0 239 jmp fall_through 240 set_failure: 241 ldai 1 242 fall_through: 243 description: Check add with -max and various values. 244 cases: 245 - values: 246 - '0' 247 - '0x80000000' 248 - values: 249 - '1' 250 - '0x80000001' 251 - values: 252 - "-1" 253 - '0x7FFFFFFF' 254 tags: ["clang_release_sanitizer"] 255 bugid: ["966"] 256 - values: 257 - '0x7FFFFFFF' 258 - "-1" 259 - values: 260 - '0x80000000' 261 - '0' 262 tags: ["clang_release_sanitizer"] 263 bugid: ["966"] 264 - values: 265 - "-0x7FFFFFFF" 266 - '1' 267 tags: ["clang_release_sanitizer"] 268 bugid: ["966"] 269 - values: 270 - "-0x80000000" 271 - '0' 272 tags: ["clang_release_sanitizer"] 273 bugid: ["966"] 274 - values: 275 - '0xFFFFFFFF' 276 - '0x7FFFFFFF' 277 tags: ["clang_release_sanitizer"] 278 bugid: ["966"] 279 - values: 280 - "-0xFFFFFFFF" 281 - "-0x7FFFFFFF" 282 - file-name: vals 283 isa: 284 instructions: 285 - sig: add v1:in:i32, v2:in:i32 286 acc: out:i32 287 format: [op_v1_4_v2_4] 288 code-template: | 289 # 290 movi v0, %s 291 movi v1, %s 292 add v0, v1 293 movi v0, %s 294 jne v0, set_failure 295 ldai 0 296 jmp fall_through 297 set_failure: 298 ldai 1 299 fall_through: 300 description: Check add with various values. 301 tags: ['tsan'] 302 cases: 303 - values: 304 - '0x455ed8f5' 305 - '0xfe61fbdd' 306 - '0x43c0d4d2' 307 - values: 308 - '0xc3e6a70' 309 - '0xae9b1e98' 310 - '0xbad98908' 311 - values: 312 - '0xd2670242' 313 - '0xef691c0f' 314 - '0xc1d01e51' 315 - values: 316 - '0xf6d0f4f8' 317 - '0x4ee5e5df' 318 - '0x45b6dad7' 319 - values: 320 - '0xded7f996' 321 - '0xd94428a1' 322 - '0xb81c2237' 323 - values: 324 - '0x262d5e15' 325 - '0x1a85200d' 326 - '0x40b27e22' 327 - values: 328 - '0x4bb930e4' 329 - '0x416b3a07' 330 - '0x8d246aeb' 331 tags: ["clang_release_sanitizer"] 332 bugid: ["966"] 333 - values: 334 - '0x61a80560' 335 - '0xb076ee9' 336 - '0x6caf7449' 337 - values: 338 - '0x42bd8cd3' 339 - '0x9e28b8b6' 340 - '0xe0e64589' 341 - values: 342 - '0x3c0a62e1' 343 - '0xb18cfa' 344 - '0x3cbbefdb' 345 - file-name: vals_mod32_1 346 bugid: ['1324', '2072'] 347 tags: ['verifier'] 348 runner-options: ['verifier-failure', 'verifier-debug-config'] 349 isa: 350 instructions: 351 - sig: add v1:in:i32, v2:in:i32 352 acc: out:i32 353 format: [op_v1_4_v2_4] 354 code-template: | 355 # 356 movi v0, %s 357 movi v1, %s 358 add v0, v1 359 movi.64 v0, %s 360 cmp.64 v0 361 description: Check add with incorrect register type. 362 cases: 363 - values: 364 - '0x7FFFFFFF' 365 - '0x7FFFFFFF' 366 - '0xFFFFFFFFFFFFFFFE' 367 tags: ["clang_release_sanitizer"] 368 bugid: ["966"] 369 - values: 370 - '0x7FFFFFFF' 371 - '0x80000000' 372 - '0xFFFFFFFFFFFFFFFF' 373 - values: 374 - '0x80000000' 375 - '0x80000000' 376 - '0' 377 tags: ["clang_release_sanitizer"] 378 bugid: ["966"] 379 - file-name: vals_mod32_2 380 bugid: ['1324'] 381 tags: ['verifier'] 382 runner-options: ['verifier-failure', 'verifier-debug-config'] 383 isa: 384 instructions: 385 - sig: add v1:in:i32, v2:in:i32 386 acc: out:i32 387 format: [op_v1_4_v2_4] 388 code-template: | 389 # 390 movi.64 v0, %s 391 movi.64 v1, %s 392 add v0, v1 393 movi.64 v0, %s 394 cmp.64 v0 395 description: Check add with incorrect register type. 396 cases: 397 - values: 398 - '0x17FFFFFFF' 399 - '0x17FFFFFFF' 400 - '0xFFFFFFFFFFFFFFFE' 401 tags: ["clang_release_sanitizer"] 402 bugid: ["966"] 403 - values: 404 - '0x777777777FFFFFFF' 405 - '0x1111111180000000' 406 - '0xFFFFFFFFFFFFFFFF' 407 - values: 408 - '0x180000000' 409 - '0x180000000' 410 - '0' 411 tags: ["clang_release_sanitizer"] 412 bugid: ["966"] 413 - file-name: regs 414 isa: 415 instructions: 416 - sig: add v1:in:i32, v2:in:i32 417 acc: out:i32 418 format: [op_v1_4_v2_4] 419 runner-options: 420 - compile-only 421 code-template: | 422 # 423 add %s, %s 424 check-type: none 425 description: Check add with various register numbers. 426 cases: 427 - values: 428 - v0 429 - v15 430 - values: 431 - v0 432 - v16 433 runner-options: 434 - compile-failure 435 - values: 436 - v15 437 - v0 438 - values: 439 - v16 440 - v0 441 runner-options: 442 - compile-failure 443 444 - file-name: type 445 isa: 446 instructions: 447 - sig: add v1:in:i32, v2:in:i32 448 acc: out:i32 449 format: [op_v1_4_v2_4] 450 verification: 451 - v1_type 452 - v2_type 453 tags: ['verifier'] 454 runner-options: ['verifier-failure', 'verifier-debug-config'] 455 header-template: [] 456 code-template: | 457 # 458 .record A {} 459 .record B {} 460 .record panda.String <external> 461 .record panda.Object <external> 462 .function i32 main() { 463 %s 464 *s 465 add v0, v1 466 ldai 0 467 check-type: no-check 468 description: Check add with incorrect register type. 469 template-cases: 470 - values: 471 - movi.64 v0, 0 472 - values: 473 - fmovi.64 v0, 0 474 - values: 475 - | 476 # 477 lda.type B 478 sta.obj v0 479 - values: 480 - | 481 # 482 lda.type B[] 483 sta.obj v0 484 - values: 485 - | 486 # 487 lda.type panda.String 488 sta.obj v0 489 - values: 490 - | 491 # 492 lda.type panda.Object 493 sta.obj v0 494 - values: 495 - | 496 # 497 movi v0, 10 498 newarr v0, v0, i32[] 499 - values: 500 - mov.null v0 501 - values: 502 - movi v0, 0 503 exclude: [val] 504 cases: 505 - values: 506 - movi.64 v1, 0 507 - values: 508 - fmovi.64 v1, 0 509 - values: 510 - | 511 # 512 lda.type A 513 sta.obj v1 514 - values: 515 - | 516 # 517 lda.type A[] 518 sta.obj v1 519 520 - values: 521 - | 522 # 523 lda.type panda.String 524 sta.obj v1 525 - values: 526 - | 527 # 528 lda.type panda.Object 529 sta.obj v1 530 - values: 531 - | 532 # 533 movi v1, 10 534 newarr v1, v1, f64[] 535 - values: 536 - mov.null v1 537 - values: 538 - movi v1, 0 539 id: val 540 541 - file-name: uninitialized_regs 542 isa: 543 instructions: 544 - sig: add v1:in:i32, v2:in:i32 545 acc: out:i32 546 format: [op_v1_4_v2_4] 547 description: Check add with uninitialized registers. 548 tags: ['verifier'] 549 runner-options: ['verifier-failure', 'verifier-debug-config'] 550 header-template: [] 551 code-template: | 552 # 553 .function i32 main() { 554 %s 555 *s 556 add %s, *s 557 ldai 0 558 check-type: no-check 559 template-cases: 560 - values: 561 - '' 562 - v0 563 - values: 564 - movi v0, 0 565 - v0 566 exclude: [init] 567 - values: 568 - '' 569 - v7 570 - values: 571 - '' 572 - v15 573 - values: 574 - 'movi v15, 0' 575 - v15 576 exclude: [init] 577 cases: 578 - values: 579 - '' 580 - v1 581 - values: 582 - movi v1, 0 583 - v1 584 id: init 585 - values: 586 - '' 587 - v8 588 - values: 589 - '' 590 - v14 591