• 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
14---
15definitions: []
16tests:
17  - file-name: add
18    isa:
19      title: Three address binary operation
20      description: Perform specified binary operation on two registers and store result
21        into accumulator
22      exceptions:
23        - x_none
24    commands:
25      - file-name: op_vs1_4_vs2_4_zero
26        isa:
27          instructions:
28            - sig: add v1:in:i32, v2:in:i32
29              acc: out:i32
30              format: [op_v1_4_v2_4]
31        code-template: |
32          #
33              movi v0, 0
34              movi v1, %s
35              add v0, v1
36              movi v0, %s
37              jne v0, set_failure
38              ldai 0
39              jmp fall_through
40          set_failure:
41              ldai 1
42          fall_through:
43        description: Check add with zero and various values.
44        cases:
45          - values:
46              - '0'
47              - '0'
48          - values:
49              - '1'
50              - '1'
51          - values:
52              - "-1"
53              - "-1"
54          - values:
55              - '0x7FFFFFFF'
56              - '0x7FFFFFFF'
57          - values:
58              - '0x80000000'
59              - '0x80000000'
60          - values:
61              - "-0x7FFFFFFF"
62              - "-0x7FFFFFFF"
63          - values:
64              - "-0x80000000"
65              - "-0x80000000"
66          - values:
67              - '0xFFFFFFFF'
68              - '0xFFFFFFFF'
69          - values:
70              - "-0xFFFFFFFF"
71              - "-0xFFFFFFFF"
72      - file-name: op_vs1_4_vs2_4_pone
73        isa:
74          instructions:
75            - sig: add v1:in:i32, v2:in:i32
76              acc: out:i32
77              format: [op_v1_4_v2_4]
78        code-template: |
79          #
80              movi v0, 1
81              movi v1, %s
82              add v0, v1
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 add 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_vs1_4_vs2_4_none
122        isa:
123          instructions:
124            - sig: add v1:in:i32, v2:in:i32
125              acc: out:i32
126              format: [op_v1_4_v2_4]
127        code-template: |
128          #
129              movi v0, -1
130              movi v1, %s
131              add v0, v1
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 add 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_vs1_4_vs2_4_pmax
173        isa:
174          instructions:
175            - sig: add v1:in:i32, v2:in:i32
176              acc: out:i32
177              format: [op_v1_4_v2_4]
178        code-template: |
179          #
180              movi v0, 0x7FFFFFFF
181              movi v1, %s
182              add v0, v1
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 add 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      - file-name: op_vs1_4_vs2_4_nmax
226        isa:
227          instructions:
228            - sig: add v1:in:i32, v2:in:i32
229              acc: out:i32
230              format: [op_v1_4_v2_4]
231        code-template: |
232          #
233              movi v0, -0x80000000
234              movi v1, %s
235              add v0, v1
236              movi v0, %s
237              jne v0, set_failure
238              ldai 0
239              jmp fall_through
240          set_failure:
241              ldai 1
242          fall_through:
243        description: Check add with -max and various values.
244        cases:
245          - values:
246              - '0'
247              - '0x80000000'
248          - values:
249              - '1'
250              - '0x80000001'
251          - values:
252              - "-1"
253              - '0x7FFFFFFF'
254            tags: ["clang_release_sanitizer"]
255            bugid: ["966"]
256          - values:
257              - '0x7FFFFFFF'
258              - "-1"
259          - values:
260              - '0x80000000'
261              - '0'
262            tags: ["clang_release_sanitizer"]
263            bugid: ["966"]
264          - values:
265              - "-0x7FFFFFFF"
266              - '1'
267            tags: ["clang_release_sanitizer"]
268            bugid: ["966"]
269          - values:
270              - "-0x80000000"
271              - '0'
272            tags: ["clang_release_sanitizer"]
273            bugid: ["966"]
274          - values:
275              - '0xFFFFFFFF'
276              - '0x7FFFFFFF'
277            tags: ["clang_release_sanitizer"]
278            bugid: ["966"]
279          - values:
280              - "-0xFFFFFFFF"
281              - "-0x7FFFFFFF"
282      - file-name: vals
283        isa:
284          instructions:
285            - sig: add v1:in:i32, v2:in:i32
286              acc: out:i32
287              format: [op_v1_4_v2_4]
288        code-template: |
289          #
290              movi v0, %s
291              movi v1, %s
292              add v0, v1
293              movi v0, %s
294              jne v0, set_failure
295              ldai 0
296              jmp fall_through
297          set_failure:
298              ldai 1
299          fall_through:
300        description: Check add with various values.
301        tags: ['tsan']
302        cases:
303          - values:
304              - '0x455ed8f5'
305              - '0xfe61fbdd'
306              - '0x43c0d4d2'
307          - values:
308              - '0xc3e6a70'
309              - '0xae9b1e98'
310              - '0xbad98908'
311          - values:
312              - '0xd2670242'
313              - '0xef691c0f'
314              - '0xc1d01e51'
315          - values:
316              - '0xf6d0f4f8'
317              - '0x4ee5e5df'
318              - '0x45b6dad7'
319          - values:
320              - '0xded7f996'
321              - '0xd94428a1'
322              - '0xb81c2237'
323          - values:
324              - '0x262d5e15'
325              - '0x1a85200d'
326              - '0x40b27e22'
327          - values:
328              - '0x4bb930e4'
329              - '0x416b3a07'
330              - '0x8d246aeb'
331            tags: ["clang_release_sanitizer"]
332            bugid: ["966"]
333          - values:
334              - '0x61a80560'
335              - '0xb076ee9'
336              - '0x6caf7449'
337          - values:
338              - '0x42bd8cd3'
339              - '0x9e28b8b6'
340              - '0xe0e64589'
341          - values:
342              - '0x3c0a62e1'
343              - '0xb18cfa'
344              - '0x3cbbefdb'
345      - file-name: vals_mod32_1
346        bugid: ['1324', '2072']
347        tags: ['verifier']
348        runner-options: ['verifier-failure', 'verifier-debug-config']
349        isa:
350          instructions:
351            - sig: add v1:in:i32, v2:in:i32
352              acc: out:i32
353              format: [op_v1_4_v2_4]
354        code-template: |
355          #
356              movi v0, %s
357              movi v1, %s
358              add v0, v1
359              movi.64 v0, %s
360              cmp.64 v0
361        description: Check add with incorrect register type.
362        cases:
363          - values:
364              - '0x7FFFFFFF'
365              - '0x7FFFFFFF'
366              - '0xFFFFFFFFFFFFFFFE'
367            tags: ["clang_release_sanitizer"]
368            bugid: ["966"]
369          - values:
370              - '0x7FFFFFFF'
371              - '0x80000000'
372              - '0xFFFFFFFFFFFFFFFF'
373          - values:
374              - '0x80000000'
375              - '0x80000000'
376              - '0'
377            tags: ["clang_release_sanitizer"]
378            bugid: ["966"]
379      - file-name: vals_mod32_2
380        bugid: ['1324']
381        tags: ['verifier']
382        runner-options: ['verifier-failure', 'verifier-debug-config']
383        isa:
384          instructions:
385            - sig: add v1:in:i32, v2:in:i32
386              acc: out:i32
387              format: [op_v1_4_v2_4]
388        code-template: |
389          #
390              movi.64 v0, %s
391              movi.64 v1, %s
392              add v0, v1
393              movi.64 v0, %s
394              cmp.64 v0
395        description: Check add with incorrect register type.
396        cases:
397          - values:
398              - '0x17FFFFFFF'
399              - '0x17FFFFFFF'
400              - '0xFFFFFFFFFFFFFFFE'
401            tags: ["clang_release_sanitizer"]
402            bugid: ["966"]
403          - values:
404              - '0x777777777FFFFFFF'
405              - '0x1111111180000000'
406              - '0xFFFFFFFFFFFFFFFF'
407          - values:
408              - '0x180000000'
409              - '0x180000000'
410              - '0'
411            tags: ["clang_release_sanitizer"]
412            bugid: ["966"]
413      - file-name: regs
414        isa:
415          instructions:
416            - sig: add v1:in:i32, v2:in:i32
417              acc: out:i32
418              format: [op_v1_4_v2_4]
419        runner-options:
420          - compile-only
421        code-template: |
422          #
423              add %s, %s
424        check-type: none
425        description: Check add with various register numbers.
426        cases:
427          - values:
428              - v0
429              - v15
430          - values:
431              - v0
432              - v16
433            runner-options:
434              - compile-failure
435          - values:
436              - v15
437              - v0
438          - values:
439              - v16
440              - v0
441            runner-options:
442              - compile-failure
443
444      - file-name: type
445        isa:
446          instructions:
447            - sig: add v1:in:i32, v2:in:i32
448              acc: out:i32
449              format: [op_v1_4_v2_4]
450          verification:
451            - v1_type
452            - v2_type
453        tags: ['verifier']
454        runner-options: ['verifier-failure', 'verifier-debug-config']
455        header-template: []
456        code-template: |
457          #
458          .record A {}
459          .record B {}
460          .record panda.String <external>
461          .record panda.Object <external>
462          .function i32 main() {
463              %s
464              *s
465              add v0, v1
466              ldai 0
467        check-type: no-check
468        description: Check add with incorrect register type.
469        template-cases:
470          - values:
471              - movi.64 v0, 0
472          - values:
473              - fmovi.64 v0, 0
474          - values:
475              - |
476                #
477                    lda.type B
478                    sta.obj v0
479          - values:
480              - |
481                #
482                    lda.type B[]
483                    sta.obj v0
484          - values:
485              - |
486                #
487                    lda.type panda.String
488                    sta.obj v0
489          - values:
490              - |
491                #
492                    lda.type panda.Object
493                    sta.obj v0
494          - values:
495              - |
496                #
497                    movi v0, 10
498                    newarr v0, v0, i32[]
499          - values:
500              - mov.null v0
501          - values:
502              - movi v0, 0
503            exclude: [val]
504        cases:
505          - values:
506              - movi.64 v1, 0
507          - values:
508              - fmovi.64 v1, 0
509          - values:
510              - |
511                #
512                    lda.type A
513                    sta.obj v1
514          - values:
515              - |
516                #
517                    lda.type A[]
518                    sta.obj v1
519
520          - values:
521              - |
522                #
523                    lda.type panda.String
524                    sta.obj v1
525          - values:
526              - |
527                #
528                    lda.type panda.Object
529                    sta.obj v1
530          - values:
531              - |
532                #
533                    movi v1, 10
534                    newarr v1, v1, f64[]
535          - values:
536              - mov.null v1
537          - values:
538              - movi v1, 0
539            id: val
540
541      - file-name: uninitialized_regs
542        isa:
543          instructions:
544            - sig: add v1:in:i32, v2:in:i32
545              acc: out:i32
546              format: [op_v1_4_v2_4]
547        description: Check add with uninitialized registers.
548        tags: ['verifier']
549        runner-options: ['verifier-failure', 'verifier-debug-config']
550        header-template: []
551        code-template: |
552            #
553            .function i32 main() {
554                %s
555                *s
556                add %s, *s
557                ldai 0
558        check-type: no-check
559        template-cases:
560          - values:
561              - ''
562              - v0
563          - values:
564              - movi v0, 0
565              - v0
566            exclude: [init]
567          - values:
568              - ''
569              - v7
570          - values:
571              - ''
572              - v15
573          - values:
574              - 'movi v15, 0'
575              - v15
576            exclude: [init]
577        cases:
578          - values:
579              - ''
580              - v1
581          - values:
582              - movi v1, 0
583              - v1
584            id: init
585          - values:
586              - ''
587              - v8
588          - values:
589              - ''
590              - v14
591