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: "shl2.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: shl2.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              shl2.64 v0
37              movi.64 v0, 0
38              cmp.64 v0
39        description: Check shl2.64 with zero 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: shl2.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              shl2.64 v0
78              movi.64 v0, %s
79              cmp.64 v0
80        description: Check shl2.64 with +1 and various values.
81        cases:
82          - values:
83              - "0"
84              - "1"
85          - values:
86              - "1"
87              - "2"
88          - values:
89              - "-1"
90              - "0x8000000000000000"
91            bugid: ['1387']
92          - values:
93              - "0x7FFFFFFFFFFFFFFF"
94              - "0x8000000000000000"
95            bugid: ['1387']
96          - values:
97              - "0x8000000000000000"
98              - "1"
99            bugid: ['1387']
100          - values:
101              - "-0x7FFFFFFFFFFFFFFF"
102              - "2"
103            bugid: ['1387']
104          - values:
105              - "-0x8000000000000000"
106              - "1"
107            bugid: ['1387']
108          - values:
109              - "0xFFFFFFFFFFFFFFFF"
110              - "0x8000000000000000"
111            bugid: ['1387']
112          - values:
113              - "-0xFFFFFFFFFFFFFFFF"
114              - "2"
115      - file-name: "op_vs_8_none"
116        isa:
117          instructions:
118            - sig: shl2.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              shl2.64 v0
127              movi.64 v0, %s
128              cmp.64 v0
129        description: Check shl2.64 with -1 and various values.
130        cases:
131          - values:
132              - "0"
133              - "0xFFFFFFFFFFFFFFFF"
134          - values:
135              - "1"
136              - "0xFFFFFFFFFFFFFFFE"
137          - values:
138              - "-1"
139              - "0x8000000000000000"
140            bugid: ['1387']
141          - values:
142              - "0x7FFFFFFFFFFFFFFF"
143              - "0x8000000000000000"
144            bugid: ['1387']
145          - values:
146              - "0x8000000000000000"
147              - "0xFFFFFFFFFFFFFFFF"
148            bugid: ['1387']
149          - values:
150              - "-0x7FFFFFFFFFFFFFFF"
151              - "0xFFFFFFFFFFFFFFFE"
152            bugid: ['1387']
153          - values:
154              - "-0x8000000000000000"
155              - "0xFFFFFFFFFFFFFFFF"
156            bugid: ['1387']
157          - values:
158              - "0xFFFFFFFFFFFFFFFF"
159              - "0x8000000000000000"
160            bugid: ['1387']
161          - values:
162              - "-0xFFFFFFFFFFFFFFFF"
163              - "0xFFFFFFFFFFFFFFFE"
164
165      - file-name: "op_vs_8_pmax"
166        isa:
167          instructions:
168            - sig: shl2.64 v:in:i64
169              acc: inout:i64
170              prefix: bit
171              format: [pref_op_v_8]
172        code-template: |
173          #
174              ldai.64 0x7FFFFFFFFFFFFFFF
175              movi.64 v0, %s
176              shl2.64 v0
177              movi.64 v0, %s
178              cmp.64 v0
179        description: Check shl2.64 with +max and various values.
180        cases:
181          - values:
182              - "0"
183              - "0x7FFFFFFFFFFFFFFF"
184          - values:
185              - "1"
186              - "0xFFFFFFFFFFFFFFFE"
187          - values:
188              - "-1"
189              - "0x8000000000000000"
190            bugid: ['1387']
191          - values:
192              - "0x7FFFFFFFFFFFFFFF"
193              - "0x8000000000000000"
194            bugid: ['1387']
195          - values:
196              - "0x8000000000000000"
197              - "0x7FFFFFFFFFFFFFFF"
198            bugid: ['1387']
199          - values:
200              - "-0x7FFFFFFFFFFFFFFF"
201              - "0xFFFFFFFFFFFFFFFE"
202            bugid: ['1387']
203          - values:
204              - "-0x8000000000000000"
205              - "0x7FFFFFFFFFFFFFFF"
206            bugid: ['1387']
207          - values:
208              - "0xFFFFFFFFFFFFFFFF"
209              - "0x8000000000000000"
210            bugid: ['1387']
211          - values:
212              - "-0xFFFFFFFFFFFFFFFF"
213              - "0xFFFFFFFFFFFFFFFE"
214
215      - file-name: "op_vs_8_nmax"
216        isa:
217          instructions:
218            - sig: shl2.64 v:in:i64
219              acc: inout:i64
220              prefix: bit
221              format: [pref_op_v_8]
222        code-template: |
223          #
224              ldai.64 -0x8000000000000000
225              movi.64 v0, %s
226              shl2.64 v0
227              movi.64 v0, %s
228              cmp.64 v0
229        description: Check shl2.64 with -max and various values.
230        cases:
231          - values:
232              - "0"
233              - "0x8000000000000000"
234          - values:
235              - "1"
236              - "0"
237          - values:
238              - "-1"
239              - "0"
240            bugid: ['1387']
241          - values:
242              - "0x7FFFFFFFFFFFFFFF"
243              - "0x0"
244            bugid: ['1387']
245          - values:
246              - "0x8000000000000000"
247              - "0x8000000000000000"
248            bugid: ['1387']
249          - values:
250              - "-0x7FFFFFFFFFFFFFFF"
251              - "0"
252            bugid: ['1387']
253          - values:
254              - "-0x8000000000000000"
255              - "0x8000000000000000"
256            bugid: ['1387']
257          - values:
258              - "0xFFFFFFFFFFFFFFFF"
259              - "0"
260            bugid: ['1387']
261          - values:
262              - "-0xFFFFFFFFFFFFFFFF"
263              - "0"
264
265      - file-name: "vals"
266        bugid: ['1387']
267        tags: ['tsan']
268        isa:
269          instructions:
270            - sig: shl2.64 v:in:i64
271              acc: inout:i64
272              prefix: bit
273              format: [pref_op_v_8]
274        code-template: |
275          #
276              ldai.64 %s
277              movi.64 v0, %s
278              shl2.64 v0
279              movi.64 v0, %s
280              cmp.64 v0
281        description: Check shl2.64 with various values.
282        cases:
283          - values:
284              - "0x909D078BC1802D11"
285              - "0x3CF069C089440376"
286              - "0x4440000000000000"
287          - values:
288              - "0x56FD0D313D987D81"
289              - "0xC4ED2DCC568C4D51"
290              - "0x1A627B30FB020000"
291          - values:
292              - "0x921DB78A744A870A"
293              - "0x5D1BCD75637D2D0"
294              - "0xB78A744A870A0000"
295          - values:
296              - "0xC81A9CDAB313C62E"
297              - "0xCBF1E38A69AE2485"
298              - "0x3539B566278C5C0"
299          - values:
300              - "0x6E6B999C47399E98"
301              - "0xBE4E18F98146253B"
302              - "0xC000000000000000"
303          - values:
304              - "0xD9020CE500F6672E"
305              - "0x10025C5183770ED3"
306              - "0x672807B339700000"
307          - values:
308              - "0x272F55E050FE5DA9"
309              - "0xAC62C2429BD9D1B4"
310              - "0xDA90000000000000"
311          - values:
312              - "0x26D9934D469195C2"
313              - "0x89594AFB8577CA66"
314              - "0xA465708000000000"
315          - values:
316              - "0x7465153CF3023766"
317              - "0x7FF6D7F89184F0AF"
318              - "0x1BB3000000000000"
319          - values:
320              - "0x9179FC5269D19418"
321              - "0x7F3DE6693C80EC85"
322              - "0x2F3F8A4D3A328300"
323
324      - file-name: "regs"
325        isa:
326          instructions:
327            - sig: shl2.64 v:in:i64
328              acc: inout:i64
329              prefix: bit
330              format: [pref_op_v_8]
331        runner-options: ['compile-only']
332        code-template: |
333          #
334              shl2.64 %s
335        check-type: none
336        description: Check shl2.64 with various register numbers.
337        cases:
338          - values:
339              - "v255"
340          - values:
341              - "v256"
342            runner-options: ['compile-failure']
343
344      - file-name: "type"
345        bugid: ["964", "966"]
346        tags: ["verifier"]
347        isa:
348          verification:
349            - acc_type
350            - v1_type
351        runner-options: ['verifier-failure', 'verifier-config']
352        header-template: []
353        code-template: |
354          .record T {}
355          .function i32 main() {
356              %s
357              *s
358              shl2.64 v0
359              ldai 0
360        check-type: no-check
361        description: Check 'shl2.64' with incorrect accumulator and/or register types.
362        cases:
363          - values:
364            - ldai 0
365          - values:
366            - ldai.64 0
367            id: acc_ok
368          - values:
369            - fldai 0
370            bugid: ['7315']
371          - values:
372            - fldai.64 0
373            bugid: ['7315']
374          - values:
375            - lda.null
376          - values:
377            - |
378              #
379                  movi v1, 0
380                  newarr v1, v1, i32[]
381                  lda.obj v1
382          - values:
383            - lda.str "0"
384          - values:
385            - lda.type T
386          - values:
387            - |
388              #
389                  newobj v1, T
390                  lda.obj v1
391        template-cases:
392          - values:
393            - movi v0, 0
394          - values:
395            - movi.64 v0, 0
396            exclude: [acc_ok]
397          - values:
398            - fmovi v0, 0
399            bugid: ['7315']
400          - values:
401            - fmovi.64 v0, 0
402            bugid: ['7315']
403          - values:
404            - mov.null v0
405          - values:
406            - |
407              #
408                  movi v0, 0
409                  newarr v0, v0, i32[]
410          - values:
411            - |
412              #
413                  lda.str "0"
414                  sta.obj v0
415          - values:
416            - |
417              #
418                  lda.type T
419                  sta.obj v0
420          - values:
421            - newobj v0, T
422
423
424      - file-name: uninitialized_regs
425        isa:
426          instructions:
427            - sig: shl2.64 v:in:i64
428              acc: inout:i64
429              prefix: bit
430              format: [pref_op_v_8]
431        description: Check 'shl2.64' with uninitialized registers.
432        tags: ['verifier']
433        runner-options: ['verifier-failure', 'verifier-config']
434        code-template: |
435          #
436              %s
437              *s
438              shl2.64 *s
439        check-type: exit-positive
440        template-cases:
441          - values:
442              - ''
443          - values:
444              - ldai.64 0
445            exclude: [init]
446        cases:
447          - values:
448              - ''
449              - v0
450          - values:
451              - movi.64 v1, 0
452              - v1
453            id: init
454          - values:
455              - ''
456              - v8
457          - values:
458              - ''
459              - v15
460          - values:
461              - movi.64 v15, 0
462              - v15
463            id: init
464