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: "shl" 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: shl 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 shl 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 shl 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: shl 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 shl 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 shl with +1 and various values. 85 cases: 86 - values: 87 - "0" 88 - "1" 89 - values: 90 - "1" 91 - "2" 92 - values: 93 - "-1" 94 - "0x80000000" 95 bugid: ['1387'] 96 tags: ["clang_release_sanitizer_jit"] 97 - values: 98 - "0x7FFFFFFF" 99 - "0x80000000" 100 bugid: ['1387'] 101 tags: ["clang_release_sanitizer_jit"] 102 - values: 103 - "0x80000000" 104 - "1" 105 bugid: ['1387'] 106 tags: ["clang_release_sanitizer_jit"] 107 - values: 108 - "-0x7FFFFFFF" 109 - "2" 110 bugid: ['1387'] 111 tags: ["clang_release_sanitizer_jit"] 112 - values: 113 - "-0x80000000" 114 - "1" 115 bugid: ['1387'] 116 tags: ["clang_release_sanitizer_jit"] 117 - values: 118 - "0xFFFFFFFF" 119 - "0x80000000" 120 bugid: ['1387'] 121 tags: ["clang_release_sanitizer_jit"] 122 - values: 123 - "-0xFFFFFFFF" 124 - "2" 125 - file-name: "op_vs1_4_vs2_4_none" 126 isa: 127 instructions: 128 - sig: shl v1:in:i32, v2:in:i32 129 acc: out:i32 130 prefix: bit 131 format: [pref_op_v1_4_v2_4] 132 code-template: | 133 # 134 movi v0, -1 135 movi v1, %s 136 shl v0, v1 137 movi v0, %s 138 jne v0, set_failure 139 ldai 0 140 jmp fall_through 141 set_failure: 142 ldai 1 143 fall_through: 144 description: Check shl with -1 and various values. 145 cases: 146 - values: 147 - "0" 148 - "0xFFFFFFFF" 149 - values: 150 - "1" 151 - "0xFFFFFFFE" 152 - values: 153 - "-1" 154 - "0x80000000" 155 bugid: ['1387'] 156 tags: ["clang_release_sanitizer_jit"] 157 - values: 158 - "0x7FFFFFFF" 159 - "0x80000000" 160 bugid: ['1387'] 161 tags: ["clang_release_sanitizer_jit"] 162 - values: 163 - "0x80000000" 164 - "0xFFFFFFFF" 165 bugid: ['1387'] 166 tags: ["clang_release_sanitizer_jit"] 167 - values: 168 - "-0x7FFFFFFF" 169 - "0xFFFFFFFE" 170 bugid: ['1387'] 171 tags: ["clang_release_sanitizer_jit"] 172 - values: 173 - "-0x80000000" 174 - "0xFFFFFFFF" 175 bugid: ['1387'] 176 tags: ["clang_release_sanitizer_jit"] 177 - values: 178 - "0xFFFFFFFF" 179 - "0x80000000" 180 bugid: ['1387'] 181 tags: ["clang_release_sanitizer_jit"] 182 - values: 183 - "-0xFFFFFFFF" 184 - "0xFFFFFFFE" 185 186 - file-name: "op_vs1_4_vs2_4_pmax" 187 isa: 188 instructions: 189 - sig: shl v1:in:i32, v2:in:i32 190 acc: out:i32 191 prefix: bit 192 format: [pref_op_v1_4_v2_4] 193 code-template: | 194 # 195 movi v0, 0x7FFFFFFF 196 movi v1, %s 197 shl v0, v1 198 movi v0, %s 199 jne v0, set_failure 200 ldai 0 201 jmp fall_through 202 set_failure: 203 ldai 1 204 fall_through: 205 description: Check shl with +max and various values. 206 cases: 207 - values: 208 - "0" 209 - "0x7FFFFFFF" 210 - values: 211 - "1" 212 - "0xFFFFFFFE" 213 - values: 214 - "-1" 215 - "0x80000000" 216 bugid: ['1387'] 217 tags: ["clang_release_sanitizer_jit"] 218 - values: 219 - "0x7FFFFFFF" 220 - "0x80000000" 221 bugid: ['1387'] 222 tags: ["clang_release_sanitizer_jit"] 223 - values: 224 - "0x80000000" 225 - "0x7FFFFFFF" 226 bugid: ['1387'] 227 tags: ["clang_release_sanitizer_jit"] 228 - values: 229 - "-0x7FFFFFFF" 230 - "0xFFFFFFFE" 231 bugid: ['1387'] 232 tags: ["clang_release_sanitizer_jit"] 233 - values: 234 - "-0x80000000" 235 - "0x7FFFFFFF" 236 bugid: ['1387'] 237 tags: ["clang_release_sanitizer_jit"] 238 - values: 239 - "0xFFFFFFFF" 240 - "0x80000000" 241 bugid: ['1387'] 242 tags: ["clang_release_sanitizer_jit"] 243 - values: 244 - "-0xFFFFFFFF" 245 - "0xFFFFFFFE" 246 247 - file-name: "op_vs1_4_vs2_4_nmax" 248 isa: 249 instructions: 250 - sig: shl v1:in:i32, v2:in:i32 251 acc: out:i32 252 prefix: bit 253 format: [pref_op_v1_4_v2_4] 254 code-template: | 255 # 256 movi v0, -0x80000000 257 movi v1, %s 258 shl v0, v1 259 movi v0, %s 260 jne v0, set_failure 261 ldai 0 262 jmp fall_through 263 set_failure: 264 ldai 1 265 fall_through: 266 description: Check shl with -max and various values. 267 cases: 268 - values: 269 - "0" 270 - "0x80000000" 271 - values: 272 - "1" 273 - "0" 274 - values: 275 - "-1" 276 - "0" 277 bugid: ['1387'] 278 tags: ["clang_release_sanitizer_jit"] 279 - values: 280 - "0x7FFFFFFF" 281 - "0x0" 282 bugid: ['1387'] 283 tags: ["clang_release_sanitizer_jit"] 284 - values: 285 - "0x80000000" 286 - "0x80000000" 287 bugid: ['1387'] 288 tags: ["clang_release_sanitizer_jit"] 289 - values: 290 - "-0x7FFFFFFF" 291 - "0" 292 bugid: ['1387'] 293 tags: ["clang_release_sanitizer_jit"] 294 - values: 295 - "-0x80000000" 296 - "0x80000000" 297 bugid: ['1387'] 298 tags: ["clang_release_sanitizer_jit"] 299 - values: 300 - "0xFFFFFFFF" 301 - "0" 302 bugid: ['1387'] 303 tags: ["clang_release_sanitizer_jit"] 304 - values: 305 - "-0xFFFFFFFF" 306 - "0" 307 308 - file-name: "vals" 309 bugid: ['1387'] 310 tags: ["clang_release_sanitizer_jit", "tsan"] 311 isa: 312 instructions: 313 - sig: shl v1:in:i32, v2:in:i32 314 acc: out:i32 315 prefix: bit 316 format: [pref_op_v1_4_v2_4] 317 code-template: | 318 # 319 movi v0, %s 320 movi v1, %s 321 shl v0, v1 322 movi v0, %s 323 jne v0, set_failure 324 ldai 0 325 jmp fall_through 326 set_failure: 327 ldai 1 328 fall_through: 329 description: Check shl with various values. 330 cases: 331 - values: 332 - "0x61696FFF" 333 - "0x56B814E8" 334 - "0x696FFF00" 335 - values: 336 - "0x76C5AE08" 337 - "0x8DFD0A2F" 338 - "0xD7040000" 339 - values: 340 - "0x15FFEF1D" 341 - "0x2C85774D" 342 - "0xFDE3A000" 343 - values: 344 - "0x3130A634" 345 - "0xD3CDE405" 346 - "0x2614C680" 347 - values: 348 - "0x8E8A9883" 349 - "0xDE3A4635" 350 - "0x10600000" 351 - values: 352 - "0x3BF5A79C" 353 - "0xE799C159" 354 - "0x38000000" 355 - values: 356 - "0xBF8EF337" 357 - "0x66068B26" 358 - "0xE3BCCDC0" 359 - values: 360 - "0xDC2D1B09" 361 - "0x3D252477" 362 - "0x84800000" 363 - values: 364 - "0x960BD85E" 365 - "0xB357B7D" 366 - "0xC0000000" 367 - values: 368 - "0x40BB756D" 369 - "0xDAAA49C4" 370 - "0xBB756D0" 371 372 - file-name: "vals_mod32_1" 373 bugid: ['1324', '2075'] 374 tags: ['verifier'] 375 runner-options: ['verifier-failure', 'verifier-debug-config'] 376 isa: 377 instructions: 378 - sig: shl v1:in:i32, v2:in:i32 379 acc: out:i32 380 prefix: bit 381 format: [pref_op_v1_4_v2_4] 382 code-template: | 383 # 384 movi.64 v0, %s 385 movi.64 v1, %s 386 shl v0, v1 387 movi.64 v0, %s 388 cmp.64 v0 389 description: Check shl with incorrect register types. 390 cases: 391 - values: 392 - "0x17FFFFFFF" 393 - "0x1F" 394 - "0xFFFFFFFF80000000" 395 - values: 396 - "0x77777777FFFFFFFF" 397 - "0x1111111180000000" 398 - "0xFFFFFFFFFFFFFFFF" 399 - values: 400 - "0x180000000" 401 - "0x180000000" 402 - "0xFFFFFFFF80000000" 403 404 - file-name: "regs" 405 isa: 406 instructions: 407 - sig: shl v1:in:i32, v2:in:i32 408 acc: out:i32 409 prefix: bit 410 format: [pref_op_v1_4_v2_4] 411 runner-options: ['compile-only'] 412 code-template: | 413 # 414 shl %s, %s 415 check-type: none 416 description: Check shl with various register numbers. 417 cases: 418 - values: 419 - v0 420 - v15 421 - values: 422 - v0 423 - v16 424 runner-options: 425 - compile-failure 426 - values: 427 - v15 428 - v0 429 - values: 430 - v16 431 - v0 432 runner-options: 433 - compile-failure 434 435 - file-name: "type" 436 bugid: ["964", "966", "2075"] 437 tags: ["verifier"] 438 isa: 439 instructions: 440 - sig: shl v1:in:i32, v2:in:i32 441 acc: out:i32 442 prefix: bit 443 format: [pref_op_v1_4_v2_4] 444 verification: 445 - v1_type 446 - v2_type 447 runner-options: ['verifier-failure', 'verifier-debug-config'] 448 code-template: | 449 # 450 %s 451 %s 452 shl v0, v1 453 ldai 0 454 check-type: no-check 455 description: Check shl with incorrect register types. 456 cases: 457 - values: 458 - mov.null v0 459 - movi v1, 0 460 - values: 461 - movi v0, 0 462 - mov.null v1 463 - values: 464 - mov.null v0 465 - mov.null v1 466