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: "mod2.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: mod2.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 mod2.64 v0 35 movi.64 v0, 0 36 cmp.64 v0 37 description: Check mod2.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: mod2.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 mod2.64 v0 71 movi.64 v0, %s 72 cmp.64 v0 73 description: Check mod2.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 - "0" 83 - values: 84 - "-1" 85 - "0" 86 - values: 87 - "0x7FFFFFFFFFFFFFFF" 88 - "1" 89 - values: 90 - "0x8000000000000000" 91 - "1" 92 - values: 93 - "-0x7FFFFFFFFFFFFFFF" 94 - "1" 95 - values: 96 - "-0x8000000000000000" 97 - "1" 98 - values: 99 - "0xFFFFFFFFFFFFFFFF" 100 - "0" 101 - values: 102 - "-0xFFFFFFFFFFFFFFFF" 103 - "0" 104 105 - file-name: "op_vs_8_none" 106 isa: 107 instructions: 108 - sig: mod2.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 mod2.64 v0 116 movi.64 v0, %s 117 cmp.64 v0 118 description: Check mod2.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 - "0" 128 - values: 129 - "-1" 130 - "0" 131 - values: 132 - "0x7FFFFFFFFFFFFFFF" 133 - "-1" 134 - values: 135 - "0x8000000000000000" 136 - "-1" 137 - values: 138 - "-0x7FFFFFFFFFFFFFFF" 139 - "-1" 140 - values: 141 - "-0x8000000000000000" 142 - "-1" 143 - values: 144 - "0xFFFFFFFFFFFFFFFF" 145 - "0" 146 - values: 147 - "-0xFFFFFFFFFFFFFFFF" 148 - "0" 149 150 - file-name: "op_vs_8_pmax" 151 isa: 152 instructions: 153 - sig: mod2.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 mod2.64 v0 161 movi.64 v0, %s 162 cmp.64 v0 163 description: Check mod2.64 with +max 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 - "0" 173 - values: 174 - "-1" 175 - "0" 176 - values: 177 - "0x7FFFFFFFFFFFFFFF" 178 - "0" 179 - values: 180 - "0x8000000000000000" 181 - "0x7FFFFFFFFFFFFFFF" 182 - values: 183 - "-0x7FFFFFFFFFFFFFFF" 184 - "0" 185 - values: 186 - "-0x8000000000000000" 187 - "0x7FFFFFFFFFFFFFFF" 188 - values: 189 - "0xFFFFFFFFFFFFFFFF" 190 - "0" 191 - values: 192 - "-0xFFFFFFFFFFFFFFFF" 193 - "0" 194 195 - file-name: "op_vs_8_nmax" 196 isa: 197 instructions: 198 - sig: mod2.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 mod2.64 v0 206 movi.64 v0, %s 207 cmp.64 v0 208 description: Check mod2.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 - "0" 218 - values: 219 - "-1" 220 - "0" 221 - values: 222 - "0x7FFFFFFFFFFFFFFF" 223 - "-1" 224 - values: 225 - "0x8000000000000000" 226 - "0" 227 - values: 228 - "-0x7FFFFFFFFFFFFFFF" 229 - "-1" 230 - values: 231 - "-0x8000000000000000" 232 - "0" 233 - values: 234 - "0xFFFFFFFFFFFFFFFF" 235 - "0" 236 - values: 237 - "-0xFFFFFFFFFFFFFFFF" 238 - "0" 239 240 - file-name: "vals" 241 isa: 242 instructions: 243 - sig: mod2.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 mod2.64 v0 251 movi.64 v0, %s 252 cmp.64 v0 253 description: Check mod2.64 with various values. 254 tags: ['tsan'] 255 cases: 256 - values: 257 - "0xD43883A022BBA8A1" 258 - "0xAAF23F449" 259 - "0xFFFFFFF635171663" 260 - values: 261 - "0x9AA3DE04AC281F64" 262 - "0xD39CC8359" 263 - "0xFFFFFFFBD6EE97AA" 264 - values: 265 - "0x2B522F1A7030A1C6" 266 - "0x511EAB1D9" 267 - "0x2D39C657F" 268 - values: 269 - "0xAB958C2AA68F8936" 270 - "0x9677D90DB" 271 - "0xFFFFFFFFD4F86B78" 272 - values: 273 - "0xE1D1D9EF8A718155" 274 - "0x3836657CA" 275 - "0xFFFFFFFE66F0D1EB" 276 - values: 277 - "0xB31108FC26286696" 278 - "0x6EF88B052" 279 - "0xFFFFFFFE71F24134" 280 - "0x7FABC476F1977825" 281 - "0x593EF9524" 282 - "0x17BB86D21" 283 - values: 284 - "0x2F7F50068624F26A" 285 - "0x8104CA4B5" 286 - "0x715DAF714" 287 - values: 288 - "0x8FA87DA4F72ECFD8" 289 - "0x47505818D" 290 - "0xFFFFFFFEDF09E6A2" 291 - values: 292 - "0x6DBA05387BF8987D" 293 - "0x38E6E285E" 294 - "0x202BD818F" 295 - values: ["0x8000000000000000", "-1", "0"] 296 - values: ["-9223372036854775808", "-1", "0"] 297 298 - file-name: "op_v_8_exception" 299 isa: 300 instructions: 301 - sig: mod2.64 v:in:i64 302 acc: inout:i64 303 format: [op_v_8] 304 header-template: [ArithmeticException, main] 305 code-template: | 306 # 307 ldai.64 %s 308 movi.64 v0, 0 309 begin: 310 mod2.64 v0 311 end: 312 ldai 1 # Should not reach this line 313 return 314 315 catch_AE: 316 ldai 0 # Expected panda.ArithmeticException 317 return 318 319 catch_all: 320 ldai 1 # Unexpected exception, test failed 321 return 322 323 .catch panda.ArithmeticException, begin, end, catch_AE 324 .catchall begin, end, catch_all 325 check-type: none 326 description: Check `mod2.64` throws ArithmeticException when divides by zero. 327 cases: 328 - values: ["0"] 329 - values: ["1"] 330 - values: ["0x7FFFFFFF"] 331 - values: ["0x80000000"] 332 - values: ["0xFFFFFFFF"] 333 - values: ["0x100000000"] 334 - values: ["0x7FFFFFFFFFFFFFFF"] 335 - values: ["0x8000000000000000"] 336 - values: ["0xFFFFFFFFFFFFFFFF"] 337 - values: ["-1"] 338 - values: ["-0x7FFFFFFF"] 339 - values: ["-0x80000000"] 340 - values: ["-0xFFFFFFFF"] 341 - values: ["-0x100000000"] 342 - values: ["-0x7FFFFFFFFFFFFFFF"] 343 - values: ["-0x8000000000000000"] 344 - values: ["-0xFFFFFFFFFFFFFFFF"] 345 346 347 - file-name: "regs" 348 isa: 349 instructions: 350 - sig: mod2.64 v:in:i64 351 acc: inout:i64 352 format: [op_v_8] 353 runner-options: ['compile-only'] 354 code-template: | 355 # 356 mod2.64 %s 357 check-type: none 358 description: Check mod2.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: mod2.64 v:in:i64 370 acc: inout:i64 371 format: [op_v_8] 372 verification: 373 - acc_type 374 - v1_type 375 tags: ['verifier'] 376 runner-options: ['verifier-failure', 'verifier-debug-config'] 377 code-template: | 378 # 379 %s 380 %s 381 mod2.64 v0 382 ldai.64 0 383 check-type: no-check 384 description: Check mod2.64 with incorrect accumulator and register type. 385 cases: 386 - values: 387 - "lda.null" 388 - "movi.64 v0, 0" 389 - values: 390 - "ldai.64 0 " 391 - "mov.null v0" 392 - values: 393 - "lda.null" 394 - "mov.null v0" 395