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