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