• 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: divi
18    isa:
19      title: Two address integer division or modulo with immediate on accumulator
20      description: >
21        Perform two address integer division or modulo on accumulator and immediate and store result into accumulator.
22        Immediate is sign extended to operand size.
23      exceptions:
24        - x_arith
25    commands:
26      - file-name: op_imm_8_zero
27        isa:
28          instructions:
29            - sig: divi imm:i32
30              acc: inout:i32
31              format: [op_imm_8]
32        code-template: |
33          #
34              ldai 0
35              divi %s
36              movi v0, 0
37              jne v0, set_failure
38              ldai 0
39              jmp fall_through
40          set_failure:
41              ldai 1
42          fall_through:
43        description: Check `divi` with zero and various values.
44        cases:
45          - values: ["1"]
46          - values: ["-1"]
47          - values: ["0xF"]
48          - values: ["-0xF"]
49          - values: ["0x7F"]
50          - values: ["-0x7F"]
51          - values: ["0x80"]
52          - values: ["-0x80"]
53          - values: ["0xFF"]
54          - values: ["-0xFF"]
55          - values: ["0x7FFFFFFF"]
56          - values: ["-0x7FFFFFFF"]
57          - values: ["0xFFFFFFFF"]
58          - values: ["-0xFFFFFFFF"]
59      - file-name: op_imm_8_pone
60        isa:
61          instructions:
62            - sig: divi imm:i32
63              acc: inout:i32
64              format: [op_imm_8]
65        code-template: |
66          #
67              ldai 1
68              divi %s
69              movi v0, %s
70              jne v0, set_failure
71              ldai 0
72              jmp fall_through
73          set_failure:
74              ldai 1
75          fall_through:
76        description: Check `divi` with +1 and various values.
77        cases:
78          - values: ["1", "0x1"]
79          - values: ["-1", "0xFFFFFFFF"]
80          - values: ["0xF", "0x0"]
81          - values: ["-0xF", "0x0"]
82          - values: ["0x7F", "0x0"]
83          - values: ["-0x7F", "0x0"]
84          - values: ["0x80", "0x0"]
85          - values: ["-0x80", "0x0"]
86          - values: ["0xFF", "0xFFFFFFFF"]
87          - values: ["-0xFF", "0x1"]
88          - values: ["0x7FFFFFFF", "0xFFFFFFFF"]
89          - values: ["-0x7FFFFFFF", "0x1"]
90          - values: ["0xFFFFFFFF", "0xFFFFFFFF"]
91          - values: ["-0xFFFFFFFF", "0x1"]
92      - file-name: op_imm_8_none
93        isa:
94          instructions:
95            - sig: divi imm:i32
96              acc: inout:i32
97              format: [op_imm_8]
98        code-template: |
99          #
100              ldai -1
101              divi %s
102              movi v0, %s
103              jne v0, set_failure
104              ldai 0
105              jmp fall_through
106          set_failure:
107              ldai 1
108          fall_through:
109        description: Check `divi` with -1 and various values.
110        cases:
111          - values: ["1", "0xFFFFFFFF"]
112          - values: ["-1", "0x1"]
113          - values: ["0xF", "0x0"]
114          - values: ["-0xF", "0x0"]
115          - values: ["0x7F", "0x0"]
116          - values: ["-0x7F", "0x0"]
117          - values: ["0x80", "0x0"]
118          - values: ["-0x80", "0x0"]
119          - values: ["0xFF", "0x1"]
120          - values: ["-0xFF", "0xFFFFFFFF"]
121          - values: ["0x7FFFFFFF", "0x1"]
122          - values: ["-0x7FFFFFFF", "0xFFFFFFFF"]
123          - values: ["0xFFFFFFFF", "0x1"]
124          - values: ["-0xFFFFFFFF", "0xFFFFFFFF"]
125      - file-name: op_imm_8_pmax
126        isa:
127          instructions:
128            - sig: divi imm:i32
129              acc: inout:i32
130              format: [op_imm_8]
131        code-template: |
132          #
133              ldai 0x7FFFFFFF
134              divi %s
135              movi v0, %s
136              jne v0, set_failure
137              ldai 0
138              jmp fall_through
139          set_failure:
140              ldai 1
141          fall_through:
142        description: Check `divi` with +max and various values.
143        cases:
144          - values: ["1", "0x7FFFFFFF"]
145          - values: ["-1", "0x80000001"]
146          - values: ["0xF", "0x8888888"]
147          - values: ["-0xF", "0xF7777778"]
148          - values: ["0x7F", "0x1020408"]
149          - values: ["-0x7F", "0xFEFDFBF8"]
150          - values: ["0x80", "0xFF000001"]
151          - values: ["-0x80", "0xFF000001"]
152          - values: ["0xFF", "0x80000001"]
153          - values: ["-0xFF", "0x7FFFFFFF"]
154          - values: ["0x7FFFFFFF", "0x80000001"]
155          - values: ["-0x7FFFFFFF", "0x7FFFFFFF"]
156          - values: ["0xFFFFFFFF", "0x80000001"]
157          - values: ["-0xFFFFFFFF", "0x7FFFFFFF"]
158      - file-name: op_imm_8_nmax
159        isa:
160          instructions:
161            - sig: divi imm:i32
162              acc: inout:i32
163              format: [op_imm_8]
164        code-template: |
165          #
166              ldai -0x80000000
167              divi %s
168              movi v0, %s
169              jne v0, set_failure
170              ldai 0
171              jmp fall_through
172          set_failure:
173              ldai 1
174          fall_through:
175        description: Check `divi` with -max and various values.
176        cases:
177          - values: ["1", "0x80000000"]
178          - values: ["-1", "0x80000000"]
179          - values: ["0xF", "0xF7777778"]
180          - values: ["-0xF", "0x8888888"]
181          - values: ["0x7F", "0xFEFDFBF8"]
182          - values: ["-0x7F", "0x1020408"]
183          - values: ["0x80", "0x1000000"]
184          - values: ["-0x80", "0x1000000"]
185          - values: ["0xFF", "0x80000000"]
186          - values: ["-0xFF", "0x80000000"]
187          - values: ["0x7FFFFFFF", "0x80000000"]
188          - values: ["-0x7FFFFFFF", "0x80000000"]
189          - values: ["0xFFFFFFFF", "0x80000000"]
190          - values: ["-0xFFFFFFFF", "0x80000000"]
191
192      - file-name: op_imm_8_exception
193        isa:
194          instructions:
195            - sig: divi imm:i32
196              acc: inout:i32
197              format: [op_imm_8]
198        header-template: [ArithmeticException, main]
199
200        code-template: |
201          #
202              ldai %s
203          begin:
204              divi %s
205          end:
206              ldai 1 # Should not reach this line
207              return
208
209          catch_AE:
210              ldai 0 # Expected panda.ArithmeticException
211              return
212
213          catch_all:
214              ldai 1 # Unexpected exception, test failed
215              return
216
217          .catch panda.ArithmeticException, begin, end, catch_AE
218          .catchall begin, end, catch_all
219        check-type: none
220        description: Check `divi` throws ArithmeticException when divides by zero.
221        cases:
222          - values: ["0", "0"]
223          - values: ["1", "0"]
224          - values: ["-1", "0"]
225          - values: ["0x7FFFFFFF", "0"]
226          - values: ["0x80000000", "0"]
227          - values: ["-0x7FFFFFFF", "0"]
228          - values: ["-0x80000000", "0"]
229          - values: ["0xFFFFFFFF", "0"]
230          - values: ["-0xFFFFFFFF", "0"]
231          - values: ["1", "0x100"]
232          - values: ["1", "0x200"]
233          - values: ["1", "0xFFFFFF00"]
234          - values: ["1", "0x12345600"]
235          - values: ["1", "0xFEDCBA00"]
236
237      - file-name: vals
238        isa:
239          instructions:
240            - sig: divi imm:i32
241              acc: inout:i32
242              format: [op_imm_8]
243        code-template: |
244          #
245              ldai %s
246              divi %s
247              movi v0, %s
248              jne v0, set_failure
249              ldai 0
250              jmp fall_through
251          set_failure:
252              ldai 1
253          fall_through:
254        description: Check `divi` with various values.
255        tags: ['tsan']
256        cases:
257          - values: ["0x881A7B01", "0xBBBC58C", "0x108996C"]
258          - values: ["0xB915B8BD", "0xB5977802", "0xDC8ADC5F"]
259          - values: ["0x336458D6", "0xD358B202", "0x19B22C6B"]
260          - values: ["0x91958F96", "0xFF3E070A", "0xF4F55B29"]
261          - values: ["0x239216BB", "0xFEEF4239", "0x9FC185"]
262          - values: ["0x91E75821", "0x4C3DAF74", "0xFF0D0762"]
263          - values: ["0x46CC7483", "0x2491642A", "0x1AF88DE"]
264          - values: ["0xEFC0B1E8", "0x4A8736FE", "0x81FA70C"]
265          - values: ["0x83BF5338", "0x7994102F", "0xFD5B383E"]
266          - values: ["0x9D9E74AF", "0xADBE6B1A", "0xFC375342"]
267          - values: ["0x80000000", "-1", "0x80000000"]
268          - values: ["-2147483648", "-1", "-2147483648"]
269
270      - file-name: type
271        bugid: ["964", "966"]
272        tags: ["verifier"]
273        isa:
274          instructions:
275            - sig: divi imm:i32
276              acc: inout:i32
277              format: [op_imm_8]
278          verification:
279            - acc_type
280        runner-options: ['verifier-failure', 'verifier-debug-config']
281        code-template: |
282          #
283              %s
284              divi 1
285              ldai 0
286              return
287        check-type: no-check
288        description: Check `divi` with incorrect accumulator type.
289        cases:
290          - values: [fldai.64 0.0]
291          - values: [fldai.64 -0.0]
292          - values: [fldai.64 1.0]
293          - values: [fldai.64 -1.0]
294          - values: [fldai.64 0x7FF8000000000000]
295          - values: [fldai.64 0xFFFFFFFFFFFFFFFF]
296          - values: [fldai.64 0x7FF0000000000000]
297          - values: [fldai.64 0xFFF0000000000000]
298          - values: [fldai.64 0xFFEFFFFFFFFFFFFF]
299          - values: [fldai.64 0x7FEFFFFFFFFFFFFF]
300          - values: [fldai.64 0x0000000000000001]
301          - values: [fldai.64 0x8000000000000001]
302          - values: [fldai.64 3.14159265358979323846]
303          - values: [lda.str ""]
304          - values: [lda.str "some string"]
305          - values: [lda.null]
306          - values: [ldai.64 0]
307          - values: [ldai.64 1]
308          - values: [ldai.64 -1]
309          - values: [ldai.64 0x0000000100000000]
310          - values: [ldai.64 -0x0000000100000000]
311          - values: [ldai.64 0x0000000080000000]
312          - values: [ldai.64 -0x0000000080000000]
313          - values: [ldai.64 0x1000000000000000]
314          - values: [ldai.64 0x8000000000000000]
315          - values: [ldai.64 0xF000000000000000]
316          - values: [ldai.64 0xFFFFFFFF00000000]
317          - values: [ldai.64 0xFFFFFFFFFFFFFFFF]
318          - values: [ldai.64 -0x1000000000000000]
319          - values: [ldai.64 -0x8000000000000000]
320          - values: [ldai.64 -0xF000000000000000]
321          - values: [ldai.64 -0xFFFFFFFF00000000]
322          - values: [ldai.64 -0xFFFFFFFFFFFFFFFF]
323      - file-name: type_obj
324        bugid: ["964", "966"]
325        tags: ["verifier"]
326        isa:
327          instructions:
328            - sig: divi imm:i32
329              acc: inout:i32
330              format: [op_imm_8]
331          verification:
332            - acc_type
333        runner-options: ['verifier-failure', 'verifier-debug-config']
334        description: Check `divi` with incorrect accumulator type.
335        code-template: |
336          #
337          .record Object {}
338          .function i32 main() {
339              %s
340              divi 1
341              ldai 0
342              return
343        check-type: none
344        header-template: []
345        cases:
346          - values: [lda.type Object]
347          - values:
348            - |
349              newobj v0, Object
350              lda.obj v0
351
352