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: "div2" 17 isa: 18 title: Two address integer division and modulo on accumulator 19 description: > 20 Perform integer division or modulo on accumulator and register and store result into accumulator 21 exceptions: 22 - x_arith 23 commands: 24 - file-name: "op_vs_8_zero" 25 isa: 26 instructions: 27 - sig: div2 v:in:i32 28 acc: inout:i32 29 format: [op_v_8] 30 code-template: | 31 # 32 ldai 0 33 movi v0, %s 34 div2 v0 35 movi v0, 0 36 jne v0, set_failure 37 ldai 0 38 jmp fall_through 39 set_failure: 40 ldai 1 41 fall_through: 42 description: Check div2 with zero and various values. 43 cases: 44 - values: 45 - "0" 46 runner-options: ['run-failure'] 47 description: Division by zero causes to exception. 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: div2 v:in:i32 69 acc: inout:i32 70 format: [op_v_8] 71 code-template: | 72 # 73 ldai 1 74 movi v0, %s 75 div2 v0 76 movi v0, %s 77 jne v0, set_failure 78 ldai 0 79 jmp fall_through 80 set_failure: 81 ldai 1 82 fall_through: 83 description: Check div2 with +1 and various values. 84 cases: 85 - values: 86 - "0" 87 - "0x0" 88 runner-options: ['run-failure'] 89 description: Division by zero causes to exception. 90 - values: 91 - "1" 92 - "0x1" 93 - values: 94 - "-1" 95 - "0xFFFFFFFF" 96 - values: 97 - "0x7FFFFFFF" 98 - "0x0" 99 - values: 100 - "0x80000000" 101 - "0x0" 102 - values: 103 - "-0x7FFFFFFF" 104 - "0x0" 105 - values: 106 - "-0x80000000" 107 - "0x0" 108 - values: 109 - "0xFFFFFFFF" 110 - "0xFFFFFFFF" 111 - values: 112 - "-0xFFFFFFFF" 113 - "0x1" 114 115 - file-name: "op_vs_8_none" 116 isa: 117 instructions: 118 - sig: div2 v:in:i32 119 acc: inout:i32 120 format: [op_v_8] 121 code-template: | 122 # 123 ldai -1 124 movi v0, %s 125 div2 v0 126 movi v0, %s 127 jne v0, set_failure 128 ldai 0 129 jmp fall_through 130 set_failure: 131 ldai 1 132 fall_through: 133 description: Check div2 with -1 and various values. 134 cases: 135 - values: 136 - "0" 137 - "0x0" 138 runner-options: ['run-failure'] 139 description: Division by zero causes to exception. 140 - values: 141 - "1" 142 - "0xFFFFFFFF" 143 - values: 144 - "-1" 145 - "0x1" 146 - values: 147 - "0x7FFFFFFF" 148 - "0x0" 149 - values: 150 - "0x80000000" 151 - "0x0" 152 - values: 153 - "-0x7FFFFFFF" 154 - "0x0" 155 - values: 156 - "-0x80000000" 157 - "0x0" 158 - values: 159 - "0xFFFFFFFF" 160 - "0x1" 161 - values: 162 - "-0xFFFFFFFF" 163 - "0xFFFFFFFF" 164 165 - file-name: "op_vs_8_pmax" 166 isa: 167 instructions: 168 - sig: div2 v:in:i32 169 acc: inout:i32 170 format: [op_v_8] 171 code-template: | 172 # 173 ldai 0x7FFFFFFF 174 movi v0, %s 175 div2 v0 176 movi v0, %s 177 jne v0, set_failure 178 ldai 0 179 jmp fall_through 180 set_failure: 181 ldai 1 182 fall_through: 183 description: Check div2 with +max and various values. 184 cases: 185 - values: 186 - "0" 187 - "0x0" 188 runner-options: ['run-failure'] 189 description: Division by zero causes to exception. 190 - values: 191 - "1" 192 - "0x7FFFFFFF" 193 - values: 194 - "-1" 195 - "0x80000001" 196 - values: 197 - "0x7FFFFFFF" 198 - "0x1" 199 - values: 200 - "0x80000000" 201 - "0x0" 202 - values: 203 - "-0x7FFFFFFF" 204 - "0xFFFFFFFF" 205 - values: 206 - "-0x80000000" 207 - "0x0" 208 - values: 209 - "0xFFFFFFFF" 210 - "0x80000001" 211 - values: 212 - "-0xFFFFFFFF" 213 - "0x7FFFFFFF" 214 215 - file-name: "op_vs_8_nmax" 216 isa: 217 instructions: 218 - sig: div2 v:in:i32 219 acc: inout:i32 220 format: [op_v_8] 221 code-template: | 222 # 223 ldai -0x80000000 224 movi v0, %s 225 div2 v0 226 movi v0, %s 227 jne v0, set_failure 228 ldai 0 229 jmp fall_through 230 set_failure: 231 ldai 1 232 fall_through: 233 description: Check div2 with -max and various values. 234 cases: 235 - values: 236 - "0" 237 - "0x0" 238 runner-options: ['run-failure'] 239 description: Division by zero causes to exception. 240 - values: 241 - "1" 242 - "0x80000000" 243 - values: 244 - "-1" 245 - "0x80000000" 246 - values: 247 - "0x7FFFFFFF" 248 - "0xFFFFFFFF" 249 - values: 250 - "0x80000000" 251 - "0x1" 252 - values: 253 - "-0x7FFFFFFF" 254 - "0x1" 255 - values: 256 - "-0x80000000" 257 - "0x1" 258 - values: 259 - "0xFFFFFFFF" 260 - "0x80000000" 261 - values: 262 - "-0xFFFFFFFF" 263 - "0x80000000" 264 265 - file-name: "vals" 266 isa: 267 instructions: 268 - sig: div2 v:in:i32 269 acc: inout:i32 270 format: [op_v_8] 271 code-template: | 272 # 273 ldai %s 274 movi v0, %s 275 div2 v0 276 movi v0, %s 277 jne v0, set_failure 278 ldai 0 279 jmp fall_through 280 set_failure: 281 ldai 1 282 fall_through: 283 description: Check div2 with various values. 284 tags: ['tsan'] 285 cases: 286 - values: 287 - "0x5A2A7A20" 288 - "0x92C42" 289 - "0x9D4" 290 - values: 291 - "0x723F999F" 292 - "0x6C589" 293 - "0x10DF" 294 - values: 295 - "0x5B39A21C" 296 - "0xDFD2A" 297 - "0x685" 298 - values: 299 - "0xEC29B76A" 300 - "0x6126B" 301 - "0xFFFFFCBC" 302 - values: 303 - "0x9617582D" 304 - "0x2BD45" 305 - "0xFFFFD957" 306 - values: 307 - "0x9B35145B" 308 - "0x9014F" 309 - "0xFFFFF4CF" 310 - values: 311 - "0xA9D5C5AB" 312 - "0xA2323" 313 - "0xFFFFF781" 314 - values: 315 - "0xD90A7511" 316 - "0x64F85" 317 - "0xFFFFF9D4" 318 - values: 319 - "0x97C40EB3" 320 - "0x7670F" 321 - "0xFFFFF1EC" 322 - values: 323 - "0x3D0C14FE" 324 - "0x89837" 325 - "0x71A" 326 - values: ["0x80000000", "-1", "0x80000000"] 327 - values: ["-2147483648", "-1", "-2147483648"] 328 329 330 - file-name: "op_v_8_exception" 331 isa: 332 instructions: 333 - sig: div2 v:in:i32 334 acc: inout:i32 335 format: [op_v_8] 336 header-template: [ArithmeticException, main] 337 code-template: | 338 # 339 ldai %s 340 movi v0, 0 341 begin: 342 div2 v0 343 end: 344 ldai 1 # Should not reach this line 345 return 346 347 catch_AE: 348 ldai 0 # Expected panda.ArithmeticException 349 return 350 351 catch_all: 352 ldai 1 # Unexpected exception, test failed 353 return 354 355 .catch panda.ArithmeticException, begin, end, catch_AE 356 .catchall begin, end, catch_all 357 check-type: none 358 description: Check `div2` throws ArithmeticException when divides by zero. 359 cases: 360 - values: ["0"] 361 - values: ["1"] 362 - values: ["0x7FFF"] 363 - values: ["0xFFFF"] 364 - values: ["0x7FFFFFFF"] 365 - values: ["0x80000000"] 366 - values: ["0xFFFFFFFF"] 367 - values: ["-1"] 368 - values: ["-0x7FFF"] 369 - values: ["-0xFFFF"] 370 - values: ["-0x7FFFFFFF"] 371 - values: ["-0x80000000"] 372 - values: ["-0xFFFFFFFF"] 373 374 - file-name: "vals_mod32_1" 375 bugid: ['1324', '2072'] 376 tags: ['verifier'] 377 runner-options: ['verifier-failure', 'verifier-debug-config'] 378 isa: 379 instructions: 380 - sig: div2 v:in:i32 381 acc: inout:i32 382 format: [op_v_8] 383 code-template: | 384 # 385 ldai %s 386 movi v0, %s 387 div2 v0 388 movi.64 v0, %s 389 cmp.64 v0 390 description: Check div2 with incorrect type of accumulator and register. 391 cases: 392 - values: 393 - "0xFFFFFFFF" 394 - "1" 395 - "0xFFFFFFFFFFFFFFFF" 396 - values: 397 - "0x7FFFFFFF" 398 - "-1" 399 - "0xFFFFFFFF80000001" 400 - values: 401 - "0x80000000" 402 - "-1" 403 - "0xFFFFFFFF80000000" 404 405 - file-name: "vals_mod32_2" 406 bugid: ['1324'] 407 tags: ['verifier'] 408 runner-options: ['verifier-failure', 'verifier-debug-config'] 409 isa: 410 instructions: 411 - sig: div2 v:in:i32 412 acc: inout:i32 413 format: [op_v_8] 414 code-template: | 415 # 416 ldai.64 %s 417 movi.64 v0, %s 418 div2 v0 419 movi.64 v0, %s 420 cmp.64 v0 421 description: Check div2 with incorrect type of accumulator and register. 422 cases: 423 - values: 424 - "0x1FFFFFFFF" 425 - "0xFFFFFFFF" 426 - "1" 427 - values: 428 - "0x777777777FFFFFFF" 429 - "0x11111111FFFFFFFF" 430 - "0xFFFFFFFF80000001" 431 - values: 432 - "0x180000000" 433 - "0x100000001" 434 - "0xFFFFFFFF80000000" 435 436 - file-name: "regs" 437 isa: 438 instructions: 439 - sig: div2 v:in:i32 440 acc: inout:i32 441 format: [op_v_8] 442 runner-options: ['compile-only'] 443 code-template: | 444 # 445 div2 %s 446 check-type: none 447 description: Check div2 with various register numbers. 448 cases: 449 - values: 450 - "v255" 451 - values: 452 - "v256" 453 runner-options: ['compile-failure'] 454 455 - file-name: "type" 456 isa: 457 instructions: 458 - sig: div2 v:in:i32 459 acc: inout:i32 460 format: [op_v_8] 461 verification: 462 - acc_type 463 - v1_type 464 runner-options: ['verifier-failure', 'verifier-debug-config'] 465 bugid: ["964"] 466 tags: ["verifier"] 467 code-template: | 468 # 469 %s 470 %s 471 div2 v0 472 ldai 0 473 check-type: no-check 474 description: Check div2 with incorrect type of accumulator and register. 475 cases: 476 - values: 477 - "lda.null" 478 - "movi v0, 0" 479 - values: 480 - "ldai 0 " 481 - "mov.null v0" 482 - values: 483 - "lda.null" 484 - "mov.null v0" 485