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