1# Copyright (c) 2021 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-debug-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 bugid: ["964", "966", "2075"] 388 tags: ["verifier"] 389 isa: 390 instructions: 391 - sig: xor v1:in:i32, v2:in:i32 392 acc: out:i32 393 prefix: bit 394 format: [pref_op_v1_4_v2_4] 395 verification: 396 - v1_type 397 - v2_type 398 runner-options: ['verifier-failure', 'verifier-debug-config'] 399 code-template: | 400 # 401 %s 402 %s 403 xor v0, v1 404 ldai 0 405 check-type: no-check 406 description: Check xor with incorrect register types. 407 cases: 408 - values: 409 - mov.null v0 410 - movi v1, 0 411 - values: 412 - movi v0, 0 413 - mov.null v1 414 - values: 415 - mov.null v0 416 - mov.null v1 417