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