• 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: "or"
17    isa:
18      title: Three address binary operation
19      description: Perform specified binary operation on two registers and store result
20          into accumulator
21      exceptions:
22          - x_none
23    commands:
24      - file-name: "op_vs1_4_vs2_4_zero"
25        isa:
26          instructions:
27            - sig: or v1:in:i32, v2:in:i32
28              acc: out:i32
29              prefix: bit
30              format: [pref_op_v1_4_v2_4]
31        code-template: |
32          #
33              movi v0,0
34              movi v1, %s
35              mov v1, v0
36              or v0, v1
37              mov v0, v1
38              jne v0, set_failure
39              ldai 0
40              jmp fall_through
41          set_failure:
42              ldai 1
43          fall_through:
44        description: Check 'or' with zero and various values.
45        cases:
46          - values:
47              - "0"
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_vs1_4_vs2_4_pone"
66        isa:
67          instructions:
68            - sig: or v1:in:i32, v2:in:i32
69              acc: out:i32
70              prefix: bit
71              format: [pref_op_v1_4_v2_4]
72        code-template: |
73          #
74              movi v0,1
75              movi v1, %s
76              or v0, v1
77              movi v0, %s
78              jne v0, set_failure
79              ldai 0
80              jmp fall_through
81          set_failure:
82              ldai 1
83          fall_through:
84        description: Check 'or' with +1 and various values.
85        cases:
86          - values:
87              - "0"
88              - "1"
89          - values:
90              - "1"
91              - "1"
92          - values:
93              - "-1"
94              - "-1"
95          - values:
96              - "0x7FFFFFFF"
97              - "0x7FFFFFFF"
98          - values:
99              - "0x80000000"
100              - "0x80000001"
101          - values:
102              - "-0x7FFFFFFF"
103              - "-0x7FFFFFFF"
104          - values:
105              - "-0x80000000"
106              - "0x80000001"
107          - values:
108              - "0xFFFFFFFF"
109              - "0xFFFFFFFF"
110          - values:
111              - "-0xFFFFFFFF"
112              - "1"
113      - file-name: "op_vs1_4_vs2_4_none"
114        isa:
115          instructions:
116            - sig: or v1:in:i32, v2:in:i32
117              acc: out:i32
118              prefix: bit
119              format: [pref_op_v1_4_v2_4]
120        code-template: |
121          #
122              movi v0,-1
123              movi v1, %s
124              or v0, v1
125              movi v0, -1
126              jne v0, set_failure
127              ldai 0
128              jmp fall_through
129          set_failure:
130              ldai 1
131          fall_through:
132        description: Check 'or' with -1 and various values.
133        cases:
134          - values:
135              - "0"
136          - values:
137              - "1"
138          - values:
139              - "-1"
140          - values:
141              - "0x7FFFFFFF"
142          - values:
143              - "0x80000000"
144          - values:
145              - "-0x7FFFFFFF"
146          - values:
147              - "-0x80000000"
148          - values:
149              - "0xFFFFFFFF"
150          - values:
151              - "-0xFFFFFFFF"
152
153      - file-name: "op_vs1_4_vs2_4_pmax"
154        isa:
155          instructions:
156            - sig: or v1:in:i32, v2:in:i32
157              acc: out:i32
158              prefix: bit
159              format: [pref_op_v1_4_v2_4]
160        code-template: |
161          #
162              movi v0,0x7FFFFFFF
163              movi v1, %s
164              or v0, v1
165              movi v0, %s
166              jne v0, set_failure
167              ldai 0
168              jmp fall_through
169          set_failure:
170              ldai 1
171          fall_through:
172        description: Check 'or' with +max and various values.
173        cases:
174          - values:
175              - "0"
176              - "0x7FFFFFFF"
177          - values:
178              - "1"
179              - "0x7FFFFFFF"
180          - values:
181              - "-1"
182              - "0xFFFFFFFF"
183          - values:
184              - "0x7FFFFFFF"
185              - "0x7FFFFFFF"
186          - values:
187              - "0x80000000"
188              - "0xFFFFFFFF"
189          - values:
190              - "-0x7FFFFFFF"
191              - "0xFFFFFFFF"
192          - values:
193              - "-0x80000000"
194              - "0xFFFFFFFF"
195          - values:
196              - "0xFFFFFFFF"
197              - "0xFFFFFFFF"
198          - values:
199              - "-0xFFFFFFFF"
200              - "0x7FFFFFFF"
201
202      - file-name: "op_vs1_4_vs2_4_nmax"
203        isa:
204          instructions:
205            - sig: or v1:in:i32, v2:in:i32
206              acc: out:i32
207              prefix: bit
208              format: [pref_op_v1_4_v2_4]
209        code-template: |
210          #
211              movi v0,-0x80000000
212              movi v1, %s
213              or v0, v1
214              movi v0, %s
215              jne v0, set_failure
216              ldai 0
217              jmp fall_through
218          set_failure:
219              ldai 1
220          fall_through:
221        description: Check 'or' with -max and various values.
222        cases:
223          - values:
224              - "0"
225              - "0x80000000"
226          - values:
227              - "1"
228              - "0x80000001"
229          - values:
230              - "-1"
231              - "0xFFFFFFFF"
232          - values:
233              - "0x7FFFFFFF"
234              - "0xFFFFFFFF"
235          - values:
236              - "0x80000000"
237              - "0x80000000"
238          - values:
239              - "-0x7FFFFFFF"
240              - "0x80000001"
241          - values:
242              - "-0x80000000"
243              - "0x80000000"
244          - values:
245              - "0xFFFFFFFF"
246              - "0xFFFFFFFF"
247          - values:
248              - "-0xFFFFFFFF"
249              - "0x80000001"
250
251      - file-name: "vals"
252        isa:
253          instructions:
254            - sig: or v1:in:i32, v2:in:i32
255              acc: out:i32
256              prefix: bit
257              format: [pref_op_v1_4_v2_4]
258        code-template: |
259          #
260              movi v0,%s
261              movi v1, %s
262              or v0, v1
263              movi v0, %s
264              jne v0, set_failure
265              ldai 0
266              jmp fall_through
267          set_failure:
268              ldai 1
269          fall_through:
270        description: Check 'or' with various values.
271        tags: ['tsan']
272        cases:
273          - values:
274              - "0xB98B551D"
275              - "0x86224577"
276              - "0xBFAB557F"
277          - values:
278              - "0xA395AE93"
279              - "0x7B843B94"
280              - "0xFB95BF97"
281          - values:
282              - "0xE8C8F0B9"
283              - "0x67A71796"
284              - "0xEFEFF7BF"
285          - values:
286              - "0x3E943F53"
287              - "0x46DDAA06"
288              - "0x7EDDBF57"
289          - values:
290              - "0xEB55B86B"
291              - "0xF33CDAA5"
292              - "0xFB7DFAEF"
293          - values:
294              - "0x26EA0C73"
295              - "0x76955D83"
296              - "0x76FF5DF3"
297          - values:
298              - "0x76E497AA"
299              - "0x8626722"
300              - "0x7EE6F7AA"
301          - values:
302              - "0xE645F7B6"
303              - "0xE78A8A5"
304              - "0xEE7DFFB7"
305          - values:
306              - "0x5193B1ED"
307              - "0x51FAC7A5"
308              - "0x51FBF7ED"
309          - values:
310              - "0x67A70527"
311              - "0x54B76EBF"
312              - "0x77B76FBF"
313
314      - file-name: "vals_mod32_1"
315        bugid: ['1324', '2075']
316        tags: ['verifier']
317        runner-options: ['verifier-failure', 'verifier-config']
318        isa:
319          instructions:
320            - sig: or v1:in:i32, v2:in:i32
321              acc: out:i32
322              prefix: bit
323              format: [pref_op_v1_4_v2_4]
324        code-template: |
325          #
326              movi.64 v0, %s
327              movi.64 v1, %s
328              or v0, v1
329              movi.64 v0, %s
330              cmp.64 v0
331        description: Check 'or' with incorrect register types.
332        cases:
333          - values:
334              - "0x17FFFFFFF"
335              - "0x17FFFFFFF"
336              - "0x7FFFFFFF"
337          - values:
338              - "0x77777777FFFFFFFF"
339              - "0x1111111180000000"
340              - "0xFFFFFFFFFFFFFFFF"
341          - values:
342              - "0x180000000"
343              - "0x180000000"
344              - "0xFFFFFFFF80000000"
345
346      - file-name: "regs"
347        isa:
348          instructions:
349            - sig: or v1:in:i32, v2:in:i32
350              acc: out:i32
351              prefix: bit
352              format: [pref_op_v1_4_v2_4]
353        runner-options: ['compile-only']
354        code-template: |
355          #
356              or %s, %s
357        check-type: none
358        description: Check 'or' with various register numbers.
359        cases:
360          - values:
361              - v0
362              - v15
363          - values:
364              - v0
365              - v16
366            runner-options:
367              - compile-failure
368          - values:
369              - v15
370              - v0
371          - values:
372              - v16
373              - v0
374            runner-options:
375              - compile-failure
376
377      - file-name: type
378        isa:
379          verification:
380            - v1_type
381            - v2_type
382        tags: ['verifier']
383        runner-options: ['verifier-failure', 'verifier-config']
384        header-template: []
385        code-template: |
386          #
387          .record A {}
388          .record B {}
389          .record panda.String <external>
390          .record panda.Object <external>
391          .function i32 main() {
392              %s
393              *s
394              or v0, v1
395        check-type: exit-positive
396        description: Check 'or' with incorrect register types.
397        template-cases:
398          - values:
399              - movi v0, 0
400            exclude: [val]
401          - values:
402              - movi.64 v0, 0
403          - values:
404              - fmovi v0, 0
405            bugid: ['7315']
406          - values:
407              - fmovi.64 v0, 0
408          - values:
409              - |
410                #
411                    lda.type B
412                    sta.obj v0
413          - values:
414              - |
415                #
416                    lda.type B[]
417                    sta.obj v0
418          - values:
419              - |
420                #
421                    lda.type panda.String
422                    sta.obj v0
423          - values:
424              - |
425                #
426                    lda.type panda.Object
427                    sta.obj v0
428          - values:
429              - |
430                #
431                    movi v0, 10
432                    newarr v0, v0, i32[]
433          - values:
434              - mov.null v0
435        cases:
436          - values:
437              - movi v1, 0
438            id: val
439          - values:
440              - movi.64 v1, 0
441          - values:
442              - fmovi v1, 0
443            bugid: ['7315']
444          - values:
445              - fmovi.64 v1, 0
446          - values:
447              - |
448                #
449                    lda.type A
450                    sta.obj v1
451          - values:
452              - |
453                #
454                    lda.type A[]
455                    sta.obj v1
456
457          - values:
458              - |
459                #
460                    lda.type panda.String
461                    sta.obj v1
462          - values:
463              - |
464                #
465                    lda.type panda.Object
466                    sta.obj v1
467          - values:
468              - |
469                #
470                    movi v1, 10
471                    newarr v1, v1, f64[]
472          - values:
473              - mov.null v1
474
475
476      - file-name: uninitialized_regs
477        isa:
478          instructions:
479            - sig: or v1:in:i32, v2:in:i32
480              acc: out:i32
481              format: [op_v1_4_v2_4]
482        description: Check 'or' with uninitialized registers.
483        tags: ['verifier']
484        runner-options: ['verifier-failure', 'verifier-config']
485        code-template: |
486            #
487                %s
488                *s
489                or %s, *s
490        check-type: exit-positive
491        template-cases:
492          - values:
493              - ''
494              - v0
495          - values:
496              - movi v0, 0
497              - v0
498            exclude: [init]
499          - values:
500              - ''
501              - v7
502          - values:
503              - ''
504              - v15
505          - values:
506              - 'movi v15, 0'
507              - v15
508            exclude: [init]
509        cases:
510          - values:
511              - ''
512              - v1
513          - values:
514              - movi v1, 0
515              - v1
516            id: init
517          - values:
518              - ''
519              - v8
520          - values:
521              - ''
522              - v14
523