• 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: "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