• 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: "mod2.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: mod2.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              mod2.64 v0
35              movi.64 v0, 0
36              cmp.64 v0
37        description: Check mod2.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: mod2.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              mod2.64 v0
71              movi.64 v0, %s
72              cmp.64 v0
73        description: Check mod2.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              - "0"
83          - values:
84              - "-1"
85              - "0"
86          - values:
87              - "0x7FFFFFFFFFFFFFFF"
88              - "1"
89          - values:
90              - "0x8000000000000000"
91              - "1"
92          - values:
93              - "-0x7FFFFFFFFFFFFFFF"
94              - "1"
95          - values:
96              - "-0x8000000000000000"
97              - "1"
98          - values:
99              - "0xFFFFFFFFFFFFFFFF"
100              - "0"
101          - values:
102              - "-0xFFFFFFFFFFFFFFFF"
103              - "0"
104
105      - file-name: "op_vs_8_none"
106        isa:
107          instructions:
108            - sig: mod2.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              mod2.64 v0
116              movi.64 v0, %s
117              cmp.64 v0
118        description: Check mod2.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              - "0"
128          - values:
129              - "-1"
130              - "0"
131          - values:
132              - "0x7FFFFFFFFFFFFFFF"
133              - "-1"
134          - values:
135              - "0x8000000000000000"
136              - "-1"
137          - values:
138              - "-0x7FFFFFFFFFFFFFFF"
139              - "-1"
140          - values:
141              - "-0x8000000000000000"
142              - "-1"
143          - values:
144              - "0xFFFFFFFFFFFFFFFF"
145              - "0"
146          - values:
147              - "-0xFFFFFFFFFFFFFFFF"
148              - "0"
149
150      - file-name: "op_vs_8_pmax"
151        isa:
152          instructions:
153            - sig: mod2.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              mod2.64 v0
161              movi.64 v0, %s
162              cmp.64 v0
163        description: Check mod2.64 with +max 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              - "0"
173          - values:
174              - "-1"
175              - "0"
176          - values:
177              - "0x7FFFFFFFFFFFFFFF"
178              - "0"
179          - values:
180              - "0x8000000000000000"
181              - "0x7FFFFFFFFFFFFFFF"
182          - values:
183              - "-0x7FFFFFFFFFFFFFFF"
184              - "0"
185          - values:
186              - "-0x8000000000000000"
187              - "0x7FFFFFFFFFFFFFFF"
188          - values:
189              - "0xFFFFFFFFFFFFFFFF"
190              - "0"
191          - values:
192              - "-0xFFFFFFFFFFFFFFFF"
193              - "0"
194
195      - file-name: "op_vs_8_nmax"
196        isa:
197          instructions:
198            - sig: mod2.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              mod2.64 v0
206              movi.64 v0, %s
207              cmp.64 v0
208        description: Check mod2.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              - "0"
218          - values:
219              - "-1"
220              - "0"
221          - values:
222              - "0x7FFFFFFFFFFFFFFF"
223              - "-1"
224          - values:
225              - "0x8000000000000000"
226              - "0"
227          - values:
228              - "-0x7FFFFFFFFFFFFFFF"
229              - "-1"
230          - values:
231              - "-0x8000000000000000"
232              - "0"
233          - values:
234              - "0xFFFFFFFFFFFFFFFF"
235              - "0"
236          - values:
237              - "-0xFFFFFFFFFFFFFFFF"
238              - "0"
239
240      - file-name: "vals"
241        isa:
242          instructions:
243            - sig: mod2.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              mod2.64 v0
251              movi.64 v0, %s
252              cmp.64 v0
253        description: Check mod2.64 with various values.
254        tags: ['tsan']
255        cases:
256          - values:
257              - "0xD43883A022BBA8A1"
258              - "0xAAF23F449"
259              - "0xFFFFFFF635171663"
260          - values:
261              - "0x9AA3DE04AC281F64"
262              - "0xD39CC8359"
263              - "0xFFFFFFFBD6EE97AA"
264          - values:
265              - "0x2B522F1A7030A1C6"
266              - "0x511EAB1D9"
267              - "0x2D39C657F"
268          - values:
269              - "0xAB958C2AA68F8936"
270              - "0x9677D90DB"
271              - "0xFFFFFFFFD4F86B78"
272          - values:
273              - "0xE1D1D9EF8A718155"
274              - "0x3836657CA"
275              - "0xFFFFFFFE66F0D1EB"
276          - values:
277              - "0xB31108FC26286696"
278              - "0x6EF88B052"
279              - "0xFFFFFFFE71F24134"
280              - "0x7FABC476F1977825"
281              - "0x593EF9524"
282              - "0x17BB86D21"
283          - values:
284              - "0x2F7F50068624F26A"
285              - "0x8104CA4B5"
286              - "0x715DAF714"
287          - values:
288              - "0x8FA87DA4F72ECFD8"
289              - "0x47505818D"
290              - "0xFFFFFFFEDF09E6A2"
291          - values:
292              - "0x6DBA05387BF8987D"
293              - "0x38E6E285E"
294              - "0x202BD818F"
295          - values: ["0x8000000000000000", "-1", "0"]
296          - values: ["-9223372036854775808", "-1", "0"]
297
298      - file-name: "op_v_8_exception"
299        isa:
300          instructions:
301            - sig: mod2.64 v:in:i64
302              acc: inout:i64
303              format: [op_v_8]
304        header-template: [ArithmeticException, main]
305        code-template: |
306            #
307                ldai.64 %s
308                movi.64 v0, 0
309            begin:
310                mod2.64 v0
311            end:
312                ldai 1 # Should not reach this line
313                return
314
315            catch_AE:
316                ldai 0 # Expected panda.ArithmeticException
317                return
318
319            catch_all:
320                ldai 1 # Unexpected exception, test failed
321                return
322
323            .catch panda.ArithmeticException, begin, end, catch_AE
324            .catchall begin, end, catch_all
325        check-type: none
326        description: Check `mod2.64` throws ArithmeticException when divides by zero.
327        cases:
328          - values: ["0"]
329          - values: ["1"]
330          - values: ["0x7FFFFFFF"]
331          - values: ["0x80000000"]
332          - values: ["0xFFFFFFFF"]
333          - values: ["0x100000000"]
334          - values: ["0x7FFFFFFFFFFFFFFF"]
335          - values: ["0x8000000000000000"]
336          - values: ["0xFFFFFFFFFFFFFFFF"]
337          - values: ["-1"]
338          - values: ["-0x7FFFFFFF"]
339          - values: ["-0x80000000"]
340          - values: ["-0xFFFFFFFF"]
341          - values: ["-0x100000000"]
342          - values: ["-0x7FFFFFFFFFFFFFFF"]
343          - values: ["-0x8000000000000000"]
344          - values: ["-0xFFFFFFFFFFFFFFFF"]
345
346
347      - file-name: "regs"
348        isa:
349          instructions:
350            - sig: mod2.64 v:in:i64
351              acc: inout:i64
352              format: [op_v_8]
353        runner-options: ['compile-only']
354        code-template: |
355          #
356              mod2.64 %s
357        check-type: none
358        description: Check mod2.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: mod2.64 v:in:i64
370              acc: inout:i64
371              format: [op_v_8]
372          verification:
373            - acc_type
374            - v1_type
375        tags: ['verifier']
376        runner-options: ['verifier-failure', 'verifier-debug-config']
377        code-template: |
378          #
379              %s
380              %s
381              mod2.64 v0
382              ldai.64 0
383        check-type: no-check
384        description: Check mod2.64 with incorrect accumulator and register type.
385        cases:
386          - values:
387              - "lda.null"
388              - "movi.64 v0, 0"
389          - values:
390              - "ldai.64 0 "
391              - "mov.null v0"
392          - values:
393              - "lda.null"
394              - "mov.null v0"
395