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: "sub2" 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: sub2 v:in:i32 28 acc: inout:i32 29 format: [op_v_8] 30 code-template: | 31 # 32 ldai 0 33 movi v0, %s 34 sub2 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 sub2 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_vs_8_pone" 75 isa: 76 instructions: 77 - sig: sub2 v:in:i32 78 acc: inout:i32 79 format: [op_v_8] 80 code-template: | 81 # 82 ldai 1 83 movi v0, %s 84 sub2 v0 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 sub2 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_vs_8_none" 125 isa: 126 instructions: 127 - sig: sub2 v:in:i32 128 acc: inout:i32 129 format: [op_v_8] 130 code-template: | 131 # 132 ldai -1 133 movi v0, %s 134 sub2 v0 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 sub2 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_vs_8_pmax" 172 isa: 173 instructions: 174 - sig: sub2 v:in:i32 175 acc: inout:i32 176 format: [op_v_8] 177 code-template: | 178 # 179 ldai 0x7FFFFFFF 180 movi v0, %s 181 sub2 v0 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 sub2 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_vs_8_nmax" 225 isa: 226 instructions: 227 - sig: sub2 v:in:i32 228 acc: inout:i32 229 format: [op_v_8] 230 code-template: | 231 # 232 ldai -0x80000000 233 movi v0, %s 234 sub2 v0 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 sub2 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: sub2 v:in:i32 279 acc: inout:i32 280 format: [op_v_8] 281 code-template: | 282 # 283 ldai %s 284 movi v0, %s 285 sub2 v0 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 sub2 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: sub2 v:in:i32 348 acc: inout:i32 349 format: [op_v_8] 350 code-template: | 351 # 352 ldai %s 353 movi v0, %s 354 sub2 v0 355 movi.64 v0, %s 356 cmp.64 v0 357 description: Check sub2 with incorrect accumulator and 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: sub2 v:in:i32 381 acc: inout:i32 382 format: [op_v_8] 383 code-template: | 384 # 385 ldai.64 %s 386 movi.64 v0, %s 387 sub2 v0 388 movi.64 v0, %s 389 cmp.64 v0 390 description: Check sub2 with incorrect accumulator and 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: sub2 v:in:i32 411 acc: inout:i32 412 format: [op_v_8] 413 runner-options: ['compile-only'] 414 code-template: | 415 # 416 sub2 %s 417 check-type: none 418 description: Check sub2 with various register numbers. 419 cases: 420 - values: 421 - "v255" 422 - values: 423 - "v256" 424 runner-options: ['compile-failure'] 425 426 - file-name: "type" 427 bugid: ["964", "966"] 428 tags: ["verifier"] 429 isa: 430 verification: 431 - acc_type 432 - v1_type 433 runner-options: ['verifier-failure', 'verifier-config'] 434 header-template: [] 435 code-template: | 436 .record T {} 437 .function i32 main() { 438 %s 439 *s 440 sub2 v0 441 ldai 0 442 check-type: no-check 443 description: Check 'sub2' with incorrect accumulator and/or register types. 444 cases: 445 - values: 446 - ldai 0 447 id: acc_ok 448 - values: 449 - ldai.64 0 450 - values: 451 - fldai 0 452 bugid: ['7315'] 453 - values: 454 - fldai.64 0 455 - values: 456 - lda.null 457 - values: 458 - | 459 # 460 movi v1, 0 461 newarr v1, v1, i32[] 462 lda.obj v1 463 - values: 464 - lda.str "0" 465 - values: 466 - lda.type T 467 - values: 468 - | 469 # 470 newobj v1, T 471 lda.obj v1 472 template-cases: 473 - values: 474 - movi v0, 0 475 exclude: [acc_ok] 476 - values: 477 - movi.64 v0, 0 478 - values: 479 - fmovi v0, 0 480 bugid: ['7315'] 481 - values: 482 - fmovi.64 v0, 0 483 - values: 484 - mov.null v0 485 - values: 486 - | 487 # 488 movi v0, 0 489 newarr v0, v0, i32[] 490 - values: 491 - | 492 # 493 lda.str "0" 494 sta.obj v0 495 - values: 496 - | 497 # 498 lda.type T 499 sta.obj v0 500 - values: 501 - newobj v0, T 502 503 504 - file-name: uninitialized_regs 505 isa: 506 instructions: 507 - sig: sub2 v:in:i32 508 acc: inout:i32 509 format: [op_v_8] 510 description: Check 'sub2' with uninitialized registers. 511 tags: ['verifier'] 512 runner-options: ['verifier-failure', 'verifier-config'] 513 code-template: | 514 # 515 %s 516 *s 517 sub2 *s 518 check-type: exit-positive 519 template-cases: 520 - values: 521 - '' 522 - values: 523 - ldai 0 524 exclude: [init] 525 cases: 526 - values: 527 - '' 528 - v0 529 - values: 530 - movi v1, 0 531 - v1 532 id: init 533 - values: 534 - '' 535 - v8 536 - values: 537 - '' 538 - v15 539 - values: 540 - movi v15, 0 541 - v15 542 id: init 543