• 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: "shl"
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: shl 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              shl 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 shl 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: shl 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              shl 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 shl with +1 and various values.
85        cases:
86          - values:
87              - "0"
88              - "1"
89          - values:
90              - "1"
91              - "2"
92          - values:
93              - "-1"
94              - "0x80000000"
95            bugid: ['1387']
96            tags: ["clang_release_sanitizer_jit"]
97          - values:
98              - "0x7FFFFFFF"
99              - "0x80000000"
100            bugid: ['1387']
101            tags: ["clang_release_sanitizer_jit"]
102          - values:
103              - "0x80000000"
104              - "1"
105            bugid: ['1387']
106            tags: ["clang_release_sanitizer_jit"]
107          - values:
108              - "-0x7FFFFFFF"
109              - "2"
110            bugid: ['1387']
111            tags: ["clang_release_sanitizer_jit"]
112          - values:
113              - "-0x80000000"
114              - "1"
115            bugid: ['1387']
116            tags: ["clang_release_sanitizer_jit"]
117          - values:
118              - "0xFFFFFFFF"
119              - "0x80000000"
120            bugid: ['1387']
121            tags: ["clang_release_sanitizer_jit"]
122          - values:
123              - "-0xFFFFFFFF"
124              - "2"
125      - file-name: "op_vs1_4_vs2_4_none"
126        isa:
127          instructions:
128            - sig: shl v1:in:i32, v2:in:i32
129              acc: out:i32
130              prefix: bit
131              format: [pref_op_v1_4_v2_4]
132        code-template: |
133          #
134              movi v0, -1
135              movi v1, %s
136              shl v0, v1
137              movi v0, %s
138              jne v0, set_failure
139              ldai 0
140              jmp fall_through
141          set_failure:
142              ldai 1
143          fall_through:
144        description: Check shl with -1 and various values.
145        cases:
146          - values:
147              - "0"
148              - "0xFFFFFFFF"
149          - values:
150              - "1"
151              - "0xFFFFFFFE"
152          - values:
153              - "-1"
154              - "0x80000000"
155            bugid: ['1387']
156            tags: ["clang_release_sanitizer_jit"]
157          - values:
158              - "0x7FFFFFFF"
159              - "0x80000000"
160            bugid: ['1387']
161            tags: ["clang_release_sanitizer_jit"]
162          - values:
163              - "0x80000000"
164              - "0xFFFFFFFF"
165            bugid: ['1387']
166            tags: ["clang_release_sanitizer_jit"]
167          - values:
168              - "-0x7FFFFFFF"
169              - "0xFFFFFFFE"
170            bugid: ['1387']
171            tags: ["clang_release_sanitizer_jit"]
172          - values:
173              - "-0x80000000"
174              - "0xFFFFFFFF"
175            bugid: ['1387']
176            tags: ["clang_release_sanitizer_jit"]
177          - values:
178              - "0xFFFFFFFF"
179              - "0x80000000"
180            bugid: ['1387']
181            tags: ["clang_release_sanitizer_jit"]
182          - values:
183              - "-0xFFFFFFFF"
184              - "0xFFFFFFFE"
185
186      - file-name: "op_vs1_4_vs2_4_pmax"
187        isa:
188          instructions:
189            - sig: shl v1:in:i32, v2:in:i32
190              acc: out:i32
191              prefix: bit
192              format: [pref_op_v1_4_v2_4]
193        code-template: |
194          #
195              movi v0, 0x7FFFFFFF
196              movi v1, %s
197              shl v0, v1
198              movi v0, %s
199              jne v0, set_failure
200              ldai 0
201              jmp fall_through
202          set_failure:
203              ldai 1
204          fall_through:
205        description: Check shl with +max and various values.
206        cases:
207          - values:
208              - "0"
209              - "0x7FFFFFFF"
210          - values:
211              - "1"
212              - "0xFFFFFFFE"
213          - values:
214              - "-1"
215              - "0x80000000"
216            bugid: ['1387']
217            tags: ["clang_release_sanitizer_jit"]
218          - values:
219              - "0x7FFFFFFF"
220              - "0x80000000"
221            bugid: ['1387']
222            tags: ["clang_release_sanitizer_jit"]
223          - values:
224              - "0x80000000"
225              - "0x7FFFFFFF"
226            bugid: ['1387']
227            tags: ["clang_release_sanitizer_jit"]
228          - values:
229              - "-0x7FFFFFFF"
230              - "0xFFFFFFFE"
231            bugid: ['1387']
232            tags: ["clang_release_sanitizer_jit"]
233          - values:
234              - "-0x80000000"
235              - "0x7FFFFFFF"
236            bugid: ['1387']
237            tags: ["clang_release_sanitizer_jit"]
238          - values:
239              - "0xFFFFFFFF"
240              - "0x80000000"
241            bugid: ['1387']
242            tags: ["clang_release_sanitizer_jit"]
243          - values:
244              - "-0xFFFFFFFF"
245              - "0xFFFFFFFE"
246
247      - file-name: "op_vs1_4_vs2_4_nmax"
248        isa:
249          instructions:
250            - sig: shl v1:in:i32, v2:in:i32
251              acc: out:i32
252              prefix: bit
253              format: [pref_op_v1_4_v2_4]
254        code-template: |
255          #
256              movi v0, -0x80000000
257              movi v1, %s
258              shl v0, v1
259              movi v0, %s
260              jne v0, set_failure
261              ldai 0
262              jmp fall_through
263          set_failure:
264              ldai 1
265          fall_through:
266        description: Check shl with -max and various values.
267        cases:
268          - values:
269              - "0"
270              - "0x80000000"
271          - values:
272              - "1"
273              - "0"
274          - values:
275              - "-1"
276              - "0"
277            bugid: ['1387']
278            tags: ["clang_release_sanitizer_jit"]
279          - values:
280              - "0x7FFFFFFF"
281              - "0x0"
282            bugid: ['1387']
283            tags: ["clang_release_sanitizer_jit"]
284          - values:
285              - "0x80000000"
286              - "0x80000000"
287            bugid: ['1387']
288            tags: ["clang_release_sanitizer_jit"]
289          - values:
290              - "-0x7FFFFFFF"
291              - "0"
292            bugid: ['1387']
293            tags: ["clang_release_sanitizer_jit"]
294          - values:
295              - "-0x80000000"
296              - "0x80000000"
297            bugid: ['1387']
298            tags: ["clang_release_sanitizer_jit"]
299          - values:
300              - "0xFFFFFFFF"
301              - "0"
302            bugid: ['1387']
303            tags: ["clang_release_sanitizer_jit"]
304          - values:
305              - "-0xFFFFFFFF"
306              - "0"
307
308      - file-name: "vals"
309        bugid: ['1387']
310        tags: ["clang_release_sanitizer_jit", "tsan"]
311        isa:
312          instructions:
313            - sig: shl v1:in:i32, v2:in:i32
314              acc: out:i32
315              prefix: bit
316              format: [pref_op_v1_4_v2_4]
317        code-template: |
318          #
319              movi v0, %s
320              movi v1, %s
321              shl v0, v1
322              movi v0, %s
323              jne v0, set_failure
324              ldai 0
325              jmp fall_through
326          set_failure:
327              ldai 1
328          fall_through:
329        description: Check shl with various values.
330        cases:
331          - values:
332              - "0x61696FFF"
333              - "0x56B814E8"
334              - "0x696FFF00"
335          - values:
336              - "0x76C5AE08"
337              - "0x8DFD0A2F"
338              - "0xD7040000"
339          - values:
340              - "0x15FFEF1D"
341              - "0x2C85774D"
342              - "0xFDE3A000"
343          - values:
344              - "0x3130A634"
345              - "0xD3CDE405"
346              - "0x2614C680"
347          - values:
348              - "0x8E8A9883"
349              - "0xDE3A4635"
350              - "0x10600000"
351          - values:
352              - "0x3BF5A79C"
353              - "0xE799C159"
354              - "0x38000000"
355          - values:
356              - "0xBF8EF337"
357              - "0x66068B26"
358              - "0xE3BCCDC0"
359          - values:
360              - "0xDC2D1B09"
361              - "0x3D252477"
362              - "0x84800000"
363          - values:
364              - "0x960BD85E"
365              - "0xB357B7D"
366              - "0xC0000000"
367          - values:
368              - "0x40BB756D"
369              - "0xDAAA49C4"
370              - "0xBB756D0"
371
372      - file-name: "vals_mod32_1"
373        bugid: ['1324', '2075']
374        tags: ['verifier']
375        runner-options: ['verifier-failure', 'verifier-debug-config']
376        isa:
377          instructions:
378            - sig: shl v1:in:i32, v2:in:i32
379              acc: out:i32
380              prefix: bit
381              format: [pref_op_v1_4_v2_4]
382        code-template: |
383          #
384              movi.64 v0, %s
385              movi.64 v1, %s
386              shl v0, v1
387              movi.64 v0, %s
388              cmp.64 v0
389        description: Check shl with incorrect register types.
390        cases:
391          - values:
392              - "0x17FFFFFFF"
393              - "0x1F"
394              - "0xFFFFFFFF80000000"
395          - values:
396              - "0x77777777FFFFFFFF"
397              - "0x1111111180000000"
398              - "0xFFFFFFFFFFFFFFFF"
399          - values:
400              - "0x180000000"
401              - "0x180000000"
402              - "0xFFFFFFFF80000000"
403
404      - file-name: "regs"
405        isa:
406          instructions:
407            - sig: shl v1:in:i32, v2:in:i32
408              acc: out:i32
409              prefix: bit
410              format: [pref_op_v1_4_v2_4]
411        runner-options: ['compile-only']
412        code-template: |
413          #
414              shl %s, %s
415        check-type: none
416        description: Check shl with various register numbers.
417        cases:
418          - values:
419              - v0
420              - v15
421          - values:
422              - v0
423              - v16
424            runner-options:
425              - compile-failure
426          - values:
427              - v15
428              - v0
429          - values:
430              - v16
431              - v0
432            runner-options:
433              - compile-failure
434
435      - file-name: "type"
436        bugid: ["964", "966", "2075"]
437        tags: ["verifier"]
438        isa:
439          instructions:
440            - sig: shl v1:in:i32, v2:in:i32
441              acc: out:i32
442              prefix: bit
443              format: [pref_op_v1_4_v2_4]
444          verification:
445            - v1_type
446            - v2_type
447        runner-options: ['verifier-failure', 'verifier-debug-config']
448        code-template: |
449          #
450              %s
451              %s
452              shl v0, v1
453              ldai 0
454        check-type: no-check
455        description: Check shl with incorrect register types.
456        cases:
457          - values:
458              - mov.null v0
459              - movi v1, 0
460          - values:
461              - movi v0, 0
462              - mov.null v1
463          - values:
464              - mov.null v0
465              - mov.null v1
466