• 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: "and"
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: and 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              and v0, v1
36              movi v0, 0
37              jne v0, set_failure
38              ldai 0
39              jmp fall_through
40          set_failure:
41              ldai 1
42          fall_through:
43        description: Check 'and' with zero and various values.
44        tags: ['tsan']
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: and 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              and 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 'and' with +1 and various values.
85        cases:
86          - values:
87              - "0"
88              - "0"
89          - values:
90              - "1"
91              - "1"
92          - values:
93              - "-1"
94              - "1"
95          - values:
96              - "0x7FFFFFFF"
97              - "1"
98          - values:
99              - "0x80000000"
100              - "0"
101          - values:
102              - "-0x7FFFFFFF"
103              - "1"
104          - values:
105              - "-0x80000000"
106              - "0"
107          - values:
108              - "0xFFFFFFFF"
109              - "1"
110          - values:
111              - "-0xFFFFFFFF"
112              - "1"
113      - file-name: "op_vs1_4_vs2_4_none"
114        isa:
115          instructions:
116            - sig: and 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              and v0, v1
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 'and' with -1 and various values.
133        cases:
134          - values:
135              - "0"
136              - "0"
137          - values:
138              - "1"
139              - "1"
140          - values:
141              - "-1"
142              - "-1"
143          - values:
144              - "0x7FFFFFFF"
145              - "0x7FFFFFFF"
146          - values:
147              - "0x80000000"
148              - "0x80000000"
149          - values:
150              - "-0x7FFFFFFF"
151              - "-0x7FFFFFFF"
152          - values:
153              - "-0x80000000"
154              - "-0x80000000"
155          - values:
156              - "0xFFFFFFFF"
157              - "0xFFFFFFFF"
158          - values:
159              - "-0xFFFFFFFF"
160              - "-0xFFFFFFFF"
161      - file-name: "op_vs1_4_vs2_4_pmax"
162        isa:
163          instructions:
164            - sig: and v1:in:i32, v2:in:i32
165              acc: out:i32
166              prefix: bit
167              format: [pref_op_v1_4_v2_4]
168        code-template: |
169          #
170              movi v0, 0x7FFFFFFF
171              movi v1, %s
172              and v0, v1
173              movi v0, %s
174              jne v0, set_failure
175              ldai 0
176              jmp fall_through
177          set_failure:
178              ldai 1
179          fall_through:
180        description: Check 'and' with +max and various values.
181        cases:
182          - values:
183              - "0"
184              - "0"
185          - values:
186              - "1"
187              - "1"
188          - values:
189              - "-1"
190              - "0x7FFFFFFF"
191          - values:
192              - "0x7FFFFFFF"
193              - "0x7FFFFFFF"
194          - values:
195              - "0x80000000"
196              - "0"
197          - values:
198              - "-0x7FFFFFFF"
199              - "1"
200          - values:
201              - "-0x80000000"
202              - "0"
203          - values:
204              - "0xFFFFFFFF"
205              - "0x7FFFFFFF"
206          - values:
207              - "-0xFFFFFFFF"
208              - "1"
209
210      - file-name: "op_vs1_4_vs2_4_nmax"
211        isa:
212          instructions:
213            - sig: and v1:in:i32, v2:in:i32
214              acc: out:i32
215              prefix: bit
216              format: [pref_op_v1_4_v2_4]
217        code-template: |
218          #
219              movi v0, -0x80000000
220              movi v1, %s
221              and v0, v1
222              movi v0, %s
223              jne v0, set_failure
224              ldai 0
225              jmp fall_through
226          set_failure:
227              ldai 1
228          fall_through:
229        description: Check 'and' with -max and various values.
230        cases:
231          - values:
232              - "0"
233              - "0"
234          - values:
235              - "1"
236              - "0"
237          - values:
238              - "-1"
239              - "0x80000000"
240          - values:
241              - "0x7FFFFFFF"
242              - "0"
243          - values:
244              - "0x80000000"
245              - "0x80000000"
246          - values:
247              - "-0x7FFFFFFF"
248              - "0x80000000"
249          - values:
250              - "-0x80000000"
251              - "0x80000000"
252          - values:
253              - "0xFFFFFFFF"
254              - "0x80000000"
255          - values:
256              - "-0xFFFFFFFF"
257              - "0"
258
259      - file-name: "vals"
260        isa:
261          instructions:
262            - sig: and v1:in:i32, v2:in:i32
263              acc: out:i32
264              prefix: bit
265              format: [pref_op_v1_4_v2_4]
266        code-template: |
267          #
268              movi v0, %s
269              movi v1, %s
270              and v0, v1
271              movi v0, %s
272              jne v0, set_failure
273              ldai 0
274              jmp fall_through
275          set_failure:
276              ldai 1
277          fall_through:
278        description: Check 'and' with various values.
279        cases:
280          - values:
281              - "0xA51B315E"
282              - "0x87C8F582"
283              - "0x85083102"
284          - values:
285              - "0x38A75ED8"
286              - "0x7D32F542"
287              - "0x38225440"
288          - values:
289              - "0xBE9510AB"
290              - "0x43500AD6"
291              - "0x2100082"
292          - values:
293              - "0x6B3EBCF0"
294              - "0xDE8EC51C"
295              - "0x4A0E8410"
296          - values:
297              - "0xD0A1860"
298              - "0x5EB6DAA"
299              - "0x50A0820"
300          - values:
301              - "0xD9B646CB"
302              - "0xF6F2454C"
303              - "0xD0B24448"
304          - values:
305              - "0xB3BC65C4"
306              - "0xE8F33B3E"
307              - "0xA0B02104"
308          - values:
309              - "0xD9962D72"
310              - "0xC661F3D4"
311              - "0xC0002150"
312          - values:
313              - "0xC39C6250"
314              - "0x97BB08D2"
315              - "0x83980050"
316          - values:
317              - "0xECFD3116"
318              - "0x59D1C953"
319              - "0x48D10112"
320
321      - file-name: "vals_mod32_1"
322        bugid: ['1324', '2075']
323        tags: [verifier]
324        runner-options: ['verifier-failure', 'verifier-debug-config']
325        description: Check 'and' with incorrect type of registers.
326        isa:
327          instructions:
328            - sig: and v1:in:i32, v2:in:i32
329              acc: out:i32
330              prefix: bit
331              format: [pref_op_v1_4_v2_4]
332        code-template: |
333          #
334              movi.64 v0, %s
335              movi.64 v1, %s
336              and v0, v1
337              movi.64 v0, %s
338              cmp.64 v0
339        cases:
340          - values:
341              - "0x17FFFFFFF"
342              - "0x17FFFFFFF"
343              - "0x7FFFFFFF"
344          - values:
345              - "0x77777777FFFFFFFF"
346              - "0x1111111180000000"
347              - "0xFFFFFFFF80000000"
348          - values:
349              - "0x180000000"
350              - "0x180000000"
351              - "0xFFFFFFFF80000000"
352
353      - file-name: "regs"
354        isa:
355          instructions:
356            - sig: and v1:in:i32, v2:in:i32
357              acc: out:i32
358              prefix: bit
359              format: [pref_op_v1_4_v2_4]
360        runner-options: ['compile-only']
361        code-template: |
362          #
363              and %s, %s
364        check-type: none
365        description: Check 'and' with various register numbers.
366        cases:
367          - values:
368              - v0
369              - v15
370          - values:
371              - v0
372              - v16
373            runner-options:
374              - compile-failure
375          - values:
376              - v15
377              - v0
378          - values:
379              - v16
380              - v0
381            runner-options:
382              - compile-failure
383
384      - file-name: "type"
385        bugid: ["964", "966", "2075", "2260"]
386        isa:
387          instructions:
388            - sig: and v1:in:i32, v2:in:i32
389              acc: out:i32
390              prefix: bit
391              format: [pref_op_v1_4_v2_4]
392          verification:
393            - v1_type
394            - v2_type
395        tags: ['verifier']
396        runner-options: ['verifier-failure', 'verifier-debug-config']
397        header-template: []
398        code-template: |
399          #
400          .record A {}
401          .record B {}
402          .record panda.String <external>
403          .record panda.Object <external>
404          .function i32 main() {
405              %s
406              *s
407              and v0, v1
408              ldai 0
409        check-type: no-check
410        description: Check `and` with incorrect register type.
411        template-cases:
412          - values:
413              - movi.64 v0, 0
414          - values:
415              - fmovi.64 v0, 0
416          - values:
417              - |
418                #
419                    lda.type B
420                    sta.obj v0
421          - values:
422              - |
423                #
424                    lda.type B[]
425                    sta.obj v0
426          - values:
427              - |
428                #
429                    lda.type panda.String
430                    sta.obj v0
431          - values:
432              - |
433                #
434                    lda.type panda.Object
435                    sta.obj v0
436          - values:
437              - |
438                #
439                    movi v0, 10
440                    newarr v0, v0, i32[]
441          - values:
442              - mov.null v0
443          - values:
444              - movi v0, 0
445            exclude: [val]
446        cases:
447          - values:
448              - movi.64 v1, 0
449          - values:
450              - fmovi.64 v1, 0
451          - values:
452              - |
453                #
454                    lda.type A
455                    sta.obj v1
456          - values:
457              - |
458                #
459                    lda.type A[]
460                    sta.obj v1
461
462          - values:
463              - |
464                #
465                    lda.type panda.String
466                    sta.obj v1
467          - values:
468              - |
469                #
470                    lda.type panda.Object
471                    sta.obj v1
472          - values:
473              - |
474                #
475                    movi v1, 10
476                    newarr v1, v1, f64[]
477          - values:
478              - mov.null v1
479          - values:
480              - movi v1, 0
481            id: val
482
483      - file-name: uninitialized_regs
484        bugid: ['2260']
485        isa:
486          instructions:
487            - sig: and v1:in:i32, v2:in:i32
488              acc: out:i32
489              prefix: bit
490              format: [pref_op_v1_4_v2_4]
491        description: Check `and` with uninitialized registers.
492        tags: ['verifier']
493        runner-options: ['verifier-failure', 'verifier-debug-config']
494        header-template: []
495        code-template: |
496            #
497            .function i32 main() {
498                %s
499                *s
500                and %s, *s
501                ldai 0
502        check-type: no-check
503        template-cases:
504          - values:
505              - ''
506              - v0
507          - values:
508              - movi v0, 0
509              - v0
510            exclude: [init]
511          - values:
512              - ''
513              - v7
514          - values:
515              - ''
516              - v15
517          - values:
518              - 'movi v15, 0'
519              - v15
520            exclude: [init]
521        cases:
522          - values:
523              - ''
524              - v1
525          - values:
526              - movi v1, 0
527              - v1
528            id: init
529          - values:
530              - ''
531              - v8
532          - values:
533              - ''
534              - v14
535