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