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