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: "mul2" 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: mul2 v:in:i32 28 acc: inout:i32 29 format: [op_v_8] 30 code-template: | 31 # 32 ldai 0 33 movi v0, %s 34 mul2 v0 35 movi v0, 0 36 jne v0, set_failure 37 ldai 0 38 jmp fall_through 39 set_failure: 40 ldai 1 41 fall_through: 42 description: Check mul2 with zero and various values. 43 cases: 44 - values: 45 - "0" 46 - values: 47 - "1" 48 - values: 49 - "-1" 50 - values: 51 - "0x7FFFFFFF" 52 - values: 53 - "0x80000000" 54 - values: 55 - "-0x7FFFFFFF" 56 - values: 57 - "-0x80000000" 58 - values: 59 - "0xFFFFFFFF" 60 - values: 61 - "-0xFFFFFFFF" 62 63 - file-name: "op_vs_8_pone" 64 isa: 65 instructions: 66 - sig: mul2 v:in:i32 67 acc: inout:i32 68 format: [op_v_8] 69 code-template: | 70 # 71 ldai 1 72 movi v0, %s 73 mul2 v0 74 movi v0, %s 75 jne v0, set_failure 76 ldai 0 77 jmp fall_through 78 set_failure: 79 ldai 1 80 fall_through: 81 description: Check mul2 with +1 and various values. 82 cases: 83 - values: 84 - "0" 85 - "0" 86 - values: 87 - "1" 88 - "1" 89 - values: 90 - "-1" 91 - "-1" 92 - values: 93 - "0x7FFFFFFF" 94 - "0x7FFFFFFF" 95 - values: 96 - "0x80000000" 97 - "0x80000000" 98 - values: 99 - "-0x7FFFFFFF" 100 - "-0x7FFFFFFF" 101 - values: 102 - "-0x80000000" 103 - "-0x80000000" 104 - values: 105 - "0xFFFFFFFF" 106 - "0xFFFFFFFF" 107 - values: 108 - "-0xFFFFFFFF" 109 - "-0xFFFFFFFF" 110 - file-name: "op_vs_8_none" 111 isa: 112 instructions: 113 - sig: mul2 v:in:i32 114 acc: inout:i32 115 format: [op_v_8] 116 code-template: | 117 # 118 ldai -1 119 movi v0, %s 120 mul2 v0 121 movi v0, %s 122 jne v0, set_failure 123 ldai 0 124 jmp fall_through 125 set_failure: 126 ldai 1 127 fall_through: 128 description: Check mul2 with -1 and various values. 129 cases: 130 - values: 131 - "0" 132 - "0" 133 - values: 134 - "1" 135 - "-1" 136 - values: 137 - "-1" 138 - "1" 139 - values: 140 - "0x7FFFFFFF" 141 - "-0x7FFFFFFF" 142 - values: 143 - "0x80000000" 144 - "0x80000000" 145 bugid: ['966'] 146 - values: 147 - "-0x7FFFFFFF" 148 - "0x7FFFFFFF" 149 - values: 150 - "-0x80000000" 151 - "0x80000000" 152 bugid: ['966'] 153 - values: 154 - "0xFFFFFFFF" 155 - "1" 156 - values: 157 - "-0xFFFFFFFF" 158 - "-1" 159 - file-name: "op_vs_8_pmax" 160 isa: 161 instructions: 162 - sig: mul2 v:in:i32 163 acc: inout:i32 164 format: [op_v_8] 165 code-template: | 166 # 167 ldai 0x7FFFFFFF 168 movi v0, %s 169 mul2 v0 170 movi v0, %s 171 jne v0, set_failure 172 ldai 0 173 jmp fall_through 174 set_failure: 175 ldai 1 176 fall_through: 177 description: Check mul2 with +max and various values. 178 cases: 179 - values: 180 - "0" 181 - "0" 182 - values: 183 - "1" 184 - "0x7FFFFFFF" 185 - values: 186 - "-1" 187 - "0x80000001" 188 - values: 189 - "0x7FFFFFFF" 190 - "1" 191 bugid: ['966'] 192 - values: 193 - "-0x7FFFFFFF" 194 - "-1" 195 bugid: ['966'] 196 - values: 197 - "0x80000000" 198 - "0x80000000" 199 bugid: ['966'] 200 - values: 201 - "-0x80000000" 202 - "0x80000000" 203 bugid: ['966'] 204 - values: 205 - "0xFFFFFFFF" 206 - "0x80000001" 207 - values: 208 - "-0xFFFFFFFF" 209 - "0x7FFFFFFF" 210 211 - file-name: "op_vs_8_nmax" 212 bugid: ['966'] 213 isa: 214 instructions: 215 - sig: mul2 v:in:i32 216 acc: inout:i32 217 format: [op_v_8] 218 code-template: | 219 # 220 ldai -0x80000000 221 movi v0, %s 222 mul2 v0 223 movi v0, %s 224 jne v0, set_failure 225 ldai 0 226 jmp fall_through 227 set_failure: 228 ldai 1 229 fall_through: 230 description: Check mul2 with -max and various values. 231 cases: 232 - values: 233 - "0" 234 - "0" 235 - values: 236 - "1" 237 - "0x80000000" 238 - values: 239 - "-1" 240 - "0x80000000" 241 - values: 242 - "0x7FFFFFFF" 243 - "0x80000000" 244 - values: 245 - "-0x7FFFFFFF" 246 - "0x80000000" 247 - values: 248 - "0x80000000" 249 - "0x0" 250 - values: 251 - "-0x80000000" 252 - "0x0" 253 - values: 254 - "0xFFFFFFFF" 255 - "0x80000000" 256 - values: 257 - "-0xFFFFFFFF" 258 - "0x80000000" 259 260 - file-name: "vals" 261 isa: 262 instructions: 263 - sig: mul2 v:in:i32 264 acc: inout:i32 265 format: [op_v_8] 266 code-template: | 267 # 268 ldai %s 269 movi v0, %s 270 mul2 v0 271 movi v0, %s 272 jne v0, set_failure 273 ldai 0 274 jmp fall_through 275 set_failure: 276 ldai 1 277 fall_through: 278 tags: ['tsan'] 279 bugid: ['966'] 280 description: Check mul2 with various values. 281 cases: 282 - values: 283 - "0x7A2CE254" 284 - "0xFB676533" 285 - "0x78083ABC" 286 - values: 287 - "0x6F7788C3" 288 - "0x65EB9775" 289 - "0xED4D861F" 290 - values: 291 - "0x801EF150" 292 - "0x29F1C73" 293 - "0x70FB26F0" 294 - values: 295 - "0xA6AB8140" 296 - "0x1D900575" 297 - "0x79E85240" 298 - values: 299 - "0x46689505" 300 - "0xADE64802" 301 - "0x3A38920A" 302 - values: 303 - "0x62C511AC" 304 - "0xD933351D" 305 - "0x4E3F9C7C" 306 - values: 307 - "0x59BB5F3E" 308 - "0x8E8C2463" 309 - "0x86C28CFA" 310 - values: 311 - "0x55255365" 312 - "0x98E808C3" 313 - "0x9191ADEF" 314 - values: 315 - "0x9664221" 316 - "0xF7F5AC4D" 317 - "0xA8C50FED" 318 - values: 319 - "0xC37EF875" 320 - "0xB09DAC86" 321 - "0x7325A93E" 322 323 - file-name: "vals_mod32_1" 324 isa: 325 instructions: 326 - sig: mul2 v:in:i32 327 acc: inout:i32 328 format: [op_v_8] 329 code-template: | 330 # 331 ldai %s 332 movi v0, %s 333 mul2 v0 334 movi.64 v0, %s 335 cmp.64 v0 336 tags: ["verifier"] 337 bugid: ['966', '1324', '2072'] 338 runner-options: ['verifier-failure', 'verifier-config'] 339 description: Check mul2 with incorrect accumulator ang register type. 340 cases: 341 - values: 342 - "0x7FFFFFFF" 343 - "2" 344 - "0xFFFFFFFFFFFFFFFE" 345 - values: 346 - "0x7FFFFFFF" 347 - "-2" 348 - "2" 349 - values: 350 - "0x80000000" 351 - "2" 352 - "0" 353 354 - file-name: "vals_mod32_2" 355 tags: ["verifier"] 356 bugid: ['1324', '966'] 357 runner-options: ['verifier-failure', 'verifier-config'] 358 isa: 359 instructions: 360 - sig: mul2 v:in:i32 361 acc: inout:i32 362 format: [op_v_8] 363 code-template: | 364 # 365 ldai.64 %s 366 movi.64 v0, %s 367 mul2 v0 368 movi.64 v0, %s 369 cmp.64 v0 370 description: Check mul2 with incorrect accumulator ang register type. 371 cases: 372 - values: 373 - "0x17FFFFFFF" 374 - "0x100000002" 375 - "0xFFFFFFFFFFFFFFFE" 376 - values: 377 - "0x777777777FFFFFFF" 378 - "-2" 379 - "2" 380 - values: 381 - "0x7654321080000000" 382 - "2" 383 - "0" 384 385 - file-name: "regs" 386 isa: 387 instructions: 388 - sig: mul2 v:in:i32 389 acc: inout:i32 390 format: [op_v_8] 391 runner-options: ['compile-only'] 392 code-template: | 393 # 394 mul2 %s 395 check-type: none 396 description: Check mul2 with various register numbers. 397 cases: 398 - values: 399 - "v255" 400 - values: 401 - "v256" 402 runner-options: ['compile-failure'] 403 404 - file-name: "type" 405 bugid: ["964", "966"] 406 tags: ["verifier"] 407 isa: 408 verification: 409 - acc_type 410 - v1_type 411 runner-options: ['verifier-failure', 'verifier-config'] 412 header-template: [] 413 code-template: | 414 .record T {} 415 .function i32 main() { 416 %s 417 *s 418 mul2 v0 419 check-type: exit-positive 420 description: Check 'mul2' with incorrect accumulator and/or register types. 421 cases: 422 - values: 423 - ldai 0 424 id: acc_ok 425 - values: 426 - ldai.64 0 427 - values: 428 - fldai 0 429 bugid: ['7315'] 430 - values: 431 - fldai.64 0 432 - values: 433 - lda.null 434 - values: 435 - | 436 # 437 movi v1, 0 438 newarr v1, v1, i32[] 439 lda.obj v1 440 - values: 441 - lda.str "0" 442 - values: 443 - lda.type T 444 - values: 445 - | 446 # 447 newobj v1, T 448 lda.obj v1 449 template-cases: 450 - values: 451 - movi v0, 0 452 exclude: [acc_ok] 453 - values: 454 - movi.64 v0, 0 455 - values: 456 - fmovi v0, 0 457 bugid: ['7315'] 458 - values: 459 - fmovi.64 v0, 0 460 - values: 461 - mov.null v0 462 - values: 463 - | 464 # 465 movi v0, 0 466 newarr v0, v0, i32[] 467 - values: 468 - | 469 # 470 lda.str "0" 471 sta.obj v0 472 - values: 473 - | 474 # 475 lda.type T 476 sta.obj v0 477 - values: 478 - newobj v0, T 479 480 481 - file-name: uninitialized_regs 482 isa: 483 instructions: 484 - sig: mul2 v:in:i32 485 acc: inout:i32 486 format: [op_v_8] 487 description: Check 'mul2' with uninitialized registers. 488 tags: ['verifier'] 489 runner-options: ['verifier-failure', 'verifier-config'] 490 code-template: | 491 # 492 %s 493 *s 494 mul2 *s 495 check-type: exit-positive 496 template-cases: 497 - values: 498 - '' 499 - values: 500 - ldai 0 501 exclude: [init] 502 cases: 503 - values: 504 - '' 505 - v0 506 - values: 507 - movi v1, 0 508 - v1 509 id: init 510 - values: 511 - '' 512 - v8 513 - values: 514 - '' 515 - v15 516 - values: 517 - movi v15, 0 518 - v15 519 id: init 520