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.64" 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.64 v:in:i64 28 acc: inout:i64 29 format: [op_v_8] 30 code-template: | 31 # 32 ldai.64 0 33 movi.64 v0, %s 34 div2.64 v0 35 movi.64 v0, 0 36 cmp.64 v0 37 description: Check div2.64 with zero and various values. 38 cases: 39 - values: 40 - "0" 41 runner-options: ['run-failure'] 42 description: Division by zero causes to exception. 43 - values: 44 - "1" 45 - values: 46 - "-1" 47 - values: 48 - "0x7FFFFFFFFFFFFFFF" 49 - values: 50 - "0x8000000000000000" 51 - values: 52 - "-0x7FFFFFFFFFFFFFFF" 53 - values: 54 - "-0x8000000000000000" 55 - values: 56 - "0xFFFFFFFFFFFFFFFF" 57 - values: 58 - "-0xFFFFFFFFFFFFFFFF" 59 60 - file-name: "op_vs_8_pone" 61 isa: 62 instructions: 63 - sig: div2.64 v:in:i64 64 acc: inout:i64 65 format: [op_v_8] 66 code-template: | 67 # 68 ldai.64 1 69 movi.64 v0, %s 70 div2.64 v0 71 movi.64 v0, %s 72 cmp.64 v0 73 description: Check div2.64 with +1 and various values. 74 cases: 75 - values: 76 - "0" 77 - "0x0" 78 runner-options: ['run-failure'] 79 description: Division by zero causes to exception. 80 - values: 81 - "1" 82 - "0x1" 83 - values: 84 - "-1" 85 - "0xFFFFFFFFFFFFFFFF" 86 - values: 87 - "0x7FFFFFFFFFFFFFFF" 88 - "0x0" 89 - values: 90 - "0x8000000000000000" 91 - "0x0" 92 - values: 93 - "-0x7FFFFFFFFFFFFFFF" 94 - "0x0" 95 - values: 96 - "-0x8000000000000000" 97 - "0x0" 98 - values: 99 - "0xFFFFFFFFFFFFFFFF" 100 - "0xFFFFFFFFFFFFFFFF" 101 - values: 102 - "-0xFFFFFFFFFFFFFFFF" 103 - "0x1" 104 105 - file-name: "op_vs_8_none" 106 isa: 107 instructions: 108 - sig: div2.64 v:in:i64 109 acc: inout:i64 110 format: [op_v_8] 111 code-template: | 112 # 113 ldai.64 -1 114 movi.64 v0, %s 115 div2.64 v0 116 movi.64 v0, %s 117 cmp.64 v0 118 description: Check div2.64 with -1 and various values. 119 cases: 120 - values: 121 - "0" 122 - "0x0" 123 runner-options: ['run-failure'] 124 description: Division by zero causes to exception. 125 - values: 126 - "1" 127 - "0xFFFFFFFFFFFFFFFF" 128 - values: 129 - "-1" 130 - "0x1" 131 - values: 132 - "0x7FFFFFFFFFFFFFFF" 133 - "0x0" 134 - values: 135 - "0x8000000000000000" 136 - "0x0" 137 - values: 138 - "-0x7FFFFFFFFFFFFFFF" 139 - "0x0" 140 - values: 141 - "-0x8000000000000000" 142 - "0x0" 143 - values: 144 - "0xFFFFFFFFFFFFFFFF" 145 - "0x1" 146 - values: 147 - "-0xFFFFFFFFFFFFFFFF" 148 - "0xFFFFFFFFFFFFFFFF" 149 150 - file-name: "op_vs_8_pmax" 151 isa: 152 instructions: 153 - sig: div2.64 v:in:i64 154 acc: inout:i64 155 format: [op_v_8] 156 code-template: | 157 # 158 ldai.64 0x7FFFFFFFFFFFFFFF 159 movi.64 v0, %s 160 div2.64 v0 161 movi.64 v0, %s 162 cmp.64 v0 163 description: Check div2.64 with +max1 and various values. 164 cases: 165 - values: 166 - "0" 167 - "0x0" 168 runner-options: ['run-failure'] 169 description: Division by zero causes to exception. 170 - values: 171 - "1" 172 - "0x7FFFFFFFFFFFFFFF" 173 - values: 174 - "-1" 175 - "0x8000000000000001" 176 - values: 177 - "0x7FFFFFFFFFFFFFFF" 178 - "0x1" 179 - values: 180 - "0x8000000000000000" 181 - "0x0" 182 - values: 183 - "-0x7FFFFFFFFFFFFFFF" 184 - "0xFFFFFFFFFFFFFFFF" 185 - values: 186 - "-0x8000000000000000" 187 - "0x0" 188 - values: 189 - "0xFFFFFFFFFFFFFFFF" 190 - "0x8000000000000001" 191 - values: 192 - "-0xFFFFFFFFFFFFFFFF" 193 - "0x7FFFFFFFFFFFFFFF" 194 195 - file-name: "op_vs_8_nmax" 196 isa: 197 instructions: 198 - sig: div2.64 v:in:i64 199 acc: inout:i64 200 format: [op_v_8] 201 code-template: | 202 # 203 ldai.64 -0x8000000000000000 204 movi.64 v0, %s 205 div2.64 v0 206 movi.64 v0, %s 207 cmp.64 v0 208 description: Check div2.64 with -max and various values. 209 cases: 210 - values: 211 - "0" 212 - "0x0" 213 runner-options: ['run-failure'] 214 description: Division by zero causes to exception. 215 - values: 216 - "1" 217 - "0x8000000000000000" 218 - values: 219 - "-1" 220 - "0x8000000000000000" 221 - values: 222 - "0x7FFFFFFFFFFFFFFF" 223 - "0xFFFFFFFFFFFFFFFF" 224 - values: 225 - "0x8000000000000000" 226 - "0x1" 227 - values: 228 - "-0x7FFFFFFFFFFFFFFF" 229 - "0x1" 230 - values: 231 - "-0x8000000000000000" 232 - "0x1" 233 - values: 234 - "0xFFFFFFFFFFFFFFFF" 235 - "0x8000000000000000" 236 - values: 237 - "-0xFFFFFFFFFFFFFFFF" 238 - "0x8000000000000000" 239 240 - file-name: "vals" 241 isa: 242 instructions: 243 - sig: div2.64 v:in:i64 244 acc: inout:i64 245 format: [op_v_8] 246 code-template: | 247 # 248 ldai.64 %s 249 movi.64 v0, %s 250 div2.64 v0 251 movi.64 v0, %s 252 cmp.64 v0 253 description: Check div2.64 with various values. 254 tags: ['tsan'] 255 cases: 256 - values: 257 - "0x17EAACD3255811A1" 258 - "0xE8E4A070A" 259 - "0x1A4A25D" 260 - values: 261 - "0x33E7A3F9C4EB40AC" 262 - "0xE2BBF826B" 263 - "0x3A9ABE7" 264 - values: 265 - "0x2F4D5E0722AF40CC" 266 - "0x2C94DC312" 267 - "0x10F9F8C8" 268 - values: 269 - "0x96E12447F0B72B46" 270 - "0xEEA31086D" 271 - "0xFFFFFFFFF8F3B214" 272 - values: 273 - "0xD40751B27C6EFFAE" 274 - "0x21862396D" 275 - "0xFFFFFFFFEB038548" 276 - values: 277 - "0x48F08991A9F4AA07" 278 - "0x48601B6E8" 279 - "0x101FEDDA" 280 - values: 281 - "0x31EF39B9FC101C37" 282 - "0xA19115513" 283 - "0x4F1ED2F" 284 - values: 285 - "0x745FF968D0103641" 286 - "0x8297D9DAB" 287 - "0xE420CCA" 288 - values: 289 - "0xECE3CBD68839EA0F" 290 - "0x5B6B86256" 291 - "0xFFFFFFFFFCA7C8C3" 292 - values: 293 - "0x68BC11164D46497D" 294 - "0xE6EBA2BD5" 295 - "0x741C0A9" 296 - values: ["0x8000000000000000", "-1", "0x8000000000000000"] 297 - values: ["-9223372036854775808", "-1", "-9223372036854775808"] 298 299 - file-name: "op_v_8_exception" 300 isa: 301 instructions: 302 - sig: div2.64 v:in:i64 303 acc: inout:i64 304 format: [op_v_8] 305 header-template: [ArithmeticException, main] 306 code-template: | 307 # 308 ldai.64 %s 309 movi.64 v0, 0 310 begin: 311 div2.64 v0 312 end: 313 ldai 1 # Should not reach this line 314 return 315 316 catch_AE: 317 ldai 0 # Expected panda.ArithmeticException 318 return 319 320 catch_all: 321 ldai 1 # Unexpected exception, test failed 322 return 323 324 .catch panda.ArithmeticException, begin, end, catch_AE 325 .catchall begin, end, catch_all 326 check-type: none 327 description: Check `div2.64` throws ArithmeticException when divides by zero. 328 cases: 329 - values: ["0"] 330 - values: ["1"] 331 - values: ["0x7FFFFFFF"] 332 - values: ["0x80000000"] 333 - values: ["0xFFFFFFFF"] 334 - values: ["0x100000000"] 335 - values: ["0x7FFFFFFFFFFFFFFF"] 336 - values: ["0x8000000000000000"] 337 - values: ["0xFFFFFFFFFFFFFFFF"] 338 - values: ["-1"] 339 - values: ["-0x7FFFFFFF"] 340 - values: ["-0x80000000"] 341 - values: ["-0xFFFFFFFF"] 342 - values: ["-0x100000000"] 343 - values: ["-0x7FFFFFFFFFFFFFFF"] 344 - values: ["-0x8000000000000000"] 345 - values: ["-0xFFFFFFFFFFFFFFFF"] 346 347 - file-name: "regs" 348 isa: 349 instructions: 350 - sig: div2.64 v:in:i64 351 acc: inout:i64 352 format: [op_v_8] 353 runner-options: ['compile-only'] 354 code-template: | 355 # 356 div2.64 %s 357 check-type: none 358 description: Check div2.64 with various register numbers. 359 cases: 360 - values: 361 - "v255" 362 - values: 363 - "v256" 364 runner-options: ['compile-failure'] 365 366 - file-name: "type" 367 isa: 368 instructions: 369 - sig: div2.64 v:in:i64 370 acc: inout:i64 371 format: [op_v_8] 372 verification: 373 - acc_type 374 - v1_type 375 runner-options: ['verifier-failure', 'verifier-debug-config'] 376 bugid: ["964"] 377 tags: ["verifier"] 378 code-template: | 379 # 380 %s 381 %s 382 div2.64 v0 383 ldai.64 0 384 check-type: no-check 385 description: Check div2.64 with incorrect type of accumulator and register. 386 cases: 387 - values: 388 - "lda.null" 389 - "movi.64 v0, 0" 390 - values: 391 - "ldai.64 0 " 392 - "mov.null v0" 393 - values: 394 - "lda.null" 395 - "mov.null v0" 396