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