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