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: "ashr2.64"
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: ashr2.64 v:in:i64
28              acc: inout:i64
29              prefix: bit
30              format: [pref_op_v_8]
31        code-template: |
32          #
33              ldai.64 0
34              movi.64 v0, %s
35              mov.64 v1, v0
36              ashr2.64 v0
37              movi.64 v0, 0
38              cmp.64 v0
39        description: Check ashr2.64 with 0 and various values.
40        cases:
41          - values:
42              - "0"
43          - values:
44              - "1"
45          - values:
46              - "-1"
47            bugid: ['1387']
48          - values:
49              - "0x7FFFFFFFFFFFFFFF"
50            bugid: ['1387']
51          - values:
52              - "0x8000000000000000"
53            bugid: ['1387']
54          - values:
55              - "-0x7FFFFFFFFFFFFFFF"
56            bugid: ['1387']
57          - values:
58              - "-0x8000000000000000"
59            bugid: ['1387']
60          - values:
61              - "0xFFFFFFFFFFFFFFFF"
62            bugid: ['1387']
63          - values:
64              - "-0xFFFFFFFFFFFFFFFF"
65
66      - file-name: "op_vs_8_pone"
67        isa:
68          instructions:
69            - sig: ashr2.64 v:in:i64
70              acc: inout:i64
71              prefix: bit
72              format: [pref_op_v_8]
73        code-template: |
74          #
75              ldai.64 1
76              movi.64 v0, %s
77              ashr2.64 v0
78              movi.64 v0, %s
79              cmp.64 v0
80        description: Check ashr2.64 with +1 and various values.
81        cases:
82          - values:
83              - "0"
84              - "1"
85          - values:
86              - "1"
87              - "0"
88          - values:
89              - "-1"
90              - "0"
91            bugid: ['1387']
92          - values:
93              - "0x7FFFFFFFFFFFFFFF"
94              - "0"
95            bugid: ['1387']
96          - values:
97              - "0x8000000000000000"
98              - "1"
99            bugid: ['1387']
100          - values:
101              - "-0x7FFFFFFFFFFFFFFF"
102              - "0"
103            bugid: ['1387']
104          - values:
105              - "-0x8000000000000000"
106              - "1"
107            bugid: ['1387']
108          - values:
109              - "0xFFFFFFFFFFFFFFFF"
110              - "0"
111            bugid: ['1387']
112          - values:
113              - "-0xFFFFFFFFFFFFFFFF"
114              - "0"
115      - file-name: "op_vs_8_none"
116        isa:
117          instructions:
118            - sig: ashr2.64 v:in:i64
119              acc: inout:i64
120              prefix: bit
121              format: [pref_op_v_8]
122        code-template: |
123          #
124              ldai.64 -1
125              movi.64 v0, %s
126              ashr2.64 v0
127              movi.64 v0, 0xFFFFFFFFFFFFFFFF
128              cmp.64 v0
129        description: Check ashr2.64 with -1 and various values.
130        cases:
131          - values:
132              - "0"
133          - values:
134              - "1"
135          - values:
136              - "-1"
137            bugid: ['1387']
138          - values:
139              - "0x7FFFFFFFFFFFFFFF"
140            bugid: ['1387']
141          - values:
142              - "0x8000000000000000"
143            bugid: ['1387']
144          - values:
145              - "-0x7FFFFFFFFFFFFFFF"
146            bugid: ['1387']
147          - values:
148              - "-0x8000000000000000"
149            bugid: ['1387']
150          - values:
151              - "0xFFFFFFFFFFFFFFFF"
152            bugid: ['1387']
153          - values:
154              - "-0xFFFFFFFFFFFFFFFF"
155
156      - file-name: "op_vs_8_pmax"
157        isa:
158          instructions:
159            - sig: ashr2.64 v:in:i64
160              acc: inout:i64
161              prefix: bit
162              format: [pref_op_v_8]
163        code-template: |
164          #
165              ldai.64 0x7FFFFFFFFFFFFFFF
166              movi.64 v0, %s
167              ashr2.64 v0
168              movi.64 v0, %s
169              cmp.64 v0
170        description: Check ashr2.64 with +max and various values.
171        cases:
172          - values:
173              - "0"
174              - "0x7FFFFFFFFFFFFFFF"
175          - values:
176              - "1"
177              - "0x3FFFFFFFFFFFFFFF"
178          - values:
179              - "-1"
180              - "0"
181            bugid: ['1387']
182          - values:
183              - "0x7FFFFFFFFFFFFFFF"
184              - "0"
185            bugid: ['1387']
186          - values:
187              - "0x8000000000000000"
188              - "0x7FFFFFFFFFFFFFFF"
189            bugid: ['1387']
190          - values:
191              - "-0x7FFFFFFFFFFFFFFF"
192              - "0x3FFFFFFFFFFFFFFF"
193            bugid: ['1387']
194          - values:
195              - "-0x8000000000000000"
196              - "0x7FFFFFFFFFFFFFFF"
197            bugid: ['1387']
198          - values:
199              - "0xFFFFFFFFFFFFFFFF"
200              - "0"
201            bugid: ['1387']
202          - values:
203              - "-0xFFFFFFFFFFFFFFFF"
204              - "0x3FFFFFFFFFFFFFFF"
205
206      - file-name: "op_vs_8_nmax"
207        isa:
208          instructions:
209            - sig: ashr2.64 v:in:i64
210              acc: inout:i64
211              prefix: bit
212              format: [pref_op_v_8]
213        code-template: |
214          #
215              ldai.64 -0x8000000000000000
216              movi.64 v0, %s
217              ashr2.64 v0
218              movi.64 v0, %s
219              cmp.64 v0
220        description: Check ashr2.64 with -max and various values.
221        cases:
222          - values:
223              - "0"
224              - "0x8000000000000000"
225          - values:
226              - "1"
227              - "0xC000000000000000"
228          - values:
229              - "-1"
230              - "0xFFFFFFFFFFFFFFFF"
231            bugid: ['1387']
232          - values:
233              - "0x7FFFFFFFFFFFFFFF"
234              - "0xFFFFFFFFFFFFFFFF"
235            bugid: ['1387']
236          - values:
237              - "0x8000000000000000"
238              - "0x8000000000000000"
239            bugid: ['1387']
240          - values:
241              - "-0x7FFFFFFFFFFFFFFF"
242              - "0xC000000000000000"
243            bugid: ['1387']
244          - values:
245              - "-0x8000000000000000"
246              - "0x8000000000000000"
247            bugid: ['1387']
248          - values:
249              - "0xFFFFFFFFFFFFFFFF"
250              - "0xFFFFFFFFFFFFFFFF"
251            bugid: ['1387']
252          - values:
253              - "-0xFFFFFFFFFFFFFFFF"
254              - "0xC000000000000000"
255
256      - file-name: "vals"
257        bugid: ['1387']
258        tags: [tsan]
259        isa:
260          instructions:
261            - sig: ashr2.64 v:in:i64
262              acc: inout:i64
263              prefix: bit
264              format: [pref_op_v_8]
265        code-template: |
266          #
267              ldai.64 %s
268              movi.64 v0, %s
269              ashr2.64 v0
270              movi.64 v0, %s
271              cmp.64 v0
272        description: Check ashr2.64 with various values.
273        cases:
274          - values:
275              - "0xFE6674C201B14627"
276              - "0x2601D2490A8864EA"
277              - "0xFFFFFFFFFFFF999D"
278          - values:
279              - "0x842E04478F67F2E3"
280              - "0x368CE351BEBEDC0B"
281              - "0xFFF085C088F1ECFE"
282          - values:
283              - "0x1B16734EA3D2AF62"
284              - "0x1FC29369311C09EF"
285              - "0x362C"
286          - values:
287              - "0x183164BF6007479A"
288              - "0x52B816408F69B085"
289              - "0xC18B25FB003A3C"
290          - values:
291              - "0x564211418F5FFAB3"
292              - "0xE67A09B21E79C43C"
293              - "0x5"
294          - values:
295              - "0xE31AE0FB7EF37660"
296              - "0xBFC173B45A158E5D"
297              - "0xFFFFFFFF18D707DB"
298          - values:
299              - "0xB16BE43C76A2D3B8"
300              - "0xE78C20F13E09B801"
301              - "0xD8B5F21E3B5169DC"
302          - values:
303              - "0x7584DE0D203F130C"
304              - "0xE6DA75A526C62DF8"
305              - "0x75"
306          - values:
307              - "0xA646E54FA8F51A68"
308              - "0xF363814FD00C529C"
309              - "0xFFFFFFFA646E54FA"
310          - values:
311              - "0xE96F352D8B13BB9A"
312              - "0x67833675616CF416"
313              - "0xFFFFFFA5BCD4B62C"
314
315      - file-name: "regs"
316        isa:
317          instructions:
318            - sig: ashr2.64 v:in:i64
319              acc: inout:i64
320              prefix: bit
321              format: [pref_op_v_8]
322        runner-options: ['compile-only']
323        code-template: |
324          #
325              ashr2.64 %s
326        check-type: none
327        description: Check ashr2.64 with various register numbers.
328        cases:
329          - values:
330              - "v255"
331          - values:
332              - "v256"
333            runner-options: ['compile-failure']
334
335      - file-name: "type"
336        bugid: ["964", "966"]
337        tags: ["verifier"]
338        isa:
339          verification:
340            - acc_type
341            - v1_type
342        runner-options: ['verifier-failure', 'verifier-config']
343        header-template: []
344        code-template: |
345          .record T {}
346          .function i32 main() {
347              %s
348              *s
349              ashr2.64 v0
350        check-type: exit-positive
351        description: Check 'ashr2.64' with incorrect accumulator and/or register types.
352        cases:
353          - values:
354            - ldai 0
355          - values:
356            - ldai.64 0
357            id: acc_ok
358          - values:
359            - fldai 0
360            bugid: ['7315']
361          - values:
362            - fldai.64 0
363            bugid: ['7315']
364          - values:
365            - lda.null
366          - values:
367            - |
368              #
369                  movi v1, 0
370                  newarr v1, v1, i32[]
371                  lda.obj v1
372          - values:
373            - lda.str "0"
374          - values:
375            - lda.type T
376          - values:
377            - |
378              #
379                  newobj v1, T
380                  lda.obj v1
381        template-cases:
382          - values:
383            - movi v0, 0
384          - values:
385            - movi.64 v0, 0
386            exclude: [acc_ok]
387          - values:
388            - fmovi v0, 0
389            bugid: ['7315']
390          - values:
391            - fmovi.64 v0, 0
392            bugid: ['7315']
393          - values:
394            - mov.null v0
395          - values:
396            - |
397              #
398                  movi v0, 0
399                  newarr v0, v0, i32[]
400          - values:
401            - |
402              #
403                  lda.str "0"
404                  sta.obj v0
405          - values:
406            - |
407              #
408                  lda.type T
409                  sta.obj v0
410          - values:
411            - newobj v0, T
412
413
414      - file-name: uninitialized_regs
415        isa:
416          instructions:
417            - sig: ashr2.64 v:in:i64
418              acc: inout:i64
419              prefix: bit
420              format: [pref_op_v_8]
421        description: Check 'ashr2.64' with uninitialized registers.
422        tags: ['verifier']
423        runner-options: ['verifier-failure', 'verifier-config']
424        code-template: |
425          #
426              %s
427              *s
428              ashr2.64 *s
429        check-type: exit-positive
430        template-cases:
431          - values:
432              - ''
433          - values:
434              - ldai.64 0
435            exclude: [init]
436        cases:
437          - values:
438              - ''
439              - v0
440          - values:
441              - movi.64 v1, 0
442              - v1
443            id: init
444          - values:
445              - ''
446              - v8
447          - values:
448              - ''
449              - v15
450          - values:
451              - movi.64 v15, 0
452              - v15
453            id: init
454