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