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