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