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: "divu2" 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: divu2 v:in:u32 28 acc: inout:u32 29 prefix: unsigned 30 format: [pref_op_v_8] 31 code-template: | 32 # 33 ldai 0 34 movi v0, %s 35 divu2 v0 36 movi v0, 0 37 ucmp v0 38 description: Check divu2 with zero and various values. 39 cases: 40 - values: 41 - "0" 42 runner-options: ['run-failure'] 43 description: Division by zero causes to exception. 44 - values: 45 - "1" 46 - values: 47 - "-1" 48 - values: 49 - "0x7FFFFFFF" 50 - values: 51 - "0x80000000" 52 - values: 53 - "-0x7FFFFFFF" 54 - values: 55 - "-0x80000000" 56 - values: 57 - "0xFFFFFFFF" 58 - values: 59 - "-0xFFFFFFFF" 60 61 - file-name: "op_vs_8_pone" 62 isa: 63 instructions: 64 - sig: divu2 v:in:u32 65 acc: inout:u32 66 prefix: unsigned 67 format: [pref_op_v_8] 68 code-template: | 69 # 70 ldai 1 71 movi v0, %s 72 divu2 v0 73 movi v0, %s 74 ucmp v0 75 description: Check divu2 with +1 and various values. 76 cases: 77 - values: 78 - "0" 79 - "0x0" 80 runner-options: ['run-failure'] 81 description: Division by zero causes to exception. 82 - values: 83 - "1" 84 - "0x1" 85 - values: 86 - "-1" 87 - "0" 88 - values: 89 - "0x7FFFFFFF" 90 - "0x0" 91 - values: 92 - "0x80000000" 93 - "0x0" 94 - values: 95 - "-0x7FFFFFFF" 96 - "0x0" 97 - values: 98 - "-0x80000000" 99 - "0x0" 100 - values: 101 - "0xFFFFFFFF" 102 - "0" 103 - values: 104 - "-0xFFFFFFFF" 105 - "0x1" 106 107 - file-name: "op_vs_8_none" 108 isa: 109 instructions: 110 - sig: divu2 v:in:u32 111 acc: inout:u32 112 prefix: unsigned 113 format: [pref_op_v_8] 114 code-template: | 115 # 116 ldai -1 117 movi v0, %s 118 divu2 v0 119 movi v0, %s 120 ucmp v0 121 description: Check divu2 with -1 and various values. 122 cases: 123 - values: 124 - "0" 125 - "0x0" 126 runner-options: ['run-failure'] 127 description: Division by zero causes to exception. 128 - values: 129 - "1" 130 - "0xFFFFFFFF" 131 - values: 132 - "-1" 133 - "0x1" 134 - values: 135 - "0x7FFFFFFF" 136 - "2" 137 - values: 138 - "0x80000000" 139 - "1" 140 - values: 141 - "-0x7FFFFFFF" 142 - "1" 143 - values: 144 - "-0x80000000" 145 - "1" 146 - values: 147 - "0xFFFFFFFF" 148 - "0x1" 149 - values: 150 - "-0xFFFFFFFF" 151 - "0xFFFFFFFF" 152 153 - file-name: "op_vs_8_pmax" 154 isa: 155 instructions: 156 - sig: divu2 v:in:u32 157 acc: inout:u32 158 prefix: unsigned 159 format: [pref_op_v_8] 160 code-template: | 161 # 162 ldai 0x7FFFFFFF 163 movi v0, %s 164 divu2 v0 165 movi v0, %s 166 ucmp v0 167 description: Check divu2 with +max and various values. 168 cases: 169 - values: 170 - "0" 171 - "0x0" 172 runner-options: ['run-failure'] 173 description: Division by zero causes to exception. 174 - values: 175 - "1" 176 - "0x7FFFFFFF" 177 - values: 178 - "-1" 179 - "0" 180 - values: 181 - "0x7FFFFFFF" 182 - "0x1" 183 - values: 184 - "0x80000000" 185 - "0x0" 186 - values: 187 - "-0x7FFFFFFF" 188 - "0" 189 - values: 190 - "-0x80000000" 191 - "0x0" 192 - values: 193 - "0xFFFFFFFF" 194 - "0" 195 - values: 196 - "-0xFFFFFFFF" 197 - "0x7FFFFFFF" 198 199 - file-name: "op_vs_8_nmax" 200 isa: 201 instructions: 202 - sig: divu2 v:in:u32 203 acc: inout:u32 204 prefix: unsigned 205 format: [pref_op_v_8] 206 code-template: | 207 # 208 ldai -0x80000000 209 movi v0, %s 210 divu2 v0 211 movi v0, %s 212 ucmp v0 213 description: Check divu2 with -max and various values. 214 cases: 215 - values: 216 - "0" 217 - "0x0" 218 runner-options: ['run-failure'] 219 description: Division by zero causes to exception. 220 - values: 221 - "1" 222 - "0x80000000" 223 - values: 224 - "-1" 225 - "0" 226 - values: 227 - "0x7FFFFFFF" 228 - "1" 229 - values: 230 - "0x80000000" 231 - "0x1" 232 - values: 233 - "-0x7FFFFFFF" 234 - "0" 235 - values: 236 - "-0x80000000" 237 - "0x1" 238 - values: 239 - "0xFFFFFFFF" 240 - "0" 241 - values: 242 - "-0xFFFFFFFF" 243 - "0x80000000" 244 245 - file-name: "vals" 246 isa: 247 instructions: 248 - sig: divu2 v:in:u32 249 acc: inout:u32 250 prefix: unsigned 251 format: [pref_op_v_8] 252 code-template: | 253 # 254 ldai %s 255 movi v0, %s 256 divu2 v0 257 movi v0, %s 258 ucmp v0 259 description: Check divu2 with various values. 260 tags: ['tsan'] 261 cases: 262 - values: 263 - "0x76F44C0A" 264 - "0xF4AF6" 265 - "0x7C7" 266 - values: 267 - "0xA04652F6" 268 - "0x5FA70" 269 - "0x1ACF" 270 - values: 271 - "0x193F1629" 272 - "0x6E0BE" 273 - "0x3AB" 274 - values: 275 - "0xD4BB67C8" 276 - "0xA0605" 277 - "0x1539" 278 - values: 279 - "0x5F94031E" 280 - "0xF87F2" 281 - "0x627" 282 - values: 283 - "0xA88CC3FB" 284 - "0x1C945" 285 - "0x5E5C" 286 - values: 287 - "0x23D8F853" 288 - "0x4CC72" 289 - "0x778" 290 - values: 291 - "0xA8EB925D" 292 - "0x45C5" 293 - "0x26BCE" 294 - values: 295 - "0xA164F5" 296 - "0x4445" 297 - "0x25D" 298 - values: 299 - "0xF119BBC6" 300 - "0xF1C08" 301 - "0xFF4" 302 303 - file-name: "op_v_8_exception" 304 isa: 305 instructions: 306 - sig: divu2 v:in:u32 307 acc: inout:u32 308 prefix: unsigned 309 format: [pref_op_v_8] 310 header-template: [ArithmeticException, main] 311 code-template: | 312 # 313 ldai %s 314 movi v0, 0 315 begin: 316 divu2 v0 317 end: 318 ldai 1 # Should not reach this line 319 return 320 321 catch_AE: 322 ldai 0 # Expected panda.ArithmeticException 323 return 324 325 catch_all: 326 ldai 1 # Unexpected exception, test failed 327 return 328 329 .catch panda.ArithmeticException, begin, end, catch_AE 330 .catchall begin, end, catch_all 331 check-type: none 332 description: Check `divu2` throws ArithmeticException when divides by zero. 333 cases: 334 - values: ["0"] 335 - values: ["1"] 336 - values: ["0x7FFF"] 337 - values: ["0xFFFF"] 338 - values: ["0x7FFFFFFF"] 339 - values: ["0x80000000"] 340 - values: ["0xFFFFFFFF"] 341 - values: ["-1"] 342 - values: ["-0x7FFF"] 343 - values: ["-0xFFFF"] 344 - values: ["-0x7FFFFFFF"] 345 - values: ["-0x80000000"] 346 - values: ["-0xFFFFFFFF"] 347 348 - file-name: "vals_mod32_1" 349 bugid: ['1324'] 350 tags: ['verifier'] 351 runner-options: ['verifier-failure', 'verifier-debug-config'] 352 isa: 353 instructions: 354 - sig: divu2 v:in:u32 355 acc: inout:u32 356 prefix: unsigned 357 format: [pref_op_v_8] 358 code-template: | 359 # 360 ldai %s 361 movi v0, %s 362 divu2 v0 363 movi.64 v0, %s 364 ucmp.64 v0 365 description: Check divu2 with incorrect type of accumulator and register. 366 cases: 367 - values: 368 - "0xFFFFFFFF" 369 - "1" 370 - "0xFFFFFFFF" 371 - values: 372 - "0x7FFFFFFF" 373 - "-1" 374 - "0" 375 - values: 376 - "0x80000000" 377 - "-1" 378 - "0x0000000000000000" 379 380 - file-name: "vals_mod32_2" 381 bugid: ['1324'] 382 tags: ['verifier'] 383 runner-options: ['verifier-failure', 'verifier-debug-config'] 384 isa: 385 instructions: 386 - sig: divu2 v:in:u32 387 acc: inout:u32 388 prefix: unsigned 389 format: [pref_op_v_8] 390 code-template: | 391 # 392 ldai.64 %s 393 movi.64 v0, %s 394 divu2 v0 395 movi.64 v0, %s 396 ucmp.64 v0 397 description: Check divu2 with incorrect type of accumulator and register. 398 cases: 399 - values: 400 - "0x1FFFFFFFF" 401 - "0xFFFFFFFF" 402 - "1" 403 - values: 404 - "0x777777777FFFFFFF" 405 - "0x11111111FFFFFFFF" 406 - "0" 407 - values: 408 - "0x180000000" 409 - "0x100000001" 410 - "0x0000000080000000" 411 412 - file-name: "regs" 413 isa: 414 instructions: 415 - sig: divu2 v:in:u32 416 acc: inout:u32 417 prefix: unsigned 418 format: [pref_op_v_8] 419 runner-options: ['compile-only'] 420 code-template: | 421 # 422 divu2 %s 423 check-type: none 424 description: Check divu2 with various register numbers. 425 cases: 426 - values: 427 - "v255" 428 - values: 429 - "v256" 430 runner-options: ['compile-failure'] 431 432 - file-name: "type" 433 isa: 434 instructions: 435 - sig: divu2 v:in:u32 436 acc: inout:u32 437 prefix: unsigned 438 format: [pref_op_v_8] 439 verification: 440 - acc_type 441 - v1_type 442 tags: ['verifier'] 443 runner-options: ['verifier-failure', 'verifier-debug-config'] 444 code-template: | 445 # 446 %s 447 %s 448 divu2 v0 449 ldai 0 450 check-type: no-check 451 description: Check divu2 with incorrect type of accumulator and register. 452 cases: 453 - values: 454 - "lda.null" 455 - "movi v0, 0" 456 - values: 457 - "ldai 0 " 458 - "mov.null v0" 459 - values: 460 - "lda.null" 461 - "mov.null v0" 462