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