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