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: "lda" 17 isa: 18 title: Load accumulator from register 19 description: Moves register content into an accumulator. 20 exceptions: 21 - x_none 22 commands: 23 - file-name: "op_vd_8_pos" 24 isa: 25 instructions: 26 - sig: lda v:in:i32 27 acc: out:i32 28 format: [op_v_8] 29 code-template: | 30 # 31 movi v0, %s 32 lda 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 lda moves register content into an accumulator (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: lda v:in:i32 81 acc: out:i32 82 format: [op_v_8] 83 code-template: | 84 # 85 movi v0, %s 86 lda 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 lda moves register content into an accumulator (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: lda v:in:i32 132 acc: out:i32 133 format: [op_v_8] 134 code-template: | 135 # 136 movi %s, 0xFEDCBA09 137 lda %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 lda with various register numbers. 145 cases: 146 - values: [v0, v0, v0] 147 - values: [v1, v1, v1] 148 - values: [v7, v7, v7] 149 - values: [v8, v8, v8] 150 - values: [v15, v15, v15] 151 - values: [v16, v16, v16] 152 - values: [v127, v127, v127] 153 - values: [v128, v128, v128] 154 - values: [v255, v255, v255] 155 - values: [v255, v256, v255] 156 runner-options: [compile-failure] 157 case-check-type: no-check 158 description: Check lda with incorrect register numbers. 159 - values: [v255, a0, v255] 160 runner-options: [compile-failure] 161 case-check-type: no-check 162 description: Check lda with incorrect register numbers. 163 - values: [v255, 0, v255] 164 runner-options: [compile-failure] 165 case-check-type: no-check 166 description: Check lda with incorrect register numbers. 167 168 - file-name: "type_1" 169 isa: 170 instructions: 171 - sig: lda v:in:i32 172 acc: out:i32 173 format: [op_v_8] 174 verification: 175 - v1_type 176 runner-options: ['verifier-failure', 'verifier-debug-config'] 177 bugid: ["964","966"] 178 tags: ["verifier"] 179 description: Check lda with incorrect register type. 180 code-template: | 181 # 182 mov.null v0 183 lda v0 184 check-type: no-check 185 186 - file-name: "sign_ext" 187 tags: ['verifier'] 188 runner-options: ['verifier-failure', 'verifier-debug-config'] 189 isa: 190 instructions: 191 - sig: lda v:in:i32 192 acc: out:i32 193 format: [op_v_8] 194 code-template: | 195 # 196 movi.64 v0, %s 197 lda v0 198 movi.64 v0, %s 199 cmp.64 v0 200 cases: 201 - values: 202 - "0x00000000FFFFFFFF" 203 - "0xFFFFFFFFFFFFFFFF" 204 - values: 205 - "0x0000000080000000" 206 - "0xFFFFFFFF80000000" 207 - values: 208 - "0x1234567890000000" 209 - "0xFFFFFFFF90000000" 210 - values: 211 - "0xFFFFFFFF00000000" 212 - "0" 213 214 - file-name: "type" 215 isa: 216 instructions: 217 - sig: lda v:in:i32 218 acc: out:i32 219 format: [op_v_8] 220 verification: 221 - v1_type 222 description: Check lda with incorrect source register type. Accumulator type is not checked. 223 runner-options: ['verifier-failure', 'verifier-debug-config'] 224 tags: ["verifier"] 225 header-template: [] 226 code-template: | 227 # 228 .record A {} 229 .record B {} 230 .record panda.String <external> 231 .record panda.Object <external> 232 .function i32 main() { 233 %s 234 *s 235 lda v1 236 ldai 0 237 check-type: no-check 238 template-cases: 239 - values: 240 - | 241 # 242 lda.type B 243 - values: 244 - | 245 # 246 lda.type B[] 247 - values: 248 - | 249 # 250 lda.type panda.String 251 - values: 252 - | 253 # 254 lda.str "string" 255 - values: 256 - | 257 # 258 lda.type panda.Object 259 - values: 260 - | 261 # 262 movi v0, 10 263 newarr v0, v0, i32[] 264 lda.obj v0 265 - values: 266 - lda.null 267 - values: 268 - ldai 0 269 - values: 270 - ldai.64 0 271 - values: 272 - fldai.64 0 273 cases: 274 - values: 275 - | 276 # 277 lda.type A 278 sta.obj v1 279 - values: 280 - | 281 # 282 lda.type A[] 283 sta.obj v1 284 - values: 285 - | 286 # 287 lda.type panda.String 288 sta.obj v1 289 - values: 290 - | 291 # 292 lda.str "string" 293 sta.obj v1 294 295 - values: 296 - | 297 # 298 lda.type panda.Object 299 sta.obj v1 300 - values: 301 - | 302 # 303 movi v1, 10 304 newarr v1, v1, f64[] 305 - values: 306 - mov.null v1 307 - values: 308 - movi.64 v1, 0 309 - values: 310 - fmovi.64 v1, 0 311 312 - file-name: uninitialized_regs 313 isa: 314 instructions: 315 - sig: lda v:in:i32 316 acc: out:i32 317 format: [op_v_8] 318 description: Check lda with uninitialized registers. 319 tags: ['verifier'] 320 runner-options: ['verifier-failure', 'verifier-debug-config'] 321 header-template: [] 322 code-template: | 323 # 324 .function i32 main() { 325 lda %s 326 ldai 0 327 check-type: no-check 328 cases: 329 - values: 330 - v0 331 - values: 332 - v8 333 - values: 334 - v15 335 - values: 336 - v255 337