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