• 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
14---
15definitions: []
16tests:
17  - file-name: addi
18    isa:
19      title: Two address binary operation with immediate on accumulator
20      description: >
21        Perform specified binary operation on accumulator and immediate and store result into accumulator.
22        Immediate is sign extended to operand size.
23      exceptions:
24        - x_none
25    commands:
26      - file-name: op_imm_8_zero
27        isa:
28          instructions:
29            - sig: addi imm:i32
30              acc: inout:i32
31              format: [op_imm_8]
32        code-template: |
33          #
34              ldai 0
35              addi %s
36              movi v0, %s
37              jne v0, set_failure
38              ldai 0
39              jmp fall_through
40          set_failure:
41              ldai 1
42          fall_through:
43        description: Check `addi` with zero and various values.
44        cases:
45          - values: ["0", "0x0"]
46          - values: ["1", "0x1"]
47          - values: ["-1", "0xFFFFFFFF"]
48          - values: ["0xF", "0xF"]
49          - values: ["-0xF", "0xFFFFFFF1"]
50          - values: ["0x7F", "0x7F"]
51          - values: ["-0x7F", "0xFFFFFF81"]
52          - values: ["0x80", "0xFFFFFF80"]
53          - values: ["-0x80", "0xFFFFFF80"]
54          - values: ["0xFF", "0xFFFFFFFF"]
55          - values: ["-0xFF", "0x1"]
56          - values: ["0x7FFFFFFF", "0xFFFFFFFF"]
57          - values: ["-0x7FFFFFFF", "0x1"]
58          - values: ["0x80000000", "0x0"]
59          - values: ["-0x80000000", "0x0"]
60          - values: ["0xFFFFFFFF", "0xFFFFFFFF"]
61          - values: ["-0xFFFFFFFF", "0x1"]
62      - file-name: op_imm_8_pone
63        isa:
64          instructions:
65            - sig: addi imm:i32
66              acc: inout:i32
67              format: [op_imm_8]
68        code-template: |
69          #
70              ldai 1
71              addi %s
72              movi v0, %s
73              jne v0, set_failure
74              ldai 0
75              jmp fall_through
76          set_failure:
77              ldai 1
78          fall_through:
79        description: Check `addi` with +1 and various values.
80        cases:
81          - values: ["0", "0x1"]
82          - values: ["1", "0x2"]
83          - values: ["-1", "0x0"]
84          - values: ["0xF", "0x10"]
85          - values: ["-0xF", "0xFFFFFFF2"]
86          - values: ["0x7F", "0x80"]
87          - values: ["-0x7F", "0xFFFFFF82"]
88          - values: ["0x80", "0xFFFFFF81"]
89          - values: ["-0x80", "0xFFFFFF81"]
90          - values: ["0xFF", "0x0"]
91          - values: ["-0xFF", "0x2"]
92          - values: ["0x7FFFFFFF", "0x0"]
93          - values: ["-0x7FFFFFFF", "0x2"]
94          - values: ["0x80000000", "0x1"]
95          - values: ["-0x80000000", "0x1"]
96          - values: ["0xFFFFFFFF", "0x0"]
97          - values: ["-0xFFFFFFFF", "0x2"]
98      - file-name: op_imm_8_none
99        isa:
100          instructions:
101            - sig: addi imm:i32
102              acc: inout:i32
103              format: [op_imm_8]
104        code-template: |
105          #
106              ldai -1
107              addi %s
108              movi v0, %s
109              jne v0, set_failure
110              ldai 0
111              jmp fall_through
112          set_failure:
113              ldai 1
114          fall_through:
115        description: Check `addi` with -1 and various values.
116        cases:
117          - values: ["0", "0xFFFFFFFF"]
118          - values: ["1", "0x0"]
119          - values: ["-1", "0xFFFFFFFE"]
120          - values: ["0xF", "0xE"]
121          - values: ["-0xF", "0xFFFFFFF0"]
122          - values: ["0x7F", "0x7E"]
123          - values: ["-0x7F", "0xFFFFFF80"]
124          - values: ["0x80", "0xFFFFFF7F"]
125          - values: ["-0x80", "0xFFFFFF7F"]
126          - values: ["0xFF", "0xFFFFFFFE"]
127          - values: ["-0xFF", "0x0"]
128          - values: ["0x7FFFFFFF", "0xFFFFFFFE"]
129          - values: ["-0x7FFFFFFF", "0x0"]
130          - values: ["0x80000000", "0xFFFFFFFF"]
131          - values: ["-0x80000000", "0xFFFFFFFF"]
132          - values: ["0xFFFFFFFF", "0xFFFFFFFE"]
133          - values: ["-0xFFFFFFFF", "0x0"]
134      - file-name: op_imm_8_pmax
135        isa:
136          instructions:
137            - sig: addi imm:i32
138              acc: inout:i32
139              format: [op_imm_8]
140        code-template: |
141          #
142              ldai 0x7FFFFFFF
143              addi %s
144              movi v0, %s
145              jne v0, set_failure
146              ldai 0
147              jmp fall_through
148          set_failure:
149              ldai 1
150          fall_through:
151        description: Check `addi` with +max and various values.
152        cases:
153          - values: ["0", "0x7FFFFFFF"]
154          - values: ["1", "0x80000000"]
155          - values: ["-1", "0x7FFFFFFE"]
156          - values: ["0xF", "0x8000000E"]
157          - values: ["-0xF", "0x7FFFFFF0"]
158          - values: ["0x7F", "0x8000007E"]
159          - values: ["-0x7F", "0x7FFFFF80"]
160          - values: ["0x80", "0x7FFFFF7F"]
161          - values: ["-0x80", "0x7FFFFF7F"]
162          - values: ["0xFF", "0x7FFFFFFE"]
163          - values: ["-0xFF", "0x80000000"]
164          - values: ["0x7FFFFFFF", "0x7FFFFFFE"]
165          - values: ["-0x7FFFFFFF", "0x80000000"]
166          - values: ["0x80000000", "0x7FFFFFFF"]
167          - values: ["-0x80000000", "0x7FFFFFFF"]
168          - values: ["0xFFFFFFFF", "0x7FFFFFFE"]
169          - values: ["-0xFFFFFFFF", "0x80000000"]
170      - file-name: op_imm_8_nmax
171        isa:
172          instructions:
173            - sig: addi imm:i32
174              acc: inout:i32
175              format: [op_imm_8]
176        code-template: |
177          #
178              ldai -0x80000000
179              addi %s
180              movi v0, %s
181              jne v0, set_failure
182              ldai 0
183              jmp fall_through
184          set_failure:
185              ldai 1
186          fall_through:
187        description: Check `addi` with -max and various values.
188        cases:
189          - values: ["0", "0x80000000"]
190          - values: ["1", "0x80000001"]
191          - values: ["-1", "0x7FFFFFFF"]
192          - values: ["0xF", "0x8000000F"]
193          - values: ["-0xF", "0x7FFFFFF1"]
194          - values: ["0x7F", "0x8000007F"]
195          - values: ["-0x7F", "0x7FFFFF81"]
196          - values: ["0x80", "0x7FFFFF80"]
197          - values: ["-0x80", "0x7FFFFF80"]
198          - values: ["0xFF", "0x7FFFFFFF"]
199          - values: ["-0xFF", "0x80000001"]
200          - values: ["0x7FFFFFFF", "0x7FFFFFFF"]
201          - values: ["-0x7FFFFFFF", "0x80000001"]
202          - values: ["0x80000000", "0x80000000"]
203          - values: ["-0x80000000", "0x80000000"]
204          - values: ["0xFFFFFFFF", "0x7FFFFFFF"]
205          - values: ["-0xFFFFFFFF", "0x80000001"]
206      - file-name: vals
207        isa:
208          instructions:
209            - sig: addi imm:i32
210              acc: inout:i32
211              format: [op_imm_8]
212        code-template: |
213          #
214              ldai %s
215              addi %s
216              movi v0, %s
217              jne v0, set_failure
218              ldai 0
219              jmp fall_through
220          set_failure:
221              ldai 1
222          fall_through:
223        description: Check `addi` with various values.
224        tags: ['tsan']
225        cases:
226          - values: ["0xB3FB9313", "0x2C9248E1", "0xB3FB92F4"]
227          - values: ["0x46A832F1", "0x4850A6C0", "0x46A832B1"]
228          - values: ["0xB4C93648", "0xF068FE2A", "0xB4C93672"]
229          - values: ["0x6C634024", "0x99DCC15F", "0x6C634083"]
230          - values: ["0x51FB4863", "0x620B0E04", "0x51FB4867"]
231          - values: ["0x24628B7D", "0x8D668AAC", "0x24628B29"]
232          - values: ["0xADB82709", "0x6E3AFBF0", "0xADB826F9"]
233          - values: ["0x92DDD52B", "0xC9E97127", "0x92DDD552"]
234          - values: ["0x179CDAA3", "0xCE2F54BC", "0x179CDA5F"]
235          - values: ["0x61B42CBB", "0x3A3B56F1", "0x61B42CAC"]
236      - file-name: type_1
237        bugid: ["964", "966"]
238        tags: ["verifier"]
239        isa:
240          instructions:
241            - sig: addi imm:i32
242              acc: inout:i32
243              format: [op_imm_8]
244          verification:
245            - acc_type
246        runner-options: ['verifier-failure', 'verifier-debug-config']
247        code-template: |
248          #
249              %s
250              addi 1
251              ldai 0
252        check-type: no-check
253        description: Check `addi` with incorrect accumulator type.
254        cases:
255          - values: [fldai.64 0.0]
256          - values: [fldai.64 -0.0]
257          - values: [fldai.64 1.0]
258          - values: [fldai.64 -1.0]
259          - values: [fldai.64 0x7FF8000000000000]
260          - values: [fldai.64 0xFFFFFFFFFFFFFFFF]
261          - values: [fldai.64 0x7FF0000000000000]
262          - values: [fldai.64 0xFFF0000000000000]
263          - values: [fldai.64 0xFFEFFFFFFFFFFFFF]
264          - values: [fldai.64 0x7FEFFFFFFFFFFFFF]
265          - values: [fldai.64 0x0000000000000001]
266          - values: [fldai.64 0x8000000000000001]
267          - values: [fldai.64 3.14159265358979323846]
268          - values: [lda.str ""]
269          - values: [lda.str "some string"]
270          - values: [lda.null]
271          - values: [ldai.64 0]
272          - values: [ldai.64 1]
273          - values: [ldai.64 -1]
274          - values: [ldai.64 0x0000000100000000]
275          - values: [ldai.64 -0x0000000100000000]
276          - values: [ldai.64 0x0000000080000000]
277          - values: [ldai.64 -0x0000000080000000]
278          - values: [ldai.64 0x1000000000000000]
279          - values: [ldai.64 0x8000000000000000]
280          - values: [ldai.64 0xF000000000000000]
281          - values: [ldai.64 0xFFFFFFFF00000000]
282          - values: [ldai.64 0xFFFFFFFFFFFFFFFF]
283          - values: [ldai.64 -0x1000000000000000]
284          - values: [ldai.64 -0x8000000000000000]
285          - values: [ldai.64 -0xF000000000000000]
286          - values: [ldai.64 -0xFFFFFFFF00000000]
287          - values: [ldai.64 -0xFFFFFFFFFFFFFFFF]
288      - file-name: type_obj
289        bugid: ["964", "966"]
290        tags: ["verifier"]
291        isa:
292          instructions:
293            - sig: addi imm:i32
294              acc: inout:i32
295              format: [op_imm_8]
296          verification:
297            - acc_type
298        runner-options: ['verifier-failure', 'verifier-debug-config']
299        description: Check `addi` with incorrect accumulator type.
300        code-template: |
301          #
302          .record Object {}
303          .function i32 main() {
304              %s
305              addi 1
306              ldai 0
307              return
308        check-type: none
309        header-template: []
310        cases:
311          - values: [lda.type Object]
312          - values:
313            - |
314              newobj v0, Object
315              lda.obj v0
316
317      - file-name: type
318        isa:
319          instructions:
320            - sig: addi imm:i32
321              acc: inout:i32
322              format: [op_imm_8]
323          verification:
324            - acc_type
325        tags: ['verifier']
326        runner-options: ['verifier-failure', 'verifier-debug-config']
327        header-template: []
328        code-template: |
329          #
330          .record B {}
331          .record panda.String <external>
332          .record panda.Object <external>
333          .function i32 main() {
334              %s
335              addi 0
336              ldai 0
337        check-type: no-check
338        description: Check addi with incorrect register type.
339        cases:
340          - values:
341              - fldai.64 0
342          - values:
343              - |
344                #
345                    lda.type B
346          - values:
347              - |
348                #
349                    lda.type B[]
350          - values:
351              - |
352                #
353                    lda.type panda.String
354          - values:
355              - |
356                #
357                    lda.type panda.Object
358          - values:
359              - |
360                #
361                    movi v0, 10
362                    newarr v0, v0, i32[]
363                    lda.obj v0
364          - values:
365              - lda.null
366          - values:
367              - ldai.64 0
368
369      - file-name: uninitialized_regs
370        isa:
371          instructions:
372            - sig: addi imm:i32
373              acc: inout:i32
374              format: [op_imm_8]
375        description: Check add with uninitialized registers.
376        tags: ['verifier']
377        runner-options: ['verifier-failure', 'verifier-debug-config']
378        header-template: []
379        code-template: |
380            #
381            .function i32 main() {
382                addi 0
383                ldai 0
384        check-type: no-check
385