• 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: subi
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: subi imm:i32
30              acc: inout:i32
31              format: [op_imm_8]
32        code-template: |
33          #
34              ldai 0
35              subi %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 `subi` with zero and various values.
44        cases:
45          - values: ["0", "0x0"]
46          - values: ["1", "0xFFFFFFFF"]
47          - values: ["-1", "0x1"]
48          - values: ["0xF", "0xFFFFFFF1"]
49          - values: ["-0xF", "0xF"]
50          - values: ["0x7F", "0xFFFFFF81"]
51          - values: ["-0x7F", "0x7F"]
52          - values: ["0x80", "0x80"]
53          - values: ["-0x80", "0x80"]
54          - values: ["0xFF", "0x1"]
55          - values: ["-0xFF", "0xFFFFFFFF"]
56          - values: ["0x7FFFFFFF", "0x1"]
57          - values: ["-0x7FFFFFFF", "0xFFFFFFFF"]
58          - values: ["0x80000000", "0x0"]
59          - values: ["-0x80000000", "0x0"]
60          - values: ["0xFFFFFFFF", "0x1"]
61          - values: ["-0xFFFFFFFF", "0xFFFFFFFF"]
62      - file-name: op_imm_8_pone
63        isa:
64          instructions:
65            - sig: subi imm:i32
66              acc: inout:i32
67              format: [op_imm_8]
68        code-template: |
69          #
70              ldai 1
71              subi %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 `subi` with +1 and various values.
80        cases:
81          - values: ["0", "0x1"]
82          - values: ["1", "0x0"]
83          - values: ["-1", "0x2"]
84          - values: ["0xF", "0xFFFFFFF2"]
85          - values: ["-0xF", "0x10"]
86          - values: ["0x7F", "0xFFFFFF82"]
87          - values: ["-0x7F", "0x80"]
88          - values: ["0x80", "0x81"]
89          - values: ["-0x80", "0x81"]
90          - values: ["0xFF", "0x2"]
91          - values: ["-0xFF", "0x0"]
92          - values: ["0x7FFFFFFF", "0x2"]
93          - values: ["-0x7FFFFFFF", "0x0"]
94          - values: ["0x80000000", "0x1"]
95          - values: ["-0x80000000", "0x1"]
96          - values: ["0xFFFFFFFF", "0x2"]
97          - values: ["-0xFFFFFFFF", "0x0"]
98
99      - file-name: op_imm_8_none
100        isa:
101          instructions:
102            - sig: subi imm:i32
103              acc: inout:i32
104              format: [op_imm_8]
105        code-template: |
106          #
107              ldai -1
108              subi %s
109              movi v0, %s
110              jne v0, set_failure
111              ldai 0
112              jmp fall_through
113          set_failure:
114              ldai 1
115          fall_through:
116        description: Check `subi` with -1 and various values.
117        cases:
118          - values: ["0", "0xFFFFFFFF"]
119          - values: ["1", "0xFFFFFFFE"]
120          - values: ["-1", "0x0"]
121          - values: ["0xF", "0xFFFFFFF0"]
122          - values: ["-0xF", "0xE"]
123          - values: ["0x7F", "0xFFFFFF80"]
124          - values: ["-0x7F", "0x7E"]
125          - values: ["0x80", "0x7F"]
126          - values: ["-0x80", "0x7F"]
127          - values: ["0xFF", "0x0"]
128          - values: ["-0xFF", "0xFFFFFFFE"]
129          - values: ["0x7FFFFFFF", "0x0"]
130          - values: ["-0x7FFFFFFF", "0xFFFFFFFE"]
131          - values: ["0x80000000", "0xFFFFFFFF"]
132          - values: ["-0x80000000", "0xFFFFFFFF"]
133          - values: ["0xFFFFFFFF", "0x0"]
134          - values: ["-0xFFFFFFFF", "0xFFFFFFFE"]
135      - file-name: op_imm_8_pmax
136        isa:
137          instructions:
138            - sig: subi imm:i32
139              acc: inout:i32
140              format: [op_imm_8]
141        code-template: |
142          #
143              ldai 0x7FFFFFFF
144              subi %s
145              movi v0, %s
146              jne v0, set_failure
147              ldai 0
148              jmp fall_through
149          set_failure:
150              ldai 1
151          fall_through:
152        description: Check `subi` with +max and various values.
153        cases:
154          - values: ["0", "0x7FFFFFFF"]
155          - values: ["1", "0x7FFFFFFE"]
156          - values: ["-1", "0x80000000"]
157          - values: ["0xF", "0x7FFFFFF0"]
158          - values: ["-0xF", "0x8000000E"]
159          - values: ["0x7F", "0x7FFFFF80"]
160          - values: ["-0x7F", "0x8000007E"]
161          - values: ["0x80", "0x8000007F"]
162          - values: ["-0x80", "0x8000007F"]
163          - values: ["0xFF", "0x80000000"]
164          - values: ["-0xFF", "0x7FFFFFFE"]
165          - values: ["0x7FFFFFFF", "0x80000000"]
166          - values: ["-0x7FFFFFFF", "0x7FFFFFFE"]
167          - values: ["0x80000000", "0x7FFFFFFF"]
168          - values: ["-0x80000000", "0x7FFFFFFF"]
169          - values: ["0xFFFFFFFF", "0x80000000"]
170          - values: ["-0xFFFFFFFF", "0x7FFFFFFE"]
171      - file-name: op_imm_8_nmax
172        isa:
173          instructions:
174            - sig: subi imm:i32
175              acc: inout:i32
176              format: [op_imm_8]
177        code-template: |
178          #
179              ldai -0x80000000
180              subi %s
181              movi v0, %s
182              jne v0, set_failure
183              ldai 0
184              jmp fall_through
185          set_failure:
186              ldai 1
187          fall_through:
188        description: Check `subi` with -max and various values.
189        cases:
190          - values: ["0", "0x80000000"]
191          - values: ["1", "0x7FFFFFFF"]
192          - values: ["-1", "0x80000001"]
193          - values: ["0xF", "0x7FFFFFF1"]
194          - values: ["-0xF", "0x8000000F"]
195          - values: ["0x7F", "0x7FFFFF81"]
196          - values: ["-0x7F", "0x8000007F"]
197          - values: ["0x80", "0x80000080"]
198          - values: ["-0x80", "0x80000080"]
199          - values: ["0xFF", "0x80000001"]
200          - values: ["-0xFF", "0x7FFFFFFF"]
201          - values: ["0x7FFFFFFF", "0x80000001"]
202          - values: ["-0x7FFFFFFF", "0x7FFFFFFF"]
203          - values: ["0x80000000", "0x80000000"]
204          - values: ["-0x80000000", "0x80000000"]
205          - values: ["0xFFFFFFFF", "0x80000001"]
206          - values: ["-0xFFFFFFFF", "0x7FFFFFFF"]
207      - file-name: vals
208        isa:
209          instructions:
210            - sig: subi imm:i32
211              acc: inout:i32
212              format: [op_imm_8]
213        code-template: |
214          #
215              ldai %s
216              subi %s
217              movi v0, %s
218              jne v0, set_failure
219              ldai 0
220              jmp fall_through
221          set_failure:
222              ldai 1
223          fall_through:
224        description: Check `subi` with various values.
225        tags: ['tsan']
226        cases:
227          - values: ["0x3B030AE3", "0x13112359", "0x3B030A8A"]
228          - values: ["0xB65CD5EE", "0xA0F81422", "0xB65CD5CC"]
229          - values: ["0x879FD92F", "0xBC71FE4", "0x879FD94B"]
230          - values: ["0xA7DE239F", "0xA18BDD29", "0xA7DE2376"]
231          - values: ["0x29B84E0C", "0xC2F5F80F", "0x29B84DFD"]
232          - values: ["0xC97A3E8A", "0xA06050C8", "0xC97A3EC2"]
233          - values: ["0x58E37AB0", "0x43513822", "0x58E37A8E"]
234          - values: ["0x94CD4C55", "0x6BFC483D", "0x94CD4C18"]
235          - values: ["0x966EB4B7", "0x909A94A2", "0x966EB515"]
236          - values: ["0x99769A97", "0xD60E43B8", "0x99769ADF"]
237      - file-name: type
238        bugid: ["964", "966"]
239        tags: ["verifier"]
240        isa:
241          instructions:
242            - sig: subi imm:i32
243              acc: inout:i32
244              format: [op_imm_8]
245          verification:
246            - acc_type
247        runner-options: ['verifier-failure', 'verifier-debug-config']
248        code-template: |
249          #
250              %s
251              subi 1
252              ldai 0
253        check-type: no-check
254        description: Check `subi` with incorrect accumulator type.
255        cases:
256          - values: [fldai.64 0.0]
257          - values: [fldai.64 -0.0]
258          - values: [fldai.64 1.0]
259          - values: [fldai.64 -1.0]
260          - values: [fldai.64 0x7FF8000000000000]
261          - values: [fldai.64 0xFFFFFFFFFFFFFFFF]
262          - values: [fldai.64 0x7FF0000000000000]
263          - values: [fldai.64 0xFFF0000000000000]
264          - values: [fldai.64 0xFFEFFFFFFFFFFFFF]
265          - values: [fldai.64 0x7FEFFFFFFFFFFFFF]
266          - values: [fldai.64 0x0000000000000001]
267          - values: [fldai.64 0x8000000000000001]
268          - values: [fldai.64 3.14159265358979323846]
269          - values: [lda.str ""]
270          - values: [lda.str "some string"]
271          - values: [lda.null]
272          - values: [ldai.64 0]
273          - values: [ldai.64 1]
274          - values: [ldai.64 -1]
275          - values: [ldai.64 0x0000000100000000]
276          - values: [ldai.64 -0x0000000100000000]
277          - values: [ldai.64 0x0000000080000000]
278          - values: [ldai.64 -0x0000000080000000]
279          - values: [ldai.64 0x1000000000000000]
280          - values: [ldai.64 0x8000000000000000]
281          - values: [ldai.64 0xF000000000000000]
282          - values: [ldai.64 0xFFFFFFFF00000000]
283          - values: [ldai.64 0xFFFFFFFFFFFFFFFF]
284          - values: [ldai.64 -0x1000000000000000]
285          - values: [ldai.64 -0x8000000000000000]
286          - values: [ldai.64 -0xF000000000000000]
287          - values: [ldai.64 -0xFFFFFFFF00000000]
288          - values: [ldai.64 -0xFFFFFFFFFFFFFFFF]
289      - file-name: type_obj
290        bugid: ["964", "966"]
291        tags: ["verifier"]
292        isa:
293          instructions:
294            - sig: subi imm:i32
295              acc: inout:i32
296              format: [op_imm_8]
297          verification:
298            - acc_type
299        runner-options: ['verifier-failure', 'verifier-debug-config']
300        description: Check `subi` with incorrect accumulator type.
301        code-template: |
302          #
303          .record Object {}
304          .function i32 main() {
305              %s
306              subi 1
307              ldai 0
308              return
309        check-type: none
310        header-template: []
311        cases:
312          - values: [lda.type Object]
313          - values:
314            - |
315              newobj v0, Object
316              lda.obj v0
317