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