• 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.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: div2.64 v:in:i64
28              acc: inout:i64
29              format: [op_v_8]
30        tags: ['irtoc_ignore']
31        code-template: |
32          #
33              ldai.64 0
34              movi.64 v0, %s
35              div2.64 v0
36              movi.64 v0, 0
37              cmp.64 v0
38        description: Check div2.64 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              - "0x7FFFFFFFFFFFFFFF"
50          - values:
51              - "0x8000000000000000"
52          - values:
53              - "-0x7FFFFFFFFFFFFFFF"
54          - values:
55              - "-0x8000000000000000"
56          - values:
57              - "0xFFFFFFFFFFFFFFFF"
58          - values:
59              - "-0xFFFFFFFFFFFFFFFF"
60
61      - file-name: "op_vs_8_pone"
62        isa:
63          instructions:
64            - sig: div2.64 v:in:i64
65              acc: inout:i64
66              format: [op_v_8]
67        tags: ['irtoc_ignore']
68        code-template: |
69          #
70              ldai.64 1
71              movi.64 v0, %s
72              div2.64 v0
73              movi.64 v0, %s
74              cmp.64 v0
75        description: Check div2.64 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              - "0x1"
85          - values:
86              - "-1"
87              - "0xFFFFFFFFFFFFFFFF"
88          - values:
89              - "0x7FFFFFFFFFFFFFFF"
90              - "0x0"
91          - values:
92              - "0x8000000000000000"
93              - "0x0"
94          - values:
95              - "-0x7FFFFFFFFFFFFFFF"
96              - "0x0"
97          - values:
98              - "-0x8000000000000000"
99              - "0x0"
100          - values:
101              - "0xFFFFFFFFFFFFFFFF"
102              - "0xFFFFFFFFFFFFFFFF"
103          - values:
104              - "-0xFFFFFFFFFFFFFFFF"
105              - "0x1"
106
107      - file-name: "op_vs_8_none"
108        isa:
109          instructions:
110            - sig: div2.64 v:in:i64
111              acc: inout:i64
112              format: [op_v_8]
113        tags: ['irtoc_ignore']
114        code-template: |
115          #
116              ldai.64 -1
117              movi.64 v0, %s
118              div2.64 v0
119              movi.64 v0, %s
120              cmp.64 v0
121        description: Check div2.64 with -1 and various values.
122        cases:
123          - values:
124              - "0"
125              - "0x0"
126            runner-options: ['run-failure']
127            description: Division by zero causes to exception.
128          - values:
129              - "1"
130              - "0xFFFFFFFFFFFFFFFF"
131          - values:
132              - "-1"
133              - "0x1"
134          - values:
135              - "0x7FFFFFFFFFFFFFFF"
136              - "0x0"
137          - values:
138              - "0x8000000000000000"
139              - "0x0"
140          - values:
141              - "-0x7FFFFFFFFFFFFFFF"
142              - "0x0"
143          - values:
144              - "-0x8000000000000000"
145              - "0x0"
146          - values:
147              - "0xFFFFFFFFFFFFFFFF"
148              - "0x1"
149          - values:
150              - "-0xFFFFFFFFFFFFFFFF"
151              - "0xFFFFFFFFFFFFFFFF"
152
153      - file-name: "op_vs_8_pmax"
154        isa:
155          instructions:
156            - sig: div2.64 v:in:i64
157              acc: inout:i64
158              format: [op_v_8]
159        tags: ['irtoc_ignore']
160        code-template: |
161          #
162              ldai.64 0x7FFFFFFFFFFFFFFF
163              movi.64 v0, %s
164              div2.64 v0
165              movi.64 v0, %s
166              cmp.64 v0
167        description: Check div2.64 with +max1 and various values.
168        cases:
169          - values:
170              - "0"
171              - "0x0"
172            runner-options: ['run-failure']
173            description: Division by zero causes to exception.
174          - values:
175              - "1"
176              - "0x7FFFFFFFFFFFFFFF"
177          - values:
178              - "-1"
179              - "0x8000000000000001"
180          - values:
181              - "0x7FFFFFFFFFFFFFFF"
182              - "0x1"
183          - values:
184              - "0x8000000000000000"
185              - "0x0"
186          - values:
187              - "-0x7FFFFFFFFFFFFFFF"
188              - "0xFFFFFFFFFFFFFFFF"
189          - values:
190              - "-0x8000000000000000"
191              - "0x0"
192          - values:
193              - "0xFFFFFFFFFFFFFFFF"
194              - "0x8000000000000001"
195          - values:
196              - "-0xFFFFFFFFFFFFFFFF"
197              - "0x7FFFFFFFFFFFFFFF"
198
199      - file-name: "op_vs_8_nmax"
200        isa:
201          instructions:
202            - sig: div2.64 v:in:i64
203              acc: inout:i64
204              format: [op_v_8]
205        tags: ['irtoc_ignore']
206        code-template: |
207          #
208              ldai.64 -0x8000000000000000
209              movi.64 v0, %s
210              div2.64 v0
211              movi.64 v0, %s
212              cmp.64 v0
213        description: Check div2.64 with -max and various values.
214        cases:
215          - values:
216              - "0"
217              - "0x0"
218            runner-options: ['run-failure']
219            description: Division by zero causes to exception.
220          - values:
221              - "1"
222              - "0x8000000000000000"
223          - values:
224              - "-1"
225              - "0x8000000000000000"
226          - values:
227              - "0x7FFFFFFFFFFFFFFF"
228              - "0xFFFFFFFFFFFFFFFF"
229          - values:
230              - "0x8000000000000000"
231              - "0x1"
232          - values:
233              - "-0x7FFFFFFFFFFFFFFF"
234              - "0x1"
235          - values:
236              - "-0x8000000000000000"
237              - "0x1"
238          - values:
239              - "0xFFFFFFFFFFFFFFFF"
240              - "0x8000000000000000"
241          - values:
242              - "-0xFFFFFFFFFFFFFFFF"
243              - "0x8000000000000000"
244
245      - file-name: "vals"
246        isa:
247          instructions:
248            - sig: div2.64 v:in:i64
249              acc: inout:i64
250              format: [op_v_8]
251        code-template: |
252          #
253              ldai.64 %s
254              movi.64 v0, %s
255              div2.64 v0
256              movi.64 v0, %s
257              cmp.64 v0
258        description: Check div2.64 with various values.
259        tags: ['tsan']
260        cases:
261          - values:
262              - "0x17EAACD3255811A1"
263              - "0xE8E4A070A"
264              - "0x1A4A25D"
265          - values:
266              - "0x33E7A3F9C4EB40AC"
267              - "0xE2BBF826B"
268              - "0x3A9ABE7"
269          - values:
270              - "0x2F4D5E0722AF40CC"
271              - "0x2C94DC312"
272              - "0x10F9F8C8"
273          - values:
274              - "0x96E12447F0B72B46"
275              - "0xEEA31086D"
276              - "0xFFFFFFFFF8F3B214"
277          - values:
278              - "0xD40751B27C6EFFAE"
279              - "0x21862396D"
280              - "0xFFFFFFFFEB038548"
281          - values:
282              - "0x48F08991A9F4AA07"
283              - "0x48601B6E8"
284              - "0x101FEDDA"
285          - values:
286              - "0x31EF39B9FC101C37"
287              - "0xA19115513"
288              - "0x4F1ED2F"
289          - values:
290              - "0x745FF968D0103641"
291              - "0x8297D9DAB"
292              - "0xE420CCA"
293          - values:
294              - "0xECE3CBD68839EA0F"
295              - "0x5B6B86256"
296              - "0xFFFFFFFFFCA7C8C3"
297          - values:
298              - "0x68BC11164D46497D"
299              - "0xE6EBA2BD5"
300              - "0x741C0A9"
301          - values: ["0x8000000000000000", "-1", "0x8000000000000000"]
302          - values: ["-9223372036854775808", "-1", "-9223372036854775808"]
303
304      - file-name: "op_v_8_exception"
305        isa:
306          instructions:
307            - sig: div2.64 v:in:i64
308              acc: inout:i64
309              format: [op_v_8]
310        tags: ['irtoc_ignore']
311        header-template: [ArithmeticException, main]
312        code-template: |
313            #
314                ldai.64 %s
315                movi.64 v0, 0
316            begin:
317                div2.64 v0
318            end:
319                ldai 1 # Should not reach this line
320                return
321
322            catch_AE:
323                ldai 0 # Expected panda.ArithmeticException
324                return
325
326            catch_all:
327                ldai 1 # Unexpected exception, test failed
328                return
329
330            .catch panda.ArithmeticException, begin, end, catch_AE
331            .catchall begin, end, catch_all
332        check-type: none
333        description: Check `div2.64` throws ArithmeticException when divides by zero.
334        cases:
335          - values: ["0"]
336          - values: ["1"]
337          - values: ["0x7FFFFFFF"]
338          - values: ["0x80000000"]
339          - values: ["0xFFFFFFFF"]
340          - values: ["0x100000000"]
341          - values: ["0x7FFFFFFFFFFFFFFF"]
342          - values: ["0x8000000000000000"]
343          - values: ["0xFFFFFFFFFFFFFFFF"]
344          - values: ["-1"]
345          - values: ["-0x7FFFFFFF"]
346          - values: ["-0x80000000"]
347          - values: ["-0xFFFFFFFF"]
348          - values: ["-0x100000000"]
349          - values: ["-0x7FFFFFFFFFFFFFFF"]
350          - values: ["-0x8000000000000000"]
351          - values: ["-0xFFFFFFFFFFFFFFFF"]
352
353      - file-name: "regs"
354        isa:
355          instructions:
356            - sig: div2.64 v:in:i64
357              acc: inout:i64
358              format: [op_v_8]
359        runner-options: ['compile-only']
360        code-template: |
361          #
362              div2.64 %s
363        check-type: none
364        description: Check div2.64 with various register numbers.
365        cases:
366          - values:
367              - "v255"
368          - values:
369              - "v256"
370            runner-options: ['compile-failure']
371
372      - file-name: "type"
373        tags: ["verifier"]
374        isa:
375          verification:
376            - acc_type
377            - v1_type
378        runner-options: ['verifier-failure', 'verifier-config']
379        header-template: []
380        code-template: |
381          .record T {}
382          .function i32 main() {
383              %s
384              *s
385              div2.64 v0
386        check-type: exit-positive
387        description: Check 'div2.64' with incorrect accumulator and/or register types.
388        cases:
389          - values:
390            - ldai 0
391          - values:
392            - ldai.64 0
393            id: acc_ok
394          - values:
395            - fldai 0
396          - values:
397            - fldai.64 0
398          - values:
399            - lda.null
400          - values:
401            - |
402              #
403                  movi v1, 0
404                  newarr v1, v1, i32[]
405                  lda.obj v1
406          - values:
407            - lda.str "0"
408          - values:
409            - lda.type T
410          - values:
411            - |
412              #
413                  newobj v1, T
414                  lda.obj v1
415        template-cases:
416          - values:
417            - movi v0, 1
418          - values:
419            - movi.64 v0, 1
420            exclude: [acc_ok]
421          - values:
422            - fmovi v0, 1
423          - values:
424            - fmovi.64 v0, 1
425          - values:
426            - mov.null v0
427          - values:
428            - |
429              #
430                  movi v0, 0
431                  newarr v0, v0, i32[]
432          - values:
433            - |
434              #
435                  lda.str "0"
436                  sta.obj v0
437          - values:
438            - |
439              #
440                  lda.type T
441                  sta.obj v0
442          - values:
443            - newobj v0, T
444
445
446      - file-name: uninitialized_regs
447        isa:
448          instructions:
449            - sig: div2.64 v:in:i64
450              acc: inout:i64
451              format: [op_v_8]
452        description: Check 'div2.64' with uninitialized registers.
453        tags: ["verifier"]
454        runner-options: ['verifier-failure', 'verifier-config']
455        code-template: |
456          #
457              %s
458              *s
459              div2.64 *s
460        check-type: exit-positive
461        template-cases:
462          - values:
463              - ""
464          - values:
465              - ldai.64 0
466            exclude: [init]
467        cases:
468          - values:
469              - ""
470              - v0
471          - values:
472              - movi.64 v1, 0
473              - v1
474            id: init
475          - values:
476              - ""
477              - v8
478          - values:
479              - ""
480              - v15
481          - values:
482              - movi.64 v15, 0
483              - v15
484            id: init
485