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 14definitions: [] 15tests: 16 - file-name: "add2" 17 isa: 18 title: Two address binary operation on accumulator 19 description: > 20 Perform specified binary operation on accumulator and register and store result into accumulator 21 exceptions: 22 - x_none 23 commands: 24 - file-name: "op_vs_8_zero" 25 isa: 26 instructions: 27 - sig: add2 v:in:i32 28 acc: inout:i32 29 format: [op_v_8] 30 code-template: | 31 # 32 ldai 0 33 movi v0, %s 34 add2 v0 35 movi v0, %s 36 jne v0, set_failure 37 ldai 0 38 jmp fall_through 39 set_failure: 40 ldai 1 41 fall_through: 42 description: Check add2 with zero and various values. 43 cases: 44 - values: 45 - "0" 46 - "0" 47 - values: 48 - "1" 49 - "1" 50 - values: 51 - "-1" 52 - "-1" 53 - values: 54 - "0x7FFFFFFF" 55 - "0x7FFFFFFF" 56 - values: 57 - "0x80000000" 58 - "0x80000000" 59 - values: 60 - "-0x7FFFFFFF" 61 - "-0x7FFFFFFF" 62 - values: 63 - "-0x80000000" 64 - "-0x80000000" 65 - values: 66 - "0xFFFFFFFF" 67 - "0xFFFFFFFF" 68 - values: 69 - "-0xFFFFFFFF" 70 - "-0xFFFFFFFF" 71 72 - file-name: "op_vs_8_pone" 73 isa: 74 instructions: 75 - sig: add2 v:in:i32 76 acc: inout:i32 77 format: [op_v_8] 78 code-template: | 79 # 80 ldai 1 81 movi v0, %s 82 add2 v0 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 add2 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_vs_8_none" 122 isa: 123 instructions: 124 - sig: add2 v:in:i32 125 acc: inout:i32 126 format: [op_v_8] 127 code-template: | 128 # 129 ldai -1 130 movi v0, %s 131 add2 v0 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 add2 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_vs_8_pmax" 173 isa: 174 instructions: 175 - sig: add2 v:in:i32 176 acc: inout:i32 177 format: [op_v_8] 178 code-template: | 179 # 180 ldai 0x7FFFFFFF 181 movi v0, %s 182 add2 v0 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 add2 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 226 - file-name: "op_vs_8_nmax" 227 isa: 228 instructions: 229 - sig: add2 v:in:i32 230 acc: inout:i32 231 format: [op_v_8] 232 code-template: | 233 # 234 ldai -0x80000000 235 movi v0, %s 236 add2 v0 237 movi v0, %s 238 jne v0, set_failure 239 ldai 0 240 jmp fall_through 241 set_failure: 242 ldai 1 243 fall_through: 244 description: Check add2 with -max and various values. 245 cases: 246 - values: 247 - "0" 248 - "0x80000000" 249 - values: 250 - "1" 251 - "0x80000001" 252 - values: 253 - "-1" 254 - "0x7FFFFFFF" 255 tags: ["clang_release_sanitizer"] 256 bugid: ["966"] 257 - values: 258 - "0x7FFFFFFF" 259 - "-1" 260 - values: 261 - "0x80000000" 262 - "0" 263 tags: ["clang_release_sanitizer"] 264 bugid: ["966"] 265 - values: 266 - "-0x7FFFFFFF" 267 - "1" 268 tags: ["clang_release_sanitizer"] 269 bugid: ["966"] 270 - values: 271 - "-0x80000000" 272 - "0" 273 tags: ["clang_release_sanitizer"] 274 bugid: ["966"] 275 - values: 276 - "0xFFFFFFFF" 277 - "0x7FFFFFFF" 278 tags: ["clang_release_sanitizer"] 279 bugid: ["966"] 280 - values: 281 - "-0xFFFFFFFF" 282 - "-0x7FFFFFFF" 283 284 - file-name: "vals" 285 isa: 286 instructions: 287 - sig: add2 v:in:i32 288 acc: inout:i32 289 format: [op_v_8] 290 tags: ['tsan'] 291 code-template: | 292 # 293 ldai %s 294 movi v0, %s 295 add2 v0 296 movi v0, %s 297 jne v0, set_failure 298 ldai 0 299 jmp fall_through 300 set_failure: 301 ldai 1 302 fall_through: 303 description: Check add2 with various values. 304 cases: 305 - values: 306 - "0x455ed8f5" 307 - "0xfe61fbdd" 308 - "0x43c0d4d2" 309 - values: 310 - "0xc3e6a70" 311 - "0xae9b1e98" 312 - "0xbad98908" 313 - values: 314 - "0xd2670242" 315 - "0xef691c0f" 316 - "0xc1d01e51" 317 - values: 318 - "0xf6d0f4f8" 319 - "0x4ee5e5df" 320 - "0x45b6dad7" 321 - values: 322 - "0xded7f996" 323 - "0xd94428a1" 324 - "0xb81c2237" 325 - values: 326 - "0x262d5e15" 327 - "0x1a85200d" 328 - "0x40b27e22" 329 - values: 330 - "0x4bb930e4" 331 - "0x416b3a07" 332 - "0x8d246aeb" 333 tags: ["clang_release_sanitizer"] 334 bugid: ["966"] 335 - values: 336 - "0x61a80560" 337 - "0xb076ee9" 338 - "0x6caf7449" 339 - values: 340 - "0x42bd8cd3" 341 - "0x9e28b8b6" 342 - "0xe0e64589" 343 - values: 344 - "0x3c0a62e1" 345 - "0xb18cfa" 346 - "0x3cbbefdb" 347 348 - file-name: "vals_mod32_1" 349 bugid: ['1324', '2072'] 350 tags: ['verifier'] 351 runner-options: ['verifier-failure', 'verifier-debug-config'] 352 isa: 353 instructions: 354 - sig: add2 v:in:i32 355 acc: inout:i32 356 format: [op_v_8] 357 code-template: | 358 # 359 ldai %s 360 movi v0, %s 361 add2 v0 362 movi.64 v0, %s 363 cmp.64 v0 364 description: Check add2 with incorrect register and accumulator type. 365 cases: 366 - values: 367 - "0x7FFFFFFF" 368 - "0x7FFFFFFF" 369 - "0xFFFFFFFFFFFFFFFE" 370 tags: ["clang_release_sanitizer"] 371 bugid: ["966"] 372 - values: 373 - "0x7FFFFFFF" 374 - "0x80000000" 375 - "0xFFFFFFFFFFFFFFFF" 376 - values: 377 - "0x80000000" 378 - "0x80000000" 379 - "0" 380 tags: ["clang_release_sanitizer"] 381 bugid: ["966"] 382 383 - file-name: "vals_mod32_2" 384 bugid: ['1324'] 385 tags: ['verifier'] 386 runner-options: ['verifier-failure', 'verifier-debug-config'] 387 isa: 388 instructions: 389 - sig: add2 v:in:i32 390 acc: inout:i32 391 format: [op_v_8] 392 code-template: | 393 # 394 ldai.64 %s 395 movi.64 v0, %s 396 add2 v0 397 movi.64 v0, %s 398 cmp.64 v0 399 description: Check add2 with incorrect register and accumulator type. 400 cases: 401 - values: 402 - "0x17FFFFFFF" 403 - "0x17FFFFFFF" 404 - "0xFFFFFFFFFFFFFFFE" 405 tags: ["clang_release_sanitizer"] 406 bugid: ["966"] 407 - values: 408 - "0x777777777FFFFFFF" 409 - "0x1111111180000000" 410 - "0xFFFFFFFFFFFFFFFF" 411 - values: 412 - "0x180000000" 413 - "0x180000000" 414 - "0" 415 tags: ["clang_release_sanitizer"] 416 bugid: ["966"] 417 418 - file-name: "regs" 419 isa: 420 instructions: 421 - sig: add2 v:in:i32 422 acc: inout:i32 423 format: [op_v_8] 424 runner-options: ['compile-only'] 425 code-template: | 426 # 427 add2 %s 428 check-type: none 429 description: Check add2 with various register numbers. 430 cases: 431 - values: 432 - "v255" 433 - values: 434 - "v256" 435 runner-options: ['compile-failure'] 436 437 - file-name: "type" 438 bugid: ["964", "966"] 439 tags: ['verifier'] 440 isa: 441 instructions: 442 - sig: add2 v:in:i32 443 acc: inout:i32 444 format: [op_v_8] 445 verification: 446 - acc_type 447 - v1_type 448 runner-options: ['verifier-failure', 'verifier-debug-config'] 449 header-template: [] 450 code-template: | 451 # 452 .record A {} 453 .record B {} 454 .record panda.String <external> 455 .record panda.Object <external> 456 .function i32 main() { 457 %s 458 *s 459 add2 v0 460 ldai 0 461 check-type: no-check 462 description: Check add2 with incorrect register and accumulator type. 463 template-cases: 464 - values: 465 - ldai.64 0 466 - values: 467 - fldai.64 0 468 - values: 469 - | 470 # 471 lda.type B 472 - values: 473 - | 474 # 475 lda.type B[] 476 - values: 477 - | 478 # 479 lda.type panda.String 480 - values: 481 - | 482 # 483 lda.type panda.Object 484 - values: 485 - | 486 # 487 movi v0, 10 488 newarr v0, v0, i32[] 489 lda.obj v0 490 - values: 491 - lda.null 492 - values: 493 - ldai 0 494 exclude: [val] 495 cases: 496 - values: 497 - movi.64 v1, 0 498 - values: 499 - fmovi.64 v1, 0 500 - values: 501 - | 502 # 503 lda.type A 504 sta.obj v1 505 - values: 506 - | 507 # 508 lda.type A[] 509 sta.obj v1 510 511 - values: 512 - | 513 # 514 lda.type panda.String 515 sta.obj v1 516 - values: 517 - | 518 # 519 lda.type panda.Object 520 sta.obj v1 521 - values: 522 - | 523 # 524 movi v1, 10 525 newarr v1, v1, f64[] 526 - values: 527 - mov.null v1 528 - values: 529 - movi v1, 0 530 id: val 531 532 - file-name: uninitialized_regs 533 isa: 534 instructions: 535 - sig: add2 v:in:i32 536 acc: inout:i32 537 format: [op_v_8] 538 description: Check add2 with uninitialized registers. 539 tags: ['verifier'] 540 runner-options: ['verifier-failure', 'verifier-debug-config'] 541 header-template: [] 542 code-template: | 543 # 544 .function i32 main() { 545 %s 546 *s 547 add2 *s 548 ldai 0 549 check-type: no-check 550 template-cases: 551 - values: 552 - '' 553 - values: 554 - ldai 0 555 exclude: [init] 556 557 cases: 558 - values: 559 - '' 560 - v0 561 - values: 562 - movi v1, 0 563 - v1 564 id: init 565 - values: 566 - '' 567 - v8 568 - values: 569 - '' 570 - v15 571 - values: 572 - movi v15, 0 573 - v15 574 id: init 575