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