• 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: "mul2"
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: mul2 v:in:i32
28              acc: inout:i32
29              format: [op_v_8]
30        code-template: |
31          #
32              ldai 0
33              movi v0, %s
34              mul2 v0
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 mul2 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_vs_8_pone"
64        isa:
65          instructions:
66            - sig: mul2 v:in:i32
67              acc: inout:i32
68              format: [op_v_8]
69        code-template: |
70          #
71              ldai 1
72              movi v0, %s
73              mul2 v0
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 mul2 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_vs_8_none"
111        isa:
112          instructions:
113            - sig: mul2 v:in:i32
114              acc: inout:i32
115              format: [op_v_8]
116        code-template: |
117          #
118              ldai -1
119              movi v0, %s
120              mul2 v0
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 mul2 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_vs_8_pmax"
162        isa:
163          instructions:
164            - sig: mul2 v:in:i32
165              acc: inout:i32
166              format: [op_v_8]
167        code-template: |
168          #
169              ldai 0x7FFFFFFF
170              movi v0, %s
171              mul2 v0
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 mul2 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_vs_8_nmax"
218        tags: ["clang_release_sanitizer"]
219        bugid: ['966']
220        isa:
221          instructions:
222            - sig: mul2 v:in:i32
223              acc: inout:i32
224              format: [op_v_8]
225        code-template: |
226          #
227              ldai -0x80000000
228              movi v0, %s
229              mul2 v0
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 mul2 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: mul2 v:in:i32
271              acc: inout:i32
272              format: [op_v_8]
273        code-template: |
274          #
275              ldai %s
276              movi v0, %s
277              mul2 v0
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 mul2 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: mul2 v:in:i32
334              acc: inout:i32
335              format: [op_v_8]
336        code-template: |
337          #
338              ldai %s
339              movi v0, %s
340              mul2 v0
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 mul2 with incorrect accumulator ang register type.
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        tags: ["verifier"]
363        bugid: ['1324', '966']
364        runner-options: ['verifier-failure', 'verifier-debug-config']
365        isa:
366          instructions:
367            - sig: mul2 v:in:i32
368              acc: inout:i32
369              format: [op_v_8]
370        code-template: |
371            #
372                ldai.64 %s
373                movi.64 v0, %s
374                mul2 v0
375                movi.64 v0, %s
376                cmp.64 v0
377        description: Check mul2 with incorrect accumulator ang register type.
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: mul2 v:in:i32
396              acc: inout:i32
397              format: [op_v_8]
398        runner-options: ['compile-only']
399        code-template: |
400          #
401              mul2 %s
402        check-type: none
403        description: Check mul2 with various register numbers.
404        cases:
405          - values:
406              - "v255"
407          - values:
408              - "v256"
409            runner-options: ['compile-failure']
410
411      - file-name: "type"
412        tags: ["verifier"]
413        bugid: ['966', '964']
414        isa:
415          instructions:
416            - sig: mul2 v:in:i32
417              acc: inout:i32
418              format: [op_v_8]
419          verification:
420            - acc_type
421            - v1_type
422        runner-options: ['verifier-failure', 'verifier-debug-config']
423        code-template: |
424          #
425              %s
426              %s
427              mul2 v0
428              ldai 0
429        check-type: no-check
430        description: Check mul2 with incorrect accumulator ang register type.
431        cases:
432          - values:
433              - "lda.null"
434              - "movi v0, 0"
435          - values:
436              - "ldai 0 "
437              - "mov.null v0"
438          - values:
439              - "lda.null"
440              - "mov.null v0"
441