• 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: "mul"
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: mul v1:in:i32, v2:in:i32
28              acc: out:i32
29              format: [op_v1_4_v2_4]
30        code-template: |
31          #
32              movi v0, 0
33              movi v1, %s
34              mul v0, v1
35              movi v0, 0
36              jne v0, set_failure
37              ldai 0
38              jmp fall_through
39          set_failure:
40              ldai 1
41          fall_through:
42        description: Check mul with zero and various values.
43        cases:
44          - values:
45              - "0"
46          - values:
47              - "1"
48          - values:
49              - "-1"
50          - values:
51              - "0x7FFFFFFF"
52          - values:
53              - "0x80000000"
54          - values:
55              - "-0x7FFFFFFF"
56          - values:
57              - "-0x80000000"
58          - values:
59              - "0xFFFFFFFF"
60          - values:
61              - "-0xFFFFFFFF"
62
63      - file-name: "op_vs1_4_vs2_4_pone"
64        isa:
65          instructions:
66            - sig: mul v1:in:i32, v2:in:i32
67              acc: out:i32
68              format: [op_v1_4_v2_4]
69        code-template: |
70          #
71              movi v0, 1
72              movi v1, %s
73              mul v0, v1
74              movi v0, %s
75              jne v0, set_failure
76              ldai 0
77              jmp fall_through
78          set_failure:
79              ldai 1
80          fall_through:
81        description: Check mul with +1 and various values.
82        cases:
83          - values:
84              - "0"
85              - "0"
86          - values:
87              - "1"
88              - "1"
89          - values:
90              - "-1"
91              - "-1"
92          - values:
93              - "0x7FFFFFFF"
94              - "0x7FFFFFFF"
95          - values:
96              - "0x80000000"
97              - "0x80000000"
98          - values:
99              - "-0x7FFFFFFF"
100              - "-0x7FFFFFFF"
101          - values:
102              - "-0x80000000"
103              - "-0x80000000"
104          - values:
105              - "0xFFFFFFFF"
106              - "0xFFFFFFFF"
107          - values:
108              - "-0xFFFFFFFF"
109              - "-0xFFFFFFFF"
110      - file-name: "op_vs1_4_vs2_4_none"
111        isa:
112          instructions:
113            - sig: mul v1:in:i32, v2:in:i32
114              acc: out:i32
115              format: [op_v1_4_v2_4]
116        code-template: |
117          #
118              movi v0, -1
119              movi v1, %s
120              mul v0, v1
121              movi v0, %s
122              jne v0, set_failure
123              ldai 0
124              jmp fall_through
125          set_failure:
126              ldai 1
127          fall_through:
128        description: Check mul with -1 and various values.
129        cases:
130          - values:
131              - "0"
132              - "0"
133          - values:
134              - "1"
135              - "-1"
136          - values:
137              - "-1"
138              - "1"
139          - values:
140              - "0x7FFFFFFF"
141              - "-0x7FFFFFFF"
142          - values:
143              - "0x80000000"
144              - "0x80000000"
145            tags: ["clang_release_sanitizer"]
146            bugid: ['966']
147          - values:
148              - "-0x7FFFFFFF"
149              - "0x7FFFFFFF"
150          - values:
151              - "-0x80000000"
152              - "0x80000000"
153            tags: ["clang_release_sanitizer"]
154            bugid: ['966']
155          - values:
156              - "0xFFFFFFFF"
157              - "1"
158          - values:
159              - "-0xFFFFFFFF"
160              - "-1"
161      - file-name: "op_vs1_4_vs2_4_pmax"
162        isa:
163          instructions:
164            - sig: mul v1:in:i32, v2:in:i32
165              acc: out:i32
166              format: [op_v1_4_v2_4]
167        code-template: |
168          #
169              movi v0, 0x7FFFFFFF
170              movi v1, %s
171              mul v0, v1
172              movi v0, %s
173              jne v0, set_failure
174              ldai 0
175              jmp fall_through
176          set_failure:
177              ldai 1
178          fall_through:
179        description: Check mul with +max and various values.
180        cases:
181          - values:
182              - "0"
183              - "0"
184          - values:
185              - "1"
186              - "0x7FFFFFFF"
187          - values:
188              - "-1"
189              - "0x80000001"
190          - values:
191              - "0x7FFFFFFF"
192              - "1"
193            tags: ["clang_release_sanitizer"]
194            bugid: ['966']
195          - values:
196              - "-0x7FFFFFFF"
197              - "-1"
198            tags: ["clang_release_sanitizer"]
199            bugid: ['966']
200          - values:
201              - "0x80000000"
202              - "0x80000000"
203            tags: ["clang_release_sanitizer"]
204            bugid: ['966']
205          - values:
206              - "-0x80000000"
207              - "0x80000000"
208            tags: ["clang_release_sanitizer"]
209            bugid: ['966']
210          - values:
211              - "0xFFFFFFFF"
212              - "0x80000001"
213          - values:
214              - "-0xFFFFFFFF"
215              - "0x7FFFFFFF"
216
217      - file-name: "op_vs1_4_vs2_4_nmax"
218        tags: ["clang_release_sanitizer"]
219        bugid: ['966']
220        isa:
221          instructions:
222            - sig: mul v1:in:i32, v2:in:i32
223              acc: out:i32
224              format: [op_v1_4_v2_4]
225        code-template: |
226          #
227              movi v0, -0x80000000
228              movi v1, %s
229              mul v0, v1
230              movi v0, %s
231              jne v0, set_failure
232              ldai 0
233              jmp fall_through
234          set_failure:
235              ldai 1
236          fall_through:
237        description: Check mul with -max and various values.
238        cases:
239          - values:
240              - "0"
241              - "0"
242          - values:
243              - "1"
244              - "0x80000000"
245          - values:
246              - "-1"
247              - "0x80000000"
248          - values:
249              - "0x7FFFFFFF"
250              - "0x80000000"
251          - values:
252              - "-0x7FFFFFFF"
253              - "0x80000000"
254          - values:
255              - "0x80000000"
256              - "0x0"
257          - values:
258              - "-0x80000000"
259              - "0x0"
260          - values:
261              - "0xFFFFFFFF"
262              - "0x80000000"
263          - values:
264              - "-0xFFFFFFFF"
265              - "0x80000000"
266
267      - file-name: "vals"
268        isa:
269          instructions:
270            - sig: mul v1:in:i32, v2:in:i32
271              acc: out:i32
272              format: [op_v1_4_v2_4]
273        code-template: |
274          #
275              movi v0, %s
276              movi v1, %s
277              mul v0, v1
278              movi v0, %s
279              jne v0, set_failure
280              ldai 0
281              jmp fall_through
282          set_failure:
283              ldai 1
284          fall_through:
285        tags: ["clang_release_sanitizer", 'tsan']
286        bugid: ['966']
287        description: Check mul with various values.
288        cases:
289          - values:
290              - "0x7A2CE254"
291              - "0xFB676533"
292              - "0x78083ABC"
293          - values:
294              - "0x6F7788C3"
295              - "0x65EB9775"
296              - "0xED4D861F"
297          - values:
298              - "0x801EF150"
299              - "0x29F1C73"
300              - "0x70FB26F0"
301          - values:
302              - "0xA6AB8140"
303              - "0x1D900575"
304              - "0x79E85240"
305          - values:
306              - "0x46689505"
307              - "0xADE64802"
308              - "0x3A38920A"
309          - values:
310              - "0x62C511AC"
311              - "0xD933351D"
312              - "0x4E3F9C7C"
313          - values:
314              - "0x59BB5F3E"
315              - "0x8E8C2463"
316              - "0x86C28CFA"
317          - values:
318              - "0x55255365"
319              - "0x98E808C3"
320              - "0x9191ADEF"
321          - values:
322              - "0x9664221"
323              - "0xF7F5AC4D"
324              - "0xA8C50FED"
325          - values:
326              - "0xC37EF875"
327              - "0xB09DAC86"
328              - "0x7325A93E"
329
330      - file-name: "vals_mod32_1"
331        isa:
332          instructions:
333            - sig: mul v1:in:i32, v2:in:i32
334              acc: out:i32
335              format: [op_v1_4_v2_4]
336        code-template: |
337          #
338              movi v0, %s
339              movi v1, %s
340              mul v0, v1
341              movi.64 v0, %s
342              cmp.64 v0
343        tags: ["verifier"]
344        bugid: ['966', '1324', '2072']
345        runner-options: ['verifier-failure', 'verifier-debug-config']
346        description: Check mul with incorrect register types.
347        cases:
348          - values:
349              - "0x7FFFFFFF"
350              - "2"
351              - "0xFFFFFFFFFFFFFFFE"
352          - values:
353              - "0x7FFFFFFF"
354              - "-2"
355              - "2"
356          - values:
357              - "0x80000000"
358              - "2"
359              - "0"
360
361      - file-name: "vals_mod32_2"
362        runner-options: ['verifier-failure', 'verifier-debug-config']
363        tags: ["verifier"]
364        bugid: ['966', '1324']
365        isa:
366          instructions:
367            - sig: mul v1:in:i32, v2:in:i32
368              acc: out:i32
369              format: [op_v1_4_v2_4]
370        code-template: |
371            #
372                movi.64 v0, %s
373                movi.64 v1, %s
374                mul v0, v1
375                movi.64 v0, %s
376                cmp.64 v0
377        description: Check mul with incorrect register types.
378        cases:
379            - values:
380                - "0x17FFFFFFF"
381                - "0x100000002"
382                - "0xFFFFFFFFFFFFFFFE"
383            - values:
384                - "0x777777777FFFFFFF"
385                - "-2"
386                - "2"
387            - values:
388                - "0x7654321080000000"
389                - "2"
390                - "0"
391
392      - file-name: "regs"
393        isa:
394          instructions:
395            - sig: mul v1:in:i32, v2:in:i32
396              acc: out:i32
397              format: [op_v1_4_v2_4]
398        runner-options: ['compile-only']
399        code-template: |
400          #
401              mul %s, %s
402        check-type: none
403        description: Check mul with various register numbers.
404        cases:
405          - values:
406              - v0
407              - v15
408          - values:
409              - v0
410              - v16
411            runner-options:
412              - compile-failure
413          - values:
414              - v15
415              - v0
416          - values:
417              - v16
418              - v0
419            runner-options:
420              - compile-failure
421
422      - file-name: "type"
423        tags: ["verifier"]
424        bugid: ['966', '964']
425        isa:
426          instructions:
427            - sig: mul v1:in:i32, v2:in:i32
428              acc: out:i32
429              format: [op_v1_4_v2_4]
430          verification:
431            - v1_type
432            - v2_type
433        runner-options: ['verifier-failure', 'verifier-debug-config']
434        code-template: |
435          #
436              %s
437              %s
438              mul v0, v1
439              ldai 0
440        check-type: no-check
441        description: Check mul with incorrect register types.
442        cases:
443          - values:
444              - "movi v0, 0"
445              - "mov.null v1"
446          - values:
447              - "mov.null v0"
448              - "movi v1, 0"
449          - values:
450              - "mov.null v0"
451              - "mov.null v1"
452