1# Copyright (c) 2021-2022 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              return
40          set_failure:
41              ldai 1
42              return
43        check-type: none
44        description: Check `addi` with zero and various values.
45        cases:
46          - values: ["0", "0x0"]
47          - values: ["1", "0x1"]
48          - values: ["-1", "0xFFFFFFFF"]
49          - values: ["0xF", "0xF"]
50          - values: ["-0xF", "0xFFFFFFF1"]
51          - values: ["0x7F", "0x7F"]
52          - values: ["-0x7F", "0xFFFFFF81"]
53          - values: ["0x80", "0xFFFFFF80"]
54          - values: ["-0x80", "0xFFFFFF80"]
55          - values: ["0xFF", "0xFFFFFFFF"]
56          - values: ["-0xFF", "0x1"]
57
58
59      - file-name: op_imm_8_pone
60        isa:
61          instructions:
62            - sig: addi imm:i32
63              acc: inout:i32
64              format: [op_imm_8]
65        code-template: |
66          #
67              ldai 1
68              addi %s
69              movi v0, %s
70              jne v0, set_failure
71              ldai 0
72              return
73          set_failure:
74              ldai 1
75              return
76        check-type: none
77        description: Check `addi` with +1 and various values.
78        cases:
79          - values: ["0", "0x1"]
80          - values: ["1", "0x2"]
81          - values: ["-1", "0x0"]
82          - values: ["0xF", "0x10"]
83          - values: ["-0xF", "0xFFFFFFF2"]
84          - values: ["0x7F", "0x80"]
85          - values: ["-0x7F", "0xFFFFFF82"]
86          - values: ["0x80", "0xFFFFFF81"]
87          - values: ["-0x80", "0xFFFFFF81"]
88          - values: ["0xFF", "0x0"]
89          - values: ["-0xFF", "0x2"]
90
91
92      - file-name: op_imm_8_none
93        isa:
94          instructions:
95            - sig: addi imm:i32
96              acc: inout:i32
97              format: [op_imm_8]
98        code-template: |
99          #
100              ldai -1
101              addi %s
102              movi v0, %s
103              jne v0, set_failure
104              ldai 0
105              return
106          set_failure:
107              ldai 1
108              return
109        check-type: none
110        description: Check `addi` with -1 and various values.
111        cases:
112          - values: ["0", "0xFFFFFFFF"]
113          - values: ["1", "0x0"]
114          - values: ["-1", "0xFFFFFFFE"]
115          - values: ["0xF", "0xE"]
116          - values: ["-0xF", "0xFFFFFFF0"]
117          - values: ["0x7F", "0x7E"]
118          - values: ["-0x7F", "0xFFFFFF80"]
119          - values: ["0x80", "0xFFFFFF7F"]
120          - values: ["-0x80", "0xFFFFFF7F"]
121          - values: ["0xFF", "0xFFFFFFFE"]
122          - values: ["-0xFF", "0x0"]
123
124
125      - file-name: op_imm_8_pmax
126        isa:
127          instructions:
128            - sig: addi imm:i32
129              acc: inout:i32
130              format: [op_imm_8]
131        code-template: |
132          #
133              ldai 0x7FFFFFFF
134              addi %s
135              movi v0, %s
136              jne v0, set_failure
137              ldai 0
138              return
139          set_failure:
140              ldai 1
141              return
142        check-type: none
143        description: Check `addi` with +max and various values.
144        cases:
145          - values: ["0", "0x7FFFFFFF"]
146          - values: ["1", "0x80000000"]
147          - values: ["-1", "0x7FFFFFFE"]
148          - values: ["0xF", "0x8000000E"]
149          - values: ["-0xF", "0x7FFFFFF0"]
150          - values: ["0x7F", "0x8000007E"]
151          - values: ["-0x7F", "0x7FFFFF80"]
152          - values: ["0x80", "0x7FFFFF7F"]
153          - values: ["-0x80", "0x7FFFFF7F"]
154          - values: ["0xFF", "0x7FFFFFFE"]
155          - values: ["-0xFF", "0x80000000"]
156
157
158      - file-name: op_imm_8_nmax
159        isa:
160          instructions:
161            - sig: addi imm:i32
162              acc: inout:i32
163              format: [op_imm_8]
164        code-template: |
165          #
166              ldai -0x80000000
167              addi %s
168              movi v0, %s
169              jne v0, set_failure
170              ldai 0
171              return
172          set_failure:
173              ldai 1
174              return
175        check-type: none
176        description: Check `addi` with -max and various values.
177        cases:
178          - values: ["0", "0x80000000"]
179          - values: ["1", "0x80000001"]
180          - values: ["-1", "0x7FFFFFFF"]
181          - values: ["0xF", "0x8000000F"]
182          - values: ["-0xF", "0x7FFFFFF1"]
183          - values: ["0x7F", "0x8000007F"]
184          - values: ["-0x7F", "0x7FFFFF81"]
185          - values: ["0x80", "0x7FFFFF80"]
186          - values: ["-0x80", "0x7FFFFF80"]
187          - values: ["0xFF", "0x7FFFFFFF"]
188          - values: ["-0xFF", "0x80000001"]
189
190
191      - file-name: vals
192        isa:
193          instructions:
194            - sig: addi imm:i32
195              acc: inout:i32
196              format: [op_imm_8]
197        code-template: |
198          #
199              ldai %s
200              addi %s
201              movi v0, %s
202              jne v0, set_failure
203              ldai 0
204              return
205          set_failure:
206              ldai 1
207              return
208        check-type: none
209        description: Check `addi` with various values.
210        tags: ['tsan']
211        cases:
212          - values: ["0xB3FB9313", "0xE1", "0xB3FB92F4"]
213          - values: ["0x46A832F1", "0xC0", "0x46A832B1"]
214          - values: ["0xB4C93648", "0x2A", "0xB4C93672"]
215          - values: ["0x6C634024", "0x5F", "0x6C634083"]
216          - values: ["0x51FB4863", "0x04", "0x51FB4867"]
217          - values: ["0x24628B7D", "0xAC", "0x24628B29"]
218          - values: ["0xADB82709", "0xF0", "0xADB826F9"]
219          - values: ["0x92DDD52B", "0x27", "0x92DDD552"]
220          - values: ["0x179CDAA3", "0xBC", "0x179CDA5F"]
221          - values: ["0x61B42CBB", "0xF1", "0x61B42CAC"]
222
223
224      - file-name: type
225        isa:
226          verification:
227            - acc_type
228        tags: ['verifier']
229        runner-options: ['verifier-failure', 'verifier-config']
230        header-template: []
231        code-template: |
232          #
233          .record panda.Object <external>
234          .function i32 main() {
235              %s
236              addi 0
237        check-type: exit-positive
238        description: Check 'addi' with incorrect acc type.
239        cases:
240          - values: [ldai.64 0]
241          - values: [fldai 0]
242            bugid: ['7315']
243          - values: [fldai.64 0]
244          - values: [lda.null]
245          - values: [lda.type panda.Object]
246          - values: ['lda.type i32[]']
247          - values: [lda.str ""]
248          - values:
249            - |
250              #
251                  newobj v0, panda.Object
252                  lda.obj v0
253          - values:
254            - |
255              #
256                  movi v0, 10
257                  newarr v0, v0, i32[]
258                  lda.obj v0
259
260
261      - file-name: uninitialized_acc
262        isa:
263          instructions:
264            - sig: addi imm:i32
265              acc: inout:i32
266              format: [op_imm_8]
267        description: Check 'addi' with uninitialized accumulator.
268        tags: ['verifier']
269        runner-options: ['verifier-failure', 'verifier-config']
270        code-template: |
271          #
272              addi 0
273        check-type: exit-positive
274