• 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: "div2.64"
17    isa:
18      title: Two address integer division and modulo on accumulator
19      description: >
20        Perform integer division or modulo on accumulator and register and store result into accumulator
21      exceptions:
22        - x_arith
23    commands:
24      - file-name: "op_vs_8_zero"
25        isa:
26          instructions:
27            - sig: div2.64 v:in:i64
28              acc: inout:i64
29              format: [op_v_8]
30        code-template: |
31          #
32              ldai.64 0
33              movi.64 v0, %s
34              div2.64 v0
35              movi.64 v0, 0
36              cmp.64 v0
37        description: Check div2.64 with zero and various values.
38        cases:
39          - values:
40              - "0"
41            runner-options: ['run-failure']
42            description: Division by zero causes to exception.
43          - values:
44              - "1"
45          - values:
46              - "-1"
47          - values:
48              - "0x7FFFFFFFFFFFFFFF"
49          - values:
50              - "0x8000000000000000"
51          - values:
52              - "-0x7FFFFFFFFFFFFFFF"
53          - values:
54              - "-0x8000000000000000"
55          - values:
56              - "0xFFFFFFFFFFFFFFFF"
57          - values:
58              - "-0xFFFFFFFFFFFFFFFF"
59
60      - file-name: "op_vs_8_pone"
61        isa:
62          instructions:
63            - sig: div2.64 v:in:i64
64              acc: inout:i64
65              format: [op_v_8]
66        code-template: |
67          #
68              ldai.64 1
69              movi.64 v0, %s
70              div2.64 v0
71              movi.64 v0, %s
72              cmp.64 v0
73        description: Check div2.64 with +1 and various values.
74        cases:
75          - values:
76              - "0"
77              - "0x0"
78            runner-options: ['run-failure']
79            description: Division by zero causes to exception.
80          - values:
81              - "1"
82              - "0x1"
83          - values:
84              - "-1"
85              - "0xFFFFFFFFFFFFFFFF"
86          - values:
87              - "0x7FFFFFFFFFFFFFFF"
88              - "0x0"
89          - values:
90              - "0x8000000000000000"
91              - "0x0"
92          - values:
93              - "-0x7FFFFFFFFFFFFFFF"
94              - "0x0"
95          - values:
96              - "-0x8000000000000000"
97              - "0x0"
98          - values:
99              - "0xFFFFFFFFFFFFFFFF"
100              - "0xFFFFFFFFFFFFFFFF"
101          - values:
102              - "-0xFFFFFFFFFFFFFFFF"
103              - "0x1"
104
105      - file-name: "op_vs_8_none"
106        isa:
107          instructions:
108            - sig: div2.64 v:in:i64
109              acc: inout:i64
110              format: [op_v_8]
111        code-template: |
112          #
113              ldai.64 -1
114              movi.64 v0, %s
115              div2.64 v0
116              movi.64 v0, %s
117              cmp.64 v0
118        description: Check div2.64 with -1 and various values.
119        cases:
120          - values:
121              - "0"
122              - "0x0"
123            runner-options: ['run-failure']
124            description: Division by zero causes to exception.
125          - values:
126              - "1"
127              - "0xFFFFFFFFFFFFFFFF"
128          - values:
129              - "-1"
130              - "0x1"
131          - values:
132              - "0x7FFFFFFFFFFFFFFF"
133              - "0x0"
134          - values:
135              - "0x8000000000000000"
136              - "0x0"
137          - values:
138              - "-0x7FFFFFFFFFFFFFFF"
139              - "0x0"
140          - values:
141              - "-0x8000000000000000"
142              - "0x0"
143          - values:
144              - "0xFFFFFFFFFFFFFFFF"
145              - "0x1"
146          - values:
147              - "-0xFFFFFFFFFFFFFFFF"
148              - "0xFFFFFFFFFFFFFFFF"
149
150      - file-name: "op_vs_8_pmax"
151        isa:
152          instructions:
153            - sig: div2.64 v:in:i64
154              acc: inout:i64
155              format: [op_v_8]
156        code-template: |
157          #
158              ldai.64 0x7FFFFFFFFFFFFFFF
159              movi.64 v0, %s
160              div2.64 v0
161              movi.64 v0, %s
162              cmp.64 v0
163        description: Check div2.64 with +max1 and various values.
164        cases:
165          - values:
166              - "0"
167              - "0x0"
168            runner-options: ['run-failure']
169            description: Division by zero causes to exception.
170          - values:
171              - "1"
172              - "0x7FFFFFFFFFFFFFFF"
173          - values:
174              - "-1"
175              - "0x8000000000000001"
176          - values:
177              - "0x7FFFFFFFFFFFFFFF"
178              - "0x1"
179          - values:
180              - "0x8000000000000000"
181              - "0x0"
182          - values:
183              - "-0x7FFFFFFFFFFFFFFF"
184              - "0xFFFFFFFFFFFFFFFF"
185          - values:
186              - "-0x8000000000000000"
187              - "0x0"
188          - values:
189              - "0xFFFFFFFFFFFFFFFF"
190              - "0x8000000000000001"
191          - values:
192              - "-0xFFFFFFFFFFFFFFFF"
193              - "0x7FFFFFFFFFFFFFFF"
194
195      - file-name: "op_vs_8_nmax"
196        isa:
197          instructions:
198            - sig: div2.64 v:in:i64
199              acc: inout:i64
200              format: [op_v_8]
201        code-template: |
202          #
203              ldai.64 -0x8000000000000000
204              movi.64 v0, %s
205              div2.64 v0
206              movi.64 v0, %s
207              cmp.64 v0
208        description: Check div2.64 with -max and various values.
209        cases:
210          - values:
211              - "0"
212              - "0x0"
213            runner-options: ['run-failure']
214            description: Division by zero causes to exception.
215          - values:
216              - "1"
217              - "0x8000000000000000"
218          - values:
219              - "-1"
220              - "0x8000000000000000"
221          - values:
222              - "0x7FFFFFFFFFFFFFFF"
223              - "0xFFFFFFFFFFFFFFFF"
224          - values:
225              - "0x8000000000000000"
226              - "0x1"
227          - values:
228              - "-0x7FFFFFFFFFFFFFFF"
229              - "0x1"
230          - values:
231              - "-0x8000000000000000"
232              - "0x1"
233          - values:
234              - "0xFFFFFFFFFFFFFFFF"
235              - "0x8000000000000000"
236          - values:
237              - "-0xFFFFFFFFFFFFFFFF"
238              - "0x8000000000000000"
239
240      - file-name: "vals"
241        isa:
242          instructions:
243            - sig: div2.64 v:in:i64
244              acc: inout:i64
245              format: [op_v_8]
246        code-template: |
247          #
248              ldai.64 %s
249              movi.64 v0, %s
250              div2.64 v0
251              movi.64 v0, %s
252              cmp.64 v0
253        description: Check div2.64 with various values.
254        tags: ['tsan']
255        cases:
256          - values:
257              - "0x17EAACD3255811A1"
258              - "0xE8E4A070A"
259              - "0x1A4A25D"
260          - values:
261              - "0x33E7A3F9C4EB40AC"
262              - "0xE2BBF826B"
263              - "0x3A9ABE7"
264          - values:
265              - "0x2F4D5E0722AF40CC"
266              - "0x2C94DC312"
267              - "0x10F9F8C8"
268          - values:
269              - "0x96E12447F0B72B46"
270              - "0xEEA31086D"
271              - "0xFFFFFFFFF8F3B214"
272          - values:
273              - "0xD40751B27C6EFFAE"
274              - "0x21862396D"
275              - "0xFFFFFFFFEB038548"
276          - values:
277              - "0x48F08991A9F4AA07"
278              - "0x48601B6E8"
279              - "0x101FEDDA"
280          - values:
281              - "0x31EF39B9FC101C37"
282              - "0xA19115513"
283              - "0x4F1ED2F"
284          - values:
285              - "0x745FF968D0103641"
286              - "0x8297D9DAB"
287              - "0xE420CCA"
288          - values:
289              - "0xECE3CBD68839EA0F"
290              - "0x5B6B86256"
291              - "0xFFFFFFFFFCA7C8C3"
292          - values:
293              - "0x68BC11164D46497D"
294              - "0xE6EBA2BD5"
295              - "0x741C0A9"
296          - values: ["0x8000000000000000", "-1", "0x8000000000000000"]
297          - values: ["-9223372036854775808", "-1", "-9223372036854775808"]
298
299      - file-name: "op_v_8_exception"
300        isa:
301          instructions:
302            - sig: div2.64 v:in:i64
303              acc: inout:i64
304              format: [op_v_8]
305        header-template: [ArithmeticException, main]
306        code-template: |
307            #
308                ldai.64 %s
309                movi.64 v0, 0
310            begin:
311                div2.64 v0
312            end:
313                ldai 1 # Should not reach this line
314                return
315
316            catch_AE:
317                ldai 0 # Expected panda.ArithmeticException
318                return
319
320            catch_all:
321                ldai 1 # Unexpected exception, test failed
322                return
323
324            .catch panda.ArithmeticException, begin, end, catch_AE
325            .catchall begin, end, catch_all
326        check-type: none
327        description: Check `div2.64` throws ArithmeticException when divides by zero.
328        cases:
329          - values: ["0"]
330          - values: ["1"]
331          - values: ["0x7FFFFFFF"]
332          - values: ["0x80000000"]
333          - values: ["0xFFFFFFFF"]
334          - values: ["0x100000000"]
335          - values: ["0x7FFFFFFFFFFFFFFF"]
336          - values: ["0x8000000000000000"]
337          - values: ["0xFFFFFFFFFFFFFFFF"]
338          - values: ["-1"]
339          - values: ["-0x7FFFFFFF"]
340          - values: ["-0x80000000"]
341          - values: ["-0xFFFFFFFF"]
342          - values: ["-0x100000000"]
343          - values: ["-0x7FFFFFFFFFFFFFFF"]
344          - values: ["-0x8000000000000000"]
345          - values: ["-0xFFFFFFFFFFFFFFFF"]
346
347      - file-name: "regs"
348        isa:
349          instructions:
350            - sig: div2.64 v:in:i64
351              acc: inout:i64
352              format: [op_v_8]
353        runner-options: ['compile-only']
354        code-template: |
355          #
356              div2.64 %s
357        check-type: none
358        description: Check div2.64 with various register numbers.
359        cases:
360          - values:
361              - "v255"
362          - values:
363              - "v256"
364            runner-options: ['compile-failure']
365
366      - file-name: "type"
367        isa:
368          instructions:
369            - sig: div2.64 v:in:i64
370              acc: inout:i64
371              format: [op_v_8]
372          verification:
373            - acc_type
374            - v1_type
375        runner-options: ['verifier-failure', 'verifier-debug-config']
376        bugid: ["964"]
377        tags: ["verifier"]
378        code-template: |
379          #
380              %s
381              %s
382              div2.64 v0
383              ldai.64 0
384        check-type: no-check
385        description: Check div2.64 with incorrect type of accumulator and register.
386        cases:
387          - values:
388              - "lda.null"
389              - "movi.64 v0, 0"
390          - values:
391              - "ldai.64 0 "
392              - "mov.null v0"
393          - values:
394              - "lda.null"
395              - "mov.null v0"
396