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: "ashr" 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: ashr v1:in:i32, v2:in:i32 28 acc: out:i32 29 prefix: bit 30 format: [pref_op_v1_4_v2_4] 31 code-template: | 32 # 33 movi v0, 0 34 movi v1, %s 35 mov v1, v0 36 ashr v0, v1 37 movi v0, 0 38 jne v0, set_failure 39 ldai 0 40 jmp fall_through 41 set_failure: 42 ldai 1 43 fall_through: 44 description: Check ashr with zero and various values. 45 cases: 46 - values: 47 - "0" 48 - values: 49 - "1" 50 - values: 51 - "-1" 52 - values: 53 - "0x7FFFFFFF" 54 - values: 55 - "0x80000000" 56 - values: 57 - "-0x7FFFFFFF" 58 - values: 59 - "-0x80000000" 60 - values: 61 - "0xFFFFFFFF" 62 - values: 63 - "-0xFFFFFFFF" 64 65 - file-name: "op_vs1_4_vs2_4_pone" 66 isa: 67 instructions: 68 - sig: ashr v1:in:i32, v2:in:i32 69 acc: out:i32 70 prefix: bit 71 format: [pref_op_v1_4_v2_4] 72 code-template: | 73 # 74 movi v0, 1 75 movi v1, %s 76 ashr v0, v1 77 movi v0, %s 78 jne v0, set_failure 79 ldai 0 80 jmp fall_through 81 set_failure: 82 ldai 1 83 fall_through: 84 description: Check ashr with +1 and various values. 85 cases: 86 - values: 87 - "0" 88 - "1" 89 - values: 90 - "1" 91 - "0" 92 - values: 93 - "-1" 94 - "0" 95 bugid: ['1387'] 96 - values: 97 - "0x7FFFFFFF" 98 - "0" 99 bugid: ['1387'] 100 - values: 101 - "0x80000000" 102 - "1" 103 bugid: ['1387'] 104 - values: 105 - "-0x7FFFFFFF" 106 - "0" 107 bugid: ['1387'] 108 - values: 109 - "-0x80000000" 110 - "1" 111 bugid: ['1387'] 112 - values: 113 - "0xFFFFFFFF" 114 - "0" 115 bugid: ['1387'] 116 - values: 117 - "-0xFFFFFFFF" 118 - "0" 119 - file-name: "op_vs1_4_vs2_4_none" 120 isa: 121 instructions: 122 - sig: ashr v1:in:i32, v2:in:i32 123 acc: out:i32 124 prefix: bit 125 format: [pref_op_v1_4_v2_4] 126 code-template: | 127 # 128 movi v0, -1 129 movi v1, %s 130 ashr v0, v1 131 movi v0, 0xFFFFFFFF 132 jne v0, set_failure 133 ldai 0 134 jmp fall_through 135 set_failure: 136 ldai 1 137 fall_through: 138 description: Check ashr with -1 and various values. 139 cases: 140 - values: 141 - "0" 142 - values: 143 - "1" 144 - values: 145 - "-1" 146 bugid: ['1387'] 147 - values: 148 - "0x7FFFFFFF" 149 bugid: ['1387'] 150 - values: 151 - "0x80000000" 152 bugid: ['1387'] 153 - values: 154 - "-0x7FFFFFFF" 155 bugid: ['1387'] 156 - values: 157 - "-0x80000000" 158 bugid: ['1387'] 159 - values: 160 - "0xFFFFFFFF" 161 bugid: ['1387'] 162 - values: 163 - "-0xFFFFFFFF" 164 165 - file-name: "op_vs1_4_vs2_4_pmax" 166 isa: 167 instructions: 168 - sig: ashr v1:in:i32, v2:in:i32 169 acc: out:i32 170 prefix: bit 171 format: [pref_op_v1_4_v2_4] 172 code-template: | 173 # 174 movi v0, 0x7FFFFFFF 175 movi v1, %s 176 ashr v0, v1 177 movi v0, %s 178 jne v0, set_failure 179 ldai 0 180 jmp fall_through 181 set_failure: 182 ldai 1 183 fall_through: 184 description: Check ashr with +max and various values. 185 cases: 186 - values: 187 - "0" 188 - "0x7FFFFFFF" 189 - values: 190 - "1" 191 - "0x3FFFFFFF" 192 - values: 193 - "-1" 194 - "0x0" 195 bugid: ['1387'] 196 - values: 197 - "0x7FFFFFFF" 198 - "0x0" 199 bugid: ['1387'] 200 - values: 201 - "0x80000000" 202 - "0x7FFFFFFF" 203 bugid: ['1387'] 204 - values: 205 - "-0x7FFFFFFF" 206 - "0x3FFFFFFF" 207 bugid: ['1387'] 208 - values: 209 - "-0x80000000" 210 - "0x7FFFFFFF" 211 bugid: ['1387'] 212 - values: 213 - "0xFFFFFFFF" 214 - "0x0" 215 bugid: ['1387'] 216 - values: 217 - "-0xFFFFFFFF" 218 - "0x3FFFFFFF" 219 220 - file-name: "op_vs1_4_vs2_4_nmax" 221 isa: 222 instructions: 223 - sig: ashr v1:in:i32, v2:in:i32 224 acc: out:i32 225 prefix: bit 226 format: [pref_op_v1_4_v2_4] 227 code-template: | 228 # 229 movi v0, -0x80000000 230 movi v1, %s 231 ashr v0, v1 232 movi v0, %s 233 jne v0, set_failure 234 ldai 0 235 jmp fall_through 236 set_failure: 237 ldai 1 238 fall_through: 239 description: Check ashr with -max and various values. 240 cases: 241 - values: 242 - "0" 243 - "0x80000000" 244 - values: 245 - "1" 246 - "0xC0000000" 247 - values: 248 - "-1" 249 - "0xFFFFFFFF" 250 bugid: ['1387'] 251 - values: 252 - "0x7FFFFFFF" 253 - "0xFFFFFFFF" 254 bugid: ['1387'] 255 - values: 256 - "0x80000000" 257 - "0x80000000" 258 bugid: ['1387'] 259 - values: 260 - "-0x7FFFFFFF" 261 - "0xC0000000" 262 bugid: ['1387'] 263 - values: 264 - "-0x80000000" 265 - "0x80000000" 266 bugid: ['1387'] 267 - values: 268 - "0xFFFFFFFF" 269 - "0xFFFFFFFF" 270 bugid: ['1387'] 271 - values: 272 - "-0xFFFFFFFF" 273 - "0xC0000000" 274 275 - file-name: "vals" 276 bugid: ['1387'] 277 tags: ['tsan'] 278 isa: 279 instructions: 280 - sig: ashr v1:in:i32, v2:in:i32 281 acc: out:i32 282 prefix: bit 283 format: [pref_op_v1_4_v2_4] 284 code-template: | 285 # 286 movi v0, %s 287 movi v1, %s 288 ashr v0, v1 289 movi v0, %s 290 jne v0, set_failure 291 ldai 0 292 jmp fall_through 293 set_failure: 294 ldai 1 295 fall_through: 296 description: Check ashr with various values. 297 cases: 298 - values: 299 - "0xF7C3C59C" 300 - "0xBA9A9721" 301 - "0xFBE1E2CE" 302 - values: 303 - "0xC85A6FD0" 304 - "0xD6D79891" 305 - "0xFFFFE42D" 306 - values: 307 - "0x64A99B3C" 308 - "0x97FC66F9" 309 - "0x32" 310 - values: 311 - "0x7A92E59B" 312 - "0xD35D56A5" 313 - "0x3D4972C" 314 - values: 315 - "0x2B3E86A6" 316 - "0x634FFBF2" 317 - "0xACF" 318 - values: 319 - "0x6FA6AD46" 320 - "0x5F6A3A54" 321 - "0x6FA" 322 - values: 323 - "0xD3AC1EFA" 324 - "0x9551EEBF" 325 - "0xFFFFFFFF" 326 - values: 327 - "0x4DC08172" 328 - "0xA29C9583" 329 - "0x9B8102E" 330 - values: 331 - "0x9A768F76" 332 - "0x5AF13C53" 333 - "0xFFFFF34E" 334 - values: 335 - "0x71C01EC4" 336 - "0xC8FF2ECF" 337 - "0xE380" 338 339 - file-name: "vals_mod32_1" 340 bugid: ['1324', '2075'] 341 tags: ['verifier'] 342 runner-options: ['verifier-failure', 'verifier-config'] 343 isa: 344 instructions: 345 - sig: ashr v1:in:i32, v2:in:i32 346 acc: out:i32 347 prefix: bit 348 format: [pref_op_v1_4_v2_4] 349 code-template: | 350 # 351 movi.64 v0, %s 352 movi.64 v1, %s 353 ashr v0, v1 354 movi.64 v0, %s 355 cmp.64 v0 356 description: Check ashr with incorrect registers type. 357 cases: 358 - values: 359 - "0x17FFFFFFF" 360 - "0x1" 361 - "0x000000003FFFFFFF" 362 - values: 363 - "0x77777777FFFFFFFF" 364 - "0x1111111180000000" 365 - "0xFFFFFFFFFFFFFFFF" 366 - values: 367 - "0x180000000" 368 - "0x180000000" 369 - "0xFFFFFFFF80000000" 370 371 - file-name: "regs" 372 isa: 373 instructions: 374 - sig: ashr v1:in:i32, v2:in:i32 375 acc: out:i32 376 prefix: bit 377 format: [pref_op_v1_4_v2_4] 378 runner-options: ['compile-only'] 379 code-template: | 380 # 381 ashr %s, %s 382 check-type: none 383 description: Check ashr with various register numbers. 384 cases: 385 - values: 386 - v0 387 - v15 388 - values: 389 - v0 390 - v16 391 runner-options: 392 - compile-failure 393 - values: 394 - v15 395 - v0 396 - values: 397 - v16 398 - v0 399 runner-options: 400 - compile-failure 401 402 - file-name: type 403 isa: 404 verification: 405 - v1_type 406 - v2_type 407 tags: ['verifier'] 408 runner-options: ['verifier-failure', 'verifier-config'] 409 header-template: [] 410 code-template: | 411 # 412 .record A {} 413 .record B {} 414 .record panda.String <external> 415 .record panda.Object <external> 416 .function i32 main() { 417 %s 418 *s 419 ashr v0, v1 420 check-type: exit-positive 421 description: Check 'ashr' with incorrect register types. 422 template-cases: 423 - values: 424 - movi v0, 0 425 exclude: [val] 426 - values: 427 - movi.64 v0, 0 428 - values: 429 - fmovi v0, 0 430 bugid: ['7315'] 431 - values: 432 - fmovi.64 v0, 0 433 - values: 434 - | 435 # 436 lda.type B 437 sta.obj v0 438 - values: 439 - | 440 # 441 lda.type B[] 442 sta.obj v0 443 - values: 444 - | 445 # 446 lda.type panda.String 447 sta.obj v0 448 - values: 449 - | 450 # 451 lda.type panda.Object 452 sta.obj v0 453 - values: 454 - | 455 # 456 movi v0, 10 457 newarr v0, v0, i32[] 458 - values: 459 - mov.null v0 460 cases: 461 - values: 462 - movi v1, 0 463 id: val 464 - values: 465 - movi.64 v1, 0 466 - values: 467 - fmovi v1, 0 468 bugid: ['7315'] 469 - values: 470 - fmovi.64 v1, 0 471 - values: 472 - | 473 # 474 lda.type A 475 sta.obj v1 476 - values: 477 - | 478 # 479 lda.type A[] 480 sta.obj v1 481 482 - values: 483 - | 484 # 485 lda.type panda.String 486 sta.obj v1 487 - values: 488 - | 489 # 490 lda.type panda.Object 491 sta.obj v1 492 - values: 493 - | 494 # 495 movi v1, 10 496 newarr v1, v1, f64[] 497 - values: 498 - mov.null v1 499 500 501 - file-name: uninitialized_regs 502 isa: 503 instructions: 504 - sig: ashr v1:in:i32, v2:in:i32 505 acc: out:i32 506 format: [op_v1_4_v2_4] 507 description: Check 'ashr' with uninitialized registers. 508 tags: ['verifier'] 509 runner-options: ['verifier-failure', 'verifier-config'] 510 code-template: | 511 # 512 %s 513 *s 514 ashr %s, *s 515 check-type: exit-positive 516 template-cases: 517 - values: 518 - '' 519 - v0 520 - values: 521 - movi v0, 0 522 - v0 523 exclude: [init] 524 - values: 525 - '' 526 - v7 527 - values: 528 - '' 529 - v15 530 - values: 531 - 'movi v15, 0' 532 - v15 533 exclude: [init] 534 cases: 535 - values: 536 - '' 537 - v1 538 - values: 539 - movi v1, 0 540 - v1 541 id: init 542 - values: 543 - '' 544 - v8 545 - values: 546 - '' 547 - v14 548