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: "sta.64" 17 isa: 18 title: Store accumulator 19 description: Moves accumulator content into a register. 20 exceptions: 21 - x_none 22 commands: 23 - file-name: "op_vd_8_pos" 24 isa: 25 instructions: 26 - sig: sta.64 v:out:b64 27 acc: in:b64 28 format: [op_v_8] 29 code-template: | 30 # 31 ldai.64 %s 32 sta.64 v0 33 cmp.64 v0 34 description: Check sta.64 moves accumulator content into a register (positive values). 35 tags: ['tsan'] 36 cases: 37 - values: 38 - 0 39 - values: 40 - 1 41 - values: 42 - "0xF" 43 - values: 44 - "0xFF" 45 - values: 46 - "0xFFF" 47 - values: 48 - "0xFFFF" 49 - values: 50 - "0xFFFFF" 51 - values: 52 - "0xFFFFFF" 53 - values: 54 - "0xFFFFFFF" 55 - values: 56 - "0xFFFFFFFF" 57 - values: 58 - "0xFFFFFFFFF" 59 - values: 60 - "0xFFFFFFFFFF" 61 - values: 62 - "0xFFFFFFFFFFF" 63 - values: 64 - "0xFFFFFFFFFFFF" 65 - values: 66 - "0xFFFFFFFFFFFFF" 67 - values: 68 - "0xFFFFFFFFFFFFFF" 69 - values: 70 - "0xFFFFFFFFFFFFFFF" 71 - values: 72 - "0xFFFFFFFFFFFFFFFF" 73 - values: 74 - "0x7F" 75 - values: 76 - "0x7FF" 77 - values: 78 - "0x7FFF" 79 - values: 80 - "0x7FFFF" 81 - values: 82 - "0x7FFFFF" 83 - values: 84 - "0x7FFFFFF" 85 - values: 86 - "0x7FFFFFFF" 87 - values: 88 - "0x7FFFFFFFF" 89 - values: 90 - "0x7FFFFFFFFF" 91 - values: 92 - "0x7FFFFFFFFFFF" 93 - values: 94 - "0x7FFFFFFFFFFFF" 95 - values: 96 - "0x7FFFFFFFFFFFFF" 97 - values: 98 - "0x7FFFFFFFFFFFFFF" 99 - values: 100 - "0x7FFFFFFFFFFFFFFF" 101 102 - file-name: "op_vd_8_neg" 103 isa: 104 instructions: 105 - sig: sta.64 v:out:b64 106 acc: in:b64 107 format: [op_v_8] 108 code-template: | 109 # 110 ldai.64 %s 111 sta.64 v0 112 cmp.64 v0 113 description: Check sta.64 moves accumulator content into a register (negative values). 114 cases: 115 - values: 116 - "-1" 117 - values: 118 - "-0xF" 119 - values: 120 - "-0xFF" 121 - values: 122 - "-0xFFF" 123 - values: 124 - "-0xFFFF" 125 - values: 126 - "-0xFFFFF" 127 - values: 128 - "-0xFFFFFF" 129 - values: 130 - "-0xFFFFFFF" 131 - values: 132 - "-0xFFFFFFFF" 133 - values: 134 - "-0xFFFFFFFFF" 135 - values: 136 - "-0xFFFFFFFFFF" 137 - values: 138 - "-0xFFFFFFFFFFF" 139 - values: 140 - "-0xFFFFFFFFFFFF" 141 - values: 142 - "-0xFFFFFFFFFFFFF" 143 - values: 144 - "-0xFFFFFFFFFFFFFF" 145 - values: 146 - "-0xFFFFFFFFFFFFFFF" 147 - values: 148 - "-0xFFFFFFFFFFFFFFFF" 149 - values: 150 - "-0x7F" 151 - values: 152 - "-0x7FF" 153 - values: 154 - "-0x7FFF" 155 - values: 156 - "-0x7FFFF" 157 - values: 158 - "-0x7FFFFF" 159 - values: 160 - "-0x7FFFFFF" 161 - values: 162 - "-0x7FFFFFFF" 163 - values: 164 - "-0x7FFFFFFFFF" 165 - values: 166 - "-0x7FFFFFFFFFF" 167 - values: 168 - "-0x7FFFFFFFFFFF" 169 - values: 170 - "-0x7FFFFFFFFFFFF" 171 - values: 172 - "-0x7FFFFFFFFFFFFF" 173 - values: 174 - "-0x7FFFFFFFFFFFFFF" 175 - values: 176 - "-0x7FFFFFFFFFFFFFFF" 177 178 - file-name: "reg" 179 isa: 180 instructions: 181 - sig: sta.64 v:out:b64 182 acc: in:b64 183 format: [op_v_8] 184 code-template: | 185 # 186 ldai.64 0xDEADBEEFBADC0FFE 187 sta.64 %s 188 cmp.64 %s 189 description: Check sta.64 with various register numbers. 190 cases: 191 - values: [v0, v0] 192 - values: [v1, v1] 193 - values: [v7, v7] 194 - values: [v8, v8] 195 - values: [v15, v15] 196 - values: [v16, v16] 197 - values: [v127, v127] 198 - values: [v128, v128] 199 - values: [v255, v255] 200 - values: [v256, v255] 201 runner-options: [compile-failure] 202 case-check-type: no-check 203 description: Check sta.64 with incorrect register numbers. 204 - values: [a0, v255] 205 runner-options: [compile-failure] 206 case-check-type: no-check 207 description: Check sta.64 with incorrect register numbers. 208 - values: [0, v255] 209 runner-options: [compile-failure] 210 case-check-type: no-check 211 description: Check sta.64 with incorrect register numbers. 212 213 - file-name: 'type' 214 isa: 215 instructions: 216 - sig: sta.64 v:out:b64 217 acc: in:b64 218 format: [op_v_8] 219 verification: 220 - acc_type 221 tags: ['verifier'] 222 runner-options: ['verifier-failure', 'verifier-debug-config'] 223 header-template: [] 224 code-template: | 225 # 226 .record A {} 227 .record B {} 228 .record panda.String <external> 229 .record panda.Object <external> 230 .function i32 main() { 231 ##- v1 initialization with different types 232 *s 233 ##- Accumulator initialization with incorrect types 234 %s 235 sta.64 v1 236 check-type: exit-positive 237 description: Check 'sta.64' with incorrect accumulator type. Register type is not checked. 238 template-cases: 239 - values: 240 - ldai 0 241 - values: 242 - | 243 # 244 lda.type B 245 - values: 246 - | 247 # 248 lda.type B[] 249 - values: 250 - | 251 # 252 lda.type panda.String 253 - values: 254 - | 255 # 256 lda.str "string" 257 - values: 258 - | 259 # 260 movi v0, 10 261 newarr v0, v0, i32[] 262 lda.obj v0 263 - values: 264 - lda.null 265 cases: 266 - values: 267 - movi v1, 0 268 - values: 269 - movi.64 v1, 0 270 - values: 271 - fmovi.64 v1, 0 272 - values: 273 - | 274 # 275 lda.type A 276 sta.obj v1 277 - values: 278 - | 279 # 280 lda.type A[] 281 sta.obj v1 282 283 - values: 284 - | 285 # 286 lda.type panda.String 287 sta.obj v1 288 - values: 289 - | 290 # 291 lda.str "string" 292 sta.obj v1 293 - values: 294 - | 295 # 296 movi v1, 10 297 newarr v1, v1, f64[] 298 - values: 299 - mov.null v1 300 301 - file-name: uninitialized_regs 302 isa: 303 instructions: 304 - sig: sta.64 v:out:b64 305 acc: in:b64 306 format: [op_v_8] 307 description: Check 'sta.64' with uninitialized accumulator. Destination register is not checked. 308 tags: ['verifier'] 309 runner-options: ['verifier-failure', 'verifier-debug-config'] 310 header-template: [] 311 code-template: | 312 # 313 .function i32 main() { 314 %s 315 sta.64 %s 316 check-type: exit-positive 317 cases: 318 - values: 319 - '' 320 - v0 321 - values: 322 - movi v0, 0 323 - v0 324 - values: 325 - '' 326 - v15 327 - values: 328 - 'movi.64 v15, 0' 329 - v15 330 - values: 331 - '' 332 - v128 333 - values: 334 - 'fmovi.64 v128, 0' 335 - v128 336 - values: 337 - '' 338 - v255 339 - values: 340 - 'mov.null v255' 341 - v255 342 343 - file-name: "err" 344 isa: 345 instructions: 346 - sig: sta.64 v:out:b64 347 acc: in:b64 348 format: [op_v_8] 349 code-template: | 350 # Check sta.64 with wrong arguments 351 %s 352 check-type: none 353 runner-options: [compile-failure] 354 description: Check sta.64 with incorrect value. 355 cases: 356 - values: 357 - sta.64 1 358 - values: 359 - sta.64 1.1 360 - values: 361 - sta.64 a0 362 - values: 363 - sta.64 "" 364