• 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: "add2"
17    isa:
18      title: Two address binary operation on accumulator
19      description: >
20        Perform specified binary operation on accumulator and register and store result into accumulator
21      exceptions:
22        - x_none
23    commands:
24      - file-name: "op_vs_8_zero"
25        isa:
26          instructions:
27            - sig: add2 v:in:i32
28              acc: inout:i32
29              format: [op_v_8]
30        code-template: |
31          #
32              ldai 0
33              movi v0, %s
34              add2 v0
35              movi v0, %s
36              jne v0, set_failure
37              ldai 0
38              jmp fall_through
39          set_failure:
40              ldai 1
41          fall_through:
42        description: Check add2 with zero and various values.
43        cases:
44          - values:
45              - "0"
46              - "0"
47          - values:
48              - "1"
49              - "1"
50          - values:
51              - "-1"
52              - "-1"
53          - values:
54              - "0x7FFFFFFF"
55              - "0x7FFFFFFF"
56          - values:
57              - "0x80000000"
58              - "0x80000000"
59          - values:
60              - "-0x7FFFFFFF"
61              - "-0x7FFFFFFF"
62          - values:
63              - "-0x80000000"
64              - "-0x80000000"
65          - values:
66              - "0xFFFFFFFF"
67              - "0xFFFFFFFF"
68          - values:
69              - "-0xFFFFFFFF"
70              - "-0xFFFFFFFF"
71
72      - file-name: "op_vs_8_pone"
73        isa:
74          instructions:
75            - sig: add2 v:in:i32
76              acc: inout:i32
77              format: [op_v_8]
78        code-template: |
79            #
80                ldai 1
81                movi v0, %s
82                add2 v0
83                movi v0, %s
84                jne v0, set_failure
85                ldai 0
86                jmp fall_through
87            set_failure:
88                ldai 1
89            fall_through:
90        description: Check add2 with +1 and various values.
91        cases:
92            - values:
93                - "0"
94                - "1"
95            - values:
96                - "1"
97                - "2"
98            - values:
99                - "-1"
100                - "0"
101            - values:
102                - "0x7FFFFFFF"
103                - "0x80000000"
104              tags: ["clang_release_sanitizer"]
105              bugid: ["966"]
106            - values:
107                - "0x80000000"
108                - "0x80000001"
109            - values:
110                - "-0x7FFFFFFF"
111                - "-0x7FFFFFFE"
112            - values:
113                - "-0x80000000"
114                - "-0x7FFFFFFF"
115            - values:
116                - "0xFFFFFFFF"
117                - "0"
118            - values:
119                - "-0xFFFFFFFF"
120                - "-0xFFFFFFFE"
121      - file-name: "op_vs_8_none"
122        isa:
123          instructions:
124            - sig: add2 v:in:i32
125              acc: inout:i32
126              format: [op_v_8]
127        code-template: |
128            #
129                ldai -1
130                movi v0, %s
131                add2 v0
132                movi v0, %s
133                jne v0, set_failure
134                ldai 0
135                jmp fall_through
136            set_failure:
137                ldai 1
138            fall_through:
139        description: Check add2 with -1 and various values.
140        cases:
141            - values:
142                - "0"
143                - "-1"
144            - values:
145                - "1"
146                - "0"
147            - values:
148                - "-1"
149                - "-2"
150            - values:
151                - "0x7FFFFFFF"
152                - "0x7FFFFFFE"
153            - values:
154                - "0x80000000"
155                - "0x7FFFFFFF"
156              tags: ["clang_release_sanitizer"]
157              bugid: ["966"]
158            - values:
159                - "-0x7FFFFFFF"
160                - "-0x80000000"
161            - values:
162                - "-0x80000000"
163                - "-0x80000001"
164              tags: ["clang_release_sanitizer"]
165              bugid: ["966"]
166            - values:
167                - "0xFFFFFFFF"
168                - "-2"
169            - values:
170                - "-0xFFFFFFFF"
171                - "0"
172      - file-name: "op_vs_8_pmax"
173        isa:
174          instructions:
175            - sig: add2 v:in:i32
176              acc: inout:i32
177              format: [op_v_8]
178        code-template: |
179            #
180                ldai 0x7FFFFFFF
181                movi v0, %s
182                add2 v0
183                movi v0, %s
184                jne v0, set_failure
185                ldai 0
186                jmp fall_through
187            set_failure:
188                ldai 1
189            fall_through:
190        description: Check add2 with +max and various values.
191        cases:
192            - values:
193                - "0"
194                - "0x7fffffff"
195            - values:
196                - "1"
197                - "0x80000000"
198              tags: ["clang_release_sanitizer"]
199              bugid: ["966"]
200            - values:
201                - "-1"
202                - "0x7FFFFFFE"
203            - values:
204                - "0x7FFFFFFF"
205                - "0xFFFFFFFE"
206              tags: ["clang_release_sanitizer"]
207              bugid: ["966"]
208            - values:
209                - "0x80000000"
210                - "0xFFFFFFFF"
211            - values:
212                - "-0x7FFFFFFF"
213                - "0"
214            - values:
215                - "-0x80000000"
216                - "0xFFFFFFFF"
217            - values:
218                - "0xFFFFFFFF"
219                - "0x7FFFFFFE"
220            - values:
221                - "-0xFFFFFFFF"
222                - "0x80000000"
223              tags: ["clang_release_sanitizer"]
224              bugid: ["966"]
225
226      - file-name: "op_vs_8_nmax"
227        isa:
228          instructions:
229            - sig: add2 v:in:i32
230              acc: inout:i32
231              format: [op_v_8]
232        code-template: |
233            #
234                ldai -0x80000000
235                movi v0, %s
236                add2 v0
237                movi v0, %s
238                jne v0, set_failure
239                ldai 0
240                jmp fall_through
241            set_failure:
242                ldai 1
243            fall_through:
244        description: Check add2 with -max and various values.
245        cases:
246            - values:
247                - "0"
248                - "0x80000000"
249            - values:
250                - "1"
251                - "0x80000001"
252            - values:
253                - "-1"
254                - "0x7FFFFFFF"
255              tags: ["clang_release_sanitizer"]
256              bugid: ["966"]
257            - values:
258                - "0x7FFFFFFF"
259                - "-1"
260            - values:
261                - "0x80000000"
262                - "0"
263              tags: ["clang_release_sanitizer"]
264              bugid: ["966"]
265            - values:
266                - "-0x7FFFFFFF"
267                - "1"
268              tags: ["clang_release_sanitizer"]
269              bugid: ["966"]
270            - values:
271                - "-0x80000000"
272                - "0"
273              tags: ["clang_release_sanitizer"]
274              bugid: ["966"]
275            - values:
276                - "0xFFFFFFFF"
277                - "0x7FFFFFFF"
278              tags: ["clang_release_sanitizer"]
279              bugid: ["966"]
280            - values:
281                - "-0xFFFFFFFF"
282                - "-0x7FFFFFFF"
283
284      - file-name: "vals"
285        isa:
286          instructions:
287            - sig: add2 v:in:i32
288              acc: inout:i32
289              format: [op_v_8]
290        tags: ['tsan']
291        code-template: |
292            #
293                ldai %s
294                movi v0, %s
295                add2 v0
296                movi v0, %s
297                jne v0, set_failure
298                ldai 0
299                jmp fall_through
300            set_failure:
301                ldai 1
302            fall_through:
303        description: Check add2 with various values.
304        cases:
305            - values:
306                - "0x455ed8f5"
307                - "0xfe61fbdd"
308                - "0x43c0d4d2"
309            - values:
310                - "0xc3e6a70"
311                - "0xae9b1e98"
312                - "0xbad98908"
313            - values:
314                - "0xd2670242"
315                - "0xef691c0f"
316                - "0xc1d01e51"
317            - values:
318                - "0xf6d0f4f8"
319                - "0x4ee5e5df"
320                - "0x45b6dad7"
321            - values:
322                - "0xded7f996"
323                - "0xd94428a1"
324                - "0xb81c2237"
325            - values:
326                - "0x262d5e15"
327                - "0x1a85200d"
328                - "0x40b27e22"
329            - values:
330                - "0x4bb930e4"
331                - "0x416b3a07"
332                - "0x8d246aeb"
333              tags: ["clang_release_sanitizer"]
334              bugid: ["966"]
335            - values:
336                - "0x61a80560"
337                - "0xb076ee9"
338                - "0x6caf7449"
339            - values:
340                - "0x42bd8cd3"
341                - "0x9e28b8b6"
342                - "0xe0e64589"
343            - values:
344                - "0x3c0a62e1"
345                - "0xb18cfa"
346                - "0x3cbbefdb"
347
348      - file-name: "vals_mod32_1"
349        bugid: ['1324', '2072']
350        tags: ['verifier']
351        runner-options: ['verifier-failure', 'verifier-debug-config']
352        isa:
353          instructions:
354            - sig: add2 v:in:i32
355              acc: inout:i32
356              format: [op_v_8]
357        code-template: |
358          #
359              ldai %s
360              movi v0, %s
361              add2 v0
362              movi.64 v0, %s
363              cmp.64 v0
364        description: Check add2 with incorrect register and accumulator type.
365        cases:
366          - values:
367              - "0x7FFFFFFF"
368              - "0x7FFFFFFF"
369              - "0xFFFFFFFFFFFFFFFE"
370            tags: ["clang_release_sanitizer"]
371            bugid: ["966"]
372          - values:
373              - "0x7FFFFFFF"
374              - "0x80000000"
375              - "0xFFFFFFFFFFFFFFFF"
376          - values:
377              - "0x80000000"
378              - "0x80000000"
379              - "0"
380            tags: ["clang_release_sanitizer"]
381            bugid: ["966"]
382
383      - file-name: "vals_mod32_2"
384        bugid: ['1324']
385        tags: ['verifier']
386        runner-options: ['verifier-failure', 'verifier-debug-config']
387        isa:
388          instructions:
389            - sig: add2 v:in:i32
390              acc: inout:i32
391              format: [op_v_8]
392        code-template: |
393            #
394                ldai.64 %s
395                movi.64 v0, %s
396                add2 v0
397                movi.64 v0, %s
398                cmp.64 v0
399        description: Check add2 with incorrect register and accumulator type.
400        cases:
401            - values:
402                - "0x17FFFFFFF"
403                - "0x17FFFFFFF"
404                - "0xFFFFFFFFFFFFFFFE"
405              tags: ["clang_release_sanitizer"]
406              bugid: ["966"]
407            - values:
408                - "0x777777777FFFFFFF"
409                - "0x1111111180000000"
410                - "0xFFFFFFFFFFFFFFFF"
411            - values:
412                - "0x180000000"
413                - "0x180000000"
414                - "0"
415              tags: ["clang_release_sanitizer"]
416              bugid: ["966"]
417
418      - file-name: "regs"
419        isa:
420          instructions:
421            - sig: add2 v:in:i32
422              acc: inout:i32
423              format: [op_v_8]
424        runner-options: ['compile-only']
425        code-template: |
426            #
427                add2 %s
428        check-type: none
429        description: Check add2 with various register numbers.
430        cases:
431            - values:
432                - "v255"
433            - values:
434                - "v256"
435              runner-options: ['compile-failure']
436
437      - file-name: "type"
438        bugid: ["964", "966"]
439        tags: ['verifier']
440        isa:
441          instructions:
442            - sig: add2 v:in:i32
443              acc: inout:i32
444              format: [op_v_8]
445          verification:
446            - acc_type
447            - v1_type
448        runner-options: ['verifier-failure', 'verifier-debug-config']
449        header-template: []
450        code-template: |
451            #
452            .record A {}
453            .record B {}
454            .record panda.String <external>
455            .record panda.Object <external>
456            .function i32 main() {
457                %s
458                *s
459                add2 v0
460                ldai 0
461        check-type: no-check
462        description: Check add2 with incorrect register and accumulator type.
463        template-cases:
464          - values:
465              - ldai.64 0
466          - values:
467              - fldai.64 0
468          - values:
469              - |
470                #
471                    lda.type B
472          - values:
473              - |
474                #
475                    lda.type B[]
476          - values:
477              - |
478                #
479                    lda.type panda.String
480          - values:
481              - |
482                #
483                    lda.type panda.Object
484          - values:
485              - |
486                #
487                    movi v0, 10
488                    newarr v0, v0, i32[]
489                    lda.obj v0
490          - values:
491              - lda.null
492          - values:
493              - ldai 0
494            exclude: [val]
495        cases:
496          - values:
497              - movi.64 v1, 0
498          - values:
499              - fmovi.64 v1, 0
500          - values:
501              - |
502                #
503                    lda.type A
504                    sta.obj v1
505          - values:
506              - |
507                #
508                    lda.type A[]
509                    sta.obj v1
510
511          - values:
512              - |
513                #
514                    lda.type panda.String
515                    sta.obj v1
516          - values:
517              - |
518                #
519                    lda.type panda.Object
520                    sta.obj v1
521          - values:
522              - |
523                #
524                    movi v1, 10
525                    newarr v1, v1, f64[]
526          - values:
527              - mov.null v1
528          - values:
529              - movi v1, 0
530            id: val
531
532      - file-name: uninitialized_regs
533        isa:
534          instructions:
535            - sig: add2 v:in:i32
536              acc: inout:i32
537              format: [op_v_8]
538        description: Check add2 with uninitialized registers.
539        tags: ['verifier']
540        runner-options: ['verifier-failure', 'verifier-debug-config']
541        header-template: []
542        code-template: |
543          #
544          .function i32 main() {
545              %s
546              *s
547              add2 *s
548              ldai 0
549        check-type: no-check
550        template-cases:
551          - values:
552              - ''
553          - values:
554              - ldai 0
555            exclude: [init]
556
557        cases:
558          - values:
559              - ''
560              - v0
561          - values:
562              - movi v1, 0
563              - v1
564            id: init
565          - values:
566              - ''
567              - v8
568          - values:
569              - ''
570              - v15
571          - values:
572              - movi v15, 0
573              - v15
574            id: init
575