1# Copyright (c) 2021-2022 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: "mul2.64" 17 isa: 18 title: Two address binary operation on accumulator 19 description: > 20 Perform specified binary operation on accumulator and register and store result into accumulator 21 exceptions: 22 - x_none 23 commands: 24 - file-name: "op_vs_8_zero" 25 isa: 26 instructions: 27 - sig: mul2.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 mul2.64 v0 35 movi.64 v0, 0 36 cmp.64 v0 37 description: Check mul2.64 with zero and various values. 38 cases: 39 - values: 40 - "0" 41 - values: 42 - "1" 43 - values: 44 - "-1" 45 - values: 46 - "0x7FFFFFFFFFFFFFFF" 47 - values: 48 - "0x8000000000000000" 49 - values: 50 - "-0x7FFFFFFFFFFFFFFF" 51 - values: 52 - "-0x8000000000000000" 53 - values: 54 - "0xFFFFFFFFFFFFFFFF" 55 - values: 56 - "-0xFFFFFFFFFFFFFFFF" 57 58 - file-name: "op_vs_8_pone" 59 isa: 60 instructions: 61 - sig: mul2.64 v:in:i64 62 acc: inout:i64 63 format: [op_v_8] 64 code-template: | 65 # 66 ldai.64 1 67 movi.64 v0, %s 68 mul2.64 v0 69 movi.64 v0, %s 70 cmp.64 v0 71 description: Check mul2.64 with +1 and various values. 72 cases: 73 - values: 74 - "0" 75 - "0" 76 - values: 77 - "1" 78 - "1" 79 - values: 80 - "-1" 81 - "-1" 82 - values: 83 - "0x7FFFFFFFFFFFFFFF" 84 - "0x7FFFFFFFFFFFFFFF" 85 - values: 86 - "0x8000000000000000" 87 - "0x8000000000000000" 88 - values: 89 - "-0x7FFFFFFFFFFFFFFF" 90 - "-0x7FFFFFFFFFFFFFFF" 91 - values: 92 - "-0x8000000000000000" 93 - "-0x8000000000000000" 94 - values: 95 - "0xFFFFFFFFFFFFFFFF" 96 - "0xFFFFFFFFFFFFFFFF" 97 - values: 98 - "-0xFFFFFFFFFFFFFFFF" 99 - "-0xFFFFFFFFFFFFFFFF" 100 - file-name: "op_vs_8_none" 101 isa: 102 instructions: 103 - sig: mul2.64 v:in:i64 104 acc: inout:i64 105 format: [op_v_8] 106 code-template: | 107 # 108 ldai.64 -1 109 movi.64 v0, %s 110 mul2.64 v0 111 movi.64 v0, %s 112 cmp.64 v0 113 description: Check mul2.64 with -1 and various values. 114 cases: 115 - values: 116 - "0" 117 - "0" 118 - values: 119 - "1" 120 - "-1" 121 - values: 122 - "-1" 123 - "1" 124 - values: 125 - "0x7FFFFFFFFFFFFFFF" 126 - "-0x7FFFFFFFFFFFFFFF" 127 - values: 128 - "0x8000000000000000" 129 - "0x8000000000000000" 130 bugid: ['966'] 131 - values: 132 - "-0x7FFFFFFFFFFFFFFF" 133 - "0x7FFFFFFFFFFFFFFF" 134 - values: 135 - "-0x8000000000000000" 136 - "0x8000000000000000" 137 bugid: ['966'] 138 - values: 139 - "0xFFFFFFFFFFFFFFFF" 140 - "1" 141 - values: 142 - "-0xFFFFFFFFFFFFFFFF" 143 - "-1" 144 - file-name: "op_vs_8_pmax" 145 isa: 146 instructions: 147 - sig: mul2.64 v:in:i64 148 acc: inout:i64 149 format: [op_v_8] 150 code-template: | 151 # 152 ldai.64 0x7FFFFFFFFFFFFFFF 153 movi.64 v0, %s 154 mul2.64 v0 155 movi.64 v0, %s 156 cmp.64 v0 157 description: Check mul2.64 with +max and various values. 158 cases: 159 - values: 160 - "0" 161 - "0" 162 - values: 163 - "1" 164 - "0x7FFFFFFFFFFFFFFF" 165 - values: 166 - "-1" 167 - "0x8000000000000001" 168 - values: 169 - "0x7FFFFFFFFFFFFFFF" 170 - "1" 171 bugid: ['966'] 172 - values: 173 - "-0x7FFFFFFFFFFFFFFF" 174 - "-1" 175 bugid: ['966'] 176 - values: 177 - "0x8000000000000000" 178 - "0x8000000000000000" 179 bugid: ['966'] 180 - values: 181 - "-0x8000000000000000" 182 - "0x8000000000000000" 183 bugid: ['966'] 184 - values: 185 - "0xFFFFFFFFFFFFFFFF" 186 - "0x8000000000000001" 187 - values: 188 - "-0xFFFFFFFFFFFFFFFF" 189 - "0x7FFFFFFFFFFFFFFF" 190 191 - file-name: "op_vs_8_nmax" 192 isa: 193 instructions: 194 - sig: mul2.64 v:in:i64 195 acc: inout:i64 196 format: [op_v_8] 197 code-template: | 198 # 199 ldai.64 -0x8000000000000000 200 movi.64 v0, %s 201 mul2.64 v0 202 movi.64 v0, %s 203 cmp.64 v0 204 description: Check mul2.64 with -max and various values. 205 cases: 206 - values: 207 - "0" 208 - "0" 209 - values: 210 - "1" 211 - "0x8000000000000000" 212 - values: 213 - "-1" 214 - "0x8000000000000000" 215 bugid: ['966'] 216 - values: 217 - "0x7FFFFFFFFFFFFFFF" 218 - "0x8000000000000000" 219 bugid: ['966'] 220 - values: 221 - "-0x7FFFFFFFFFFFFFFF" 222 - "0x8000000000000000" 223 bugid: ['966'] 224 - values: 225 - "0x8000000000000000" 226 - "0x0" 227 bugid: ['966'] 228 - values: 229 - "-0x8000000000000000" 230 - "0x0" 231 bugid: ['966'] 232 - values: 233 - "0xFFFFFFFFFFFFFFFF" 234 - "0x8000000000000000" 235 bugid: ['966'] 236 - values: 237 - "-0xFFFFFFFFFFFFFFFF" 238 - "0x8000000000000000" 239 240 - file-name: "vals" 241 tags: ['tsan'] 242 bugid: ['966'] 243 isa: 244 instructions: 245 - sig: mul2.64 v:in:i64 246 acc: inout:i64 247 format: [op_v_8] 248 code-template: | 249 # 250 ldai.64 %s 251 movi.64 v0, %s 252 mul2.64 v0 253 movi.64 v0, %s 254 cmp.64 v0 255 description: Check mul2.64 with various values. 256 cases: 257 - values: 258 - "0x5C754A598000B1C9" 259 - "0x2CA2740976B63739" 260 - "0xC37F6EEFB13FC4C1" 261 - values: 262 - "0xDAB472ECDA737CC" 263 - "0x79F9DF504809677A" 264 - "0xB708275E9F4FAB38" 265 - values: 266 - "0xA31412BCF764575A" 267 - "0x5EC2792725427E87" 268 - "0x610F049E601C5C76" 269 - values: 270 - "0x84421CD84B625393" 271 - "0x40044033EFB99E4E" 272 - "0x8868F4CB49C530CA" 273 - values: 274 - "0xA58F0D0DF420A8B1" 275 - "0xA34242EE859F28E1" 276 - "0xCAC0B5E365FEEB91" 277 - values: 278 - "0x4BBB4B2F1563FC08" 279 - "0x600DA22C70BE6B5F" 280 - "0x884F94424861DEF8" 281 - values: 282 - "0x6342EE9A357EE2E0" 283 - "0x15E083DEF5CF6F86" 284 - "0xB482D0E3D7E9E140" 285 - values: 286 - "0xA573BE2E87C4FC6A" 287 - "0x7591429F66EEAF31" 288 - "0xA9FA05428BCCC64A" 289 - values: 290 - "0xD2C4E8374CF2FF68" 291 - "0xAB2AE1D3AC6A8E1" 292 - "0x211893B1339EBA68" 293 - values: 294 - "0x67AA822AEB637157" 295 - "0xC8E67E7B83C001DB" 296 - "0xC6BE3A0447C34C6D" 297 298 - file-name: "regs" 299 isa: 300 instructions: 301 - sig: mul2.64 v:in:i64 302 acc: inout:i64 303 format: [op_v_8] 304 runner-options: ['compile-only'] 305 code-template: | 306 # 307 mul2.64 %s 308 check-type: none 309 description: Check mul2.64 with various register numbers. 310 cases: 311 - values: 312 - "v255" 313 - values: 314 - "v256" 315 runner-options: ['compile-failure'] 316 317 - file-name: "type" 318 bugid: ["964", "966"] 319 tags: ["verifier"] 320 isa: 321 verification: 322 - acc_type 323 - v1_type 324 runner-options: ['verifier-failure', 'verifier-config'] 325 header-template: [] 326 code-template: | 327 .record T {} 328 .function i32 main() { 329 %s 330 *s 331 mul2.64 v0 332 check-type: exit-positive 333 description: Check 'mul2.64' with incorrect accumulator and/or register types. 334 cases: 335 - values: 336 - ldai 0 337 - values: 338 - ldai.64 0 339 id: acc_ok 340 - values: 341 - fldai 0 342 bugid: ['7315'] 343 - values: 344 - fldai.64 0 345 bugid: ['7315'] 346 - values: 347 - lda.null 348 - values: 349 - | 350 # 351 movi v1, 0 352 newarr v1, v1, i32[] 353 lda.obj v1 354 - values: 355 - lda.str "0" 356 - values: 357 - lda.type T 358 - values: 359 - | 360 # 361 newobj v1, T 362 lda.obj v1 363 template-cases: 364 - values: 365 - movi v0, 0 366 - values: 367 - movi.64 v0, 0 368 exclude: [acc_ok] 369 - values: 370 - fmovi v0, 0 371 bugid: ['7315'] 372 - values: 373 - fmovi.64 v0, 0 374 bugid: ['7315'] 375 - values: 376 - mov.null v0 377 - values: 378 - | 379 # 380 movi v0, 0 381 newarr v0, v0, i32[] 382 - values: 383 - | 384 # 385 lda.str "0" 386 sta.obj v0 387 - values: 388 - | 389 # 390 lda.type T 391 sta.obj v0 392 - values: 393 - newobj v0, T 394 395 396 - file-name: uninitialized_regs 397 isa: 398 instructions: 399 - sig: mul2.64 v:in:i64 400 acc: inout:i64 401 format: [op_v_8] 402 description: Check 'mul2.64' with uninitialized registers. 403 tags: ['verifier'] 404 runner-options: ['verifier-failure', 'verifier-config'] 405 code-template: | 406 # 407 %s 408 *s 409 mul2.64 *s 410 check-type: exit-positive 411 template-cases: 412 - values: 413 - '' 414 - values: 415 - ldai.64 0 416 exclude: [init] 417 cases: 418 - values: 419 - '' 420 - v0 421 - values: 422 - movi.64 v1, 0 423 - v1 424 id: init 425 - values: 426 - '' 427 - v8 428 - values: 429 - '' 430 - v15 431 - values: 432 - movi.64 v15, 0 433 - v15 434 id: init 435