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: "xor2" 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: xor2 v:in:i32 28 acc: inout:i32 29 prefix: bit 30 format: [pref_op_v_8] 31 code-template: | 32 # 33 ldai 0 34 movi v0, %s 35 mov v1, v0 36 xor2 v0 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 xor2 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_vs_8_pone" 66 isa: 67 instructions: 68 - sig: xor2 v:in:i32 69 acc: inout:i32 70 prefix: bit 71 format: [pref_op_v_8] 72 code-template: | 73 # 74 ldai 1 75 movi v0, %s 76 xor2 v0 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 xor2 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_vs_8_none" 114 isa: 115 instructions: 116 - sig: xor2 v:in:i32 117 acc: inout:i32 118 prefix: bit 119 format: [pref_op_v_8] 120 code-template: | 121 # 122 ldai -1 123 movi v0, %s 124 xor2 v0 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 xor2 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_vs_8_pmax" 163 isa: 164 instructions: 165 - sig: xor2 v:in:i32 166 acc: inout:i32 167 prefix: bit 168 format: [pref_op_v_8] 169 code-template: | 170 # 171 ldai 0x7FFFFFFF 172 movi v0, %s 173 xor2 v0 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 xor2 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_vs_8_nmax" 212 isa: 213 instructions: 214 - sig: xor2 v:in:i32 215 acc: inout:i32 216 prefix: bit 217 format: [pref_op_v_8] 218 code-template: | 219 # 220 ldai -0x80000000 221 movi v0, %s 222 xor2 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 xor2 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: xor2 v:in:i32 264 acc: inout:i32 265 prefix: bit 266 format: [pref_op_v_8] 267 code-template: | 268 # 269 ldai %s 270 movi v0, %s 271 xor2 v0 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 xor2 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'] 325 tags: ['verifier'] 326 runner-options: ['verifier-failure', 'verifier-config'] 327 isa: 328 instructions: 329 - sig: xor2 v:in:i32 330 acc: inout:i32 331 prefix: bit 332 format: [pref_op_v_8] 333 code-template: | 334 # 335 ldai.64 %s 336 movi.64 v0, %s 337 xor2 v0 338 movi.64 v0, %s 339 cmp.64 v0 340 description: Check xor2 with incorrect accumulator and 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: xor2 v:in:i32 359 acc: inout:i32 360 prefix: bit 361 format: [pref_op_v_8] 362 runner-options: ['compile-only'] 363 code-template: | 364 # 365 xor2 %s 366 check-type: none 367 description: Check xor2 with various register numbers. 368 cases: 369 - values: 370 - "v255" 371 - values: 372 - "v256" 373 runner-options: ['compile-failure'] 374 375 - file-name: "type" 376 bugid: ["964", "966"] 377 tags: ["verifier"] 378 isa: 379 verification: 380 - acc_type 381 - v1_type 382 runner-options: ['verifier-failure', 'verifier-config'] 383 header-template: [] 384 code-template: | 385 .record T {} 386 .function i32 main() { 387 %s 388 *s 389 xor2 v0 390 check-type: exit-positive 391 description: Check 'xor2' with incorrect accumulator and/or register types. 392 cases: 393 - values: 394 - ldai 0 395 id: acc_ok 396 - values: 397 - ldai.64 0 398 - values: 399 - fldai 0 400 bugid: ['7315'] 401 - values: 402 - fldai.64 0 403 - values: 404 - lda.null 405 - values: 406 - | 407 # 408 movi v1, 0 409 newarr v1, v1, i32[] 410 lda.obj v1 411 - values: 412 - lda.str "0" 413 - values: 414 - lda.type T 415 - values: 416 - | 417 # 418 newobj v1, T 419 lda.obj v1 420 template-cases: 421 - values: 422 - movi v0, 0 423 exclude: [acc_ok] 424 - values: 425 - movi.64 v0, 0 426 - values: 427 - fmovi v0, 0 428 bugid: ['7315'] 429 - values: 430 - fmovi.64 v0, 0 431 - values: 432 - mov.null v0 433 - values: 434 - | 435 # 436 movi v0, 0 437 newarr v0, v0, i32[] 438 - values: 439 - | 440 # 441 lda.str "0" 442 sta.obj v0 443 - values: 444 - | 445 # 446 lda.type T 447 sta.obj v0 448 - values: 449 - newobj v0, T 450 451 452 - file-name: uninitialized_regs 453 isa: 454 instructions: 455 - sig: xor2 v:in:i32 456 acc: inout:i32 457 prefix: bit 458 format: [pref_op_v_8] 459 description: Check 'xor2' with uninitialized registers. 460 tags: ['verifier'] 461 runner-options: ['verifier-failure', 'verifier-config'] 462 code-template: | 463 # 464 %s 465 *s 466 xor2 *s 467 check-type: exit-positive 468 template-cases: 469 - values: 470 - '' 471 - values: 472 - ldai 0 473 exclude: [init] 474 cases: 475 - values: 476 - '' 477 - v0 478 - values: 479 - movi v1, 0 480 - v1 481 id: init 482 - values: 483 - '' 484 - v8 485 - values: 486 - '' 487 - v15 488 - values: 489 - movi v15, 0 490 - v15 491 id: init 492