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