• 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: "modu2"
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: modu2 v:in:u32
28              acc: inout:u32
29              prefix: unsigned
30              format: [pref_op_v_8]
31        code-template: |
32          #
33              ldai 0
34              movi v0, %s
35              modu2 v0
36              movi v0, 0
37              ucmp v0
38        description: Check modu2 with zero and various values.
39        cases:
40          - values:
41              - "0"
42            runner-options: ['run-failure']
43            description: Division by zero causes to exception.
44          - values:
45              - "1"
46          - values:
47              - "-1"
48          - values:
49              - "0x7FFFFFFF"
50          - values:
51              - "0x80000000"
52          - values:
53              - "-0x7FFFFFFF"
54          - values:
55              - "-0x80000000"
56          - values:
57              - "0xFFFFFFFF"
58          - values:
59              - "-0xFFFFFFFF"
60
61      - file-name: "op_vs_8_pone"
62        isa:
63          instructions:
64            - sig: modu2 v:in:u32
65              acc: inout:u32
66              prefix: unsigned
67              format: [pref_op_v_8]
68        code-template: |
69          #
70              ldai 1
71              movi v0, %s
72              modu2 v0
73              movi v0, %s
74              ucmp v0
75        description: Check modu2 with +1 and various values.
76        cases:
77          - values:
78              - "0"
79              - "0x0"
80            runner-options: ['run-failure']
81            description: Division by zero causes to exception.
82          - values:
83              - "1"
84              - "0"
85          - values:
86              - "-1"
87              - "1"
88          - values:
89              - "0x7FFFFFFF"
90              - "1"
91          - values:
92              - "0x80000000"
93              - "1"
94          - values:
95              - "-0x7FFFFFFF"
96              - "1"
97          - values:
98              - "-0x80000000"
99              - "1"
100          - values:
101              - "0xFFFFFFFF"
102              - "1"
103          - values:
104              - "-0xFFFFFFFF"
105              - "0"
106
107      - file-name: "op_vs_8_none"
108        isa:
109          instructions:
110            - sig: modu2 v:in:u32
111              acc: inout:u32
112              prefix: unsigned
113              format: [pref_op_v_8]
114        code-template: |
115          #
116              ldai -1
117              movi v0, %s
118              modu2 v0
119              movi v0, %s
120              ucmp v0
121        description: Check modu2 with -1 and various values.
122        cases:
123          - values:
124              - "0"
125              - "0"
126            runner-options: ['run-failure']
127            description: Division by zero causes to exception.
128          - values:
129              - "1"
130              - "0"
131          - values:
132              - "-1"
133              - "0"
134          - values:
135              - "0x7FFFFFFF"
136              - "1"
137          - values:
138              - "0x80000000"
139              - "0x7FFFFFFF"
140          - values:
141              - "-0x7FFFFFFF"
142              - "0x7FFFFFFE"
143          - values:
144              - "-0x80000000"
145              - "0x7FFFFFFF"
146          - values:
147              - "0xFFFFFFFF"
148              - "0"
149          - values:
150              - "-0xFFFFFFFF"
151              - "0"
152
153      - file-name: "op_vs_8_pmax"
154        isa:
155          instructions:
156            - sig: modu2 v:in:u32
157              acc: inout:u32
158              prefix: unsigned
159              format: [pref_op_v_8]
160        code-template: |
161          #
162              ldai 0x7FFFFFFF
163              movi v0, %s
164              modu2 v0
165              movi v0, %s
166              ucmp v0
167        description: Check modu2 with +max and various values.
168        cases:
169          - values:
170              - "0"
171              - "0"
172            runner-options: ['run-failure']
173            description: Division by zero causes to exception.
174          - values:
175              - "1"
176              - "0"
177          - values:
178              - "-1"
179              - "0x7FFFFFFF"
180          - values:
181              - "0x7FFFFFFF"
182              - "0"
183          - values:
184              - "0x80000000"
185              - "0x7FFFFFFF"
186          - values:
187              - "-0x7FFFFFFF"
188              - "0x7FFFFFFF"
189          - values:
190              - "-0x80000000"
191              - "0x7FFFFFFF"
192          - values:
193              - "0xFFFFFFFF"
194              - "0x7FFFFFFF"
195          - values:
196              - "-0xFFFFFFFF"
197              - "0"
198
199      - file-name: "op_vs_8_nmax"
200        isa:
201          instructions:
202            - sig: modu2 v:in:u32
203              acc: inout:u32
204              prefix: unsigned
205              format: [pref_op_v_8]
206        code-template: |
207          #
208              ldai -0x80000000
209              movi v0, %s
210              modu2 v0
211              movi v0, %s
212              ucmp v0
213        description: Check modu2 with -max and various values.
214        cases:
215          - values:
216              - "0"
217              - "0"
218            runner-options: ['run-failure']
219            description: Division by zero causes to exception.
220          - values:
221              - "1"
222              - "0"
223          - values:
224              - "-1"
225              - "0x80000000"
226          - values:
227              - "0x7FFFFFFF"
228              - "1"
229          - values:
230              - "0x80000000"
231              - "0"
232          - values:
233              - "-0x7FFFFFFF"
234              - "0x80000000"
235          - values:
236              - "-0x80000000"
237              - "0"
238          - values:
239              - "0xFFFFFFFF"
240              - "0x80000000"
241          - values:
242              - "-0xFFFFFFFF"
243              - "0"
244
245      - file-name: "vals"
246        isa:
247          instructions:
248            - sig: modu2 v:in:u32
249              acc: inout:u32
250              prefix: unsigned
251              format: [pref_op_v_8]
252        code-template: |
253          #
254              ldai %s
255              movi v0, %s
256              modu2 v0
257              movi v0, %s
258              ucmp v0
259        description: Check modu2 with various values.
260        tags: ['tsan']
261        cases:
262          - values:
263              - "0x8A2D7087"
264              - "0x9738"
265              - "0x10E7"
266          - values:
267              - "0xF890E968"
268              - "0x2EB89"
269              - "0x1E6D1"
270          - values:
271              - "0x2C8979B4"
272              - "0x9D618"
273              - "0x1330C"
274          - values:
275              - "0x544FAA9D"
276              - "0xD3F57"
277              - "0x39E02"
278          - values:
279              - "0x732823F4"
280              - "0x507F"
281              - "0x4AF"
282          - values:
283              - "0xD3367BD4"
284              - "0x3A2D9"
285              - "0x1532E"
286          - values:
287              - "0x761956A8"
288              - "0x68812"
289              - "0x57140"
290          - values:
291              - "0xF7C3980D"
292              - "0xDDC89"
293              - "0xB63B6"
294          - values:
295              - "0xDF705C05"
296              - "0x4DDE8"
297              - "0x9BDD"
298          - values:
299              - "0xDD536643"
300              - "0xFF005"
301              - "0x150D4"
302
303      - file-name: "op_v_8_exception"
304        isa:
305          instructions:
306            - sig: modu2 v:in:u32
307              acc: inout:u32
308              prefix: unsigned
309              format: [pref_op_v_8]
310        header-template: [ArithmeticException, main]
311        code-template: |
312            #
313                ldai %s
314                movi v0, 0
315            begin:
316                modu2 v0
317            end:
318                ldai 1 # Should not reach this line
319                return
320
321            catch_AE:
322                ldai 0 # Expected panda.ArithmeticException
323                return
324
325            catch_all:
326                ldai 1 # Unexpected exception, test failed
327                return
328
329            .catch panda.ArithmeticException, begin, end, catch_AE
330            .catchall begin, end, catch_all
331        check-type: none
332        description: Check `modu2` throws ArithmeticException when divides by zero.
333        cases:
334          - values: ["0"]
335          - values: ["1"]
336          - values: ["0x7FFF"]
337          - values: ["0xFFFF"]
338          - values: ["0x7FFFFFFF"]
339          - values: ["0x80000000"]
340          - values: ["0xFFFFFFFF"]
341          - values: ["-1"]
342          - values: ["-0x7FFF"]
343          - values: ["-0xFFFF"]
344          - values: ["-0x7FFFFFFF"]
345          - values: ["-0x80000000"]
346          - values: ["-0xFFFFFFFF"]
347
348      - file-name: "vals_mod32_1"
349        bugid: ['1324']
350        tags: ['verifier']
351        runner-options: ['verifier-failure', 'verifier-debug-config']
352        isa:
353          instructions:
354            - sig: modu2 v:in:u32
355              acc: inout:u32
356              prefix: unsigned
357              format: [pref_op_v_8]
358        code-template: |
359          #
360              ldai %s
361              movi v0, %s
362              modu2 v0
363              movi.64 v0, %s
364              ucmp.64 v0
365        description: Check modu2 with incorrect accumulator and register type.
366        cases:
367          - values:
368              - "0xFFFFFFFF"
369              - "2"
370              - "1"
371          - values:
372              - "0xFFFFFFFF"
373              - "0x7FFFFFFE"
374              - "0x3"
375          - values:
376              - "0x80000001"
377              - "2"
378              - "1"
379
380      - file-name: "vals_mod32_2"
381        bugid: ['1324']
382        tags: ['verifier']
383        runner-options: ['verifier-failure', 'verifier-debug-config']
384        isa:
385          instructions:
386            - sig: modu2 v:in:u32
387              acc: inout:u32
388              prefix: unsigned
389              format: [pref_op_v_8]
390        code-template: |
391          #
392              ldai.64 %s
393              movi.64 v0, %s
394              modu2 v0
395              movi.64 v0, %s
396              ucmp.64 v0
397        description: Check modu2 with incorrect accumulator and register type.
398        cases:
399          - values:
400              - "0x180000001"
401              - "0xF00000002"
402              - "1"
403          - values:
404              - "0x777777777FFFFFFF"
405              - "0x11111111FFFFFFFE"
406              - "0x7FFFFFFF"
407          - values:
408              - "0xFEDCBA8780000001"
409              - "0x1234567800000002"
410              - "1"
411
412      - file-name: "regs"
413        isa:
414          instructions:
415            - sig: modu2 v:in:u32
416              acc: inout:u32
417              prefix: unsigned
418              format: [pref_op_v_8]
419        runner-options: ['compile-only']
420        code-template: |
421          #
422              modu2 %s
423        check-type: none
424        description: Check modu2 with various register numbers.
425        cases:
426          - values:
427              - "v255"
428          - values:
429              - "v256"
430            runner-options: ['compile-failure']
431
432      - file-name: "type"
433        isa:
434          instructions:
435            - sig: modu2 v:in:u32
436              acc: inout:u32
437              prefix: unsigned
438              format: [pref_op_v_8]
439          verification:
440            - acc_type
441            - v1_type
442        tags: ['verifier']
443        runner-options: ['verifier-failure', 'verifier-debug-config']
444        code-template: |
445          #
446              %s
447              %s
448              modu2 v0
449              ldai 0
450        check-type: no-check
451        description: Check modu2 with incorrect accumulator and register type.
452        cases:
453          - values:
454              - "lda.null"
455              - "movi v0, 0"
456          - values:
457              - "ldai 0 "
458              - "mov.null v0"
459          - values:
460              - "lda.null"
461              - "mov.null v0"
462