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