• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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