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"
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 v:in:i32
28              acc: inout:i32
29              prefix: bit
30              format: [pref_op_v_8]
31        code-template: |
32          #
33              ldai 0
34              movi v0, %s
35              mov v1, v0
36              xor2 v0
37              mov v0, v1
38              jne v0, set_failure
39              ldai 0
40              jmp fall_through
41          set_failure:
42              ldai 1
43          fall_through:
44        description: Check xor2 with zero and various values.
45        cases:
46          - values:
47              - "0"
48          - values:
49              - "1"
50          - values:
51              - "-1"
52          - values:
53              - "0x7FFFFFFF"
54          - values:
55              - "0x80000000"
56          - values:
57              - "-0x7FFFFFFF"
58          - values:
59              - "-0x80000000"
60          - values:
61              - "0xFFFFFFFF"
62          - values:
63              - "-0xFFFFFFFF"
64
65      - file-name: "op_vs_8_pone"
66        isa:
67          instructions:
68            - sig: xor2 v:in:i32
69              acc: inout:i32
70              prefix: bit
71              format: [pref_op_v_8]
72        code-template: |
73          #
74              ldai 1
75              movi v0, %s
76              xor2 v0
77              movi v0, %s
78              jne v0, set_failure
79              ldai 0
80              jmp fall_through
81          set_failure:
82              ldai 1
83          fall_through:
84        description: Check xor2 with +1 and various values.
85        cases:
86          - values:
87              - "0"
88              - "1"
89          - values:
90              - "1"
91              - "0"
92          - values:
93              - "-1"
94              - "-2"
95          - values:
96              - "0x7FFFFFFF"
97              - "0x7FFFFFFE"
98          - values:
99              - "0x80000000"
100              - "0x80000001"
101          - values:
102              - "-0x7FFFFFFF"
103              - "0x80000000"
104          - values:
105              - "-0x80000000"
106              - "0x80000001"
107          - values:
108              - "0xFFFFFFFF"
109              - "0xFFFFFFFE"
110          - values:
111              - "-0xFFFFFFFF"
112              - "0"
113      - file-name: "op_vs_8_none"
114        isa:
115          instructions:
116            - sig: xor2 v:in:i32
117              acc: inout:i32
118              prefix: bit
119              format: [pref_op_v_8]
120        code-template: |
121          #
122              ldai -1
123              movi v0, %s
124              xor2 v0
125              movi v0, %s
126              jne v0, set_failure
127              ldai 0
128              jmp fall_through
129          set_failure:
130              ldai 1
131          fall_through:
132        description: Check xor2 with -1 and various values.
133        cases:
134          - values:
135              - "0"
136              - "0xFFFFFFFF"
137          - values:
138              - "1"
139              - "0xFFFFFFFE"
140          - values:
141              - "-1"
142              - "0"
143          - values:
144              - "0x7FFFFFFF"
145              - "0x80000000"
146          - values:
147              - "0x80000000"
148              - "0x7FFFFFFF"
149          - values:
150              - "-0x7FFFFFFF"
151              - "0x7FFFFFFE"
152          - values:
153              - "-0x80000000"
154              - "0x7FFFFFFF"
155          - values:
156              - "0xFFFFFFFF"
157              - "0"
158          - values:
159              - "-0xFFFFFFFF"
160              - "0xFFFFFFFE"
161
162      - file-name: "op_vs_8_pmax"
163        isa:
164          instructions:
165            - sig: xor2 v:in:i32
166              acc: inout:i32
167              prefix: bit
168              format: [pref_op_v_8]
169        code-template: |
170          #
171              ldai 0x7FFFFFFF
172              movi v0, %s
173              xor2 v0
174              movi v0, %s
175              jne v0, set_failure
176              ldai 0
177              jmp fall_through
178          set_failure:
179              ldai 1
180          fall_through:
181        description: Check xor2 with +max and various values.
182        cases:
183          - values:
184              - "0"
185              - "0x7FFFFFFF"
186          - values:
187              - "1"
188              - "0x7FFFFFFE"
189          - values:
190              - "-1"
191              - "0x80000000"
192          - values:
193              - "0x7FFFFFFF"
194              - "0"
195          - values:
196              - "0x80000000"
197              - "0xFFFFFFFF"
198          - values:
199              - "-0x7FFFFFFF"
200              - "0xFFFFFFFE"
201          - values:
202              - "-0x80000000"
203              - "0xFFFFFFFF"
204          - values:
205              - "0xFFFFFFFF"
206              - "0x80000000"
207          - values:
208              - "-0xFFFFFFFF"
209              - "0x7FFFFFFE"
210
211      - file-name: "op_vs_8_nmax"
212        isa:
213          instructions:
214            - sig: xor2 v:in:i32
215              acc: inout:i32
216              prefix: bit
217              format: [pref_op_v_8]
218        code-template: |
219          #
220              ldai -0x80000000
221              movi v0, %s
222              xor2 v0
223              movi v0, %s
224              jne v0, set_failure
225              ldai 0
226              jmp fall_through
227          set_failure:
228              ldai 1
229          fall_through:
230        description: Check xor2 with -max and various values.
231        cases:
232          - values:
233              - "0"
234              - "0x80000000"
235          - values:
236              - "1"
237              - "0x80000001"
238          - values:
239              - "-1"
240              - "0x7FFFFFFF"
241          - values:
242              - "0x7FFFFFFF"
243              - "0xFFFFFFFF"
244          - values:
245              - "0x80000000"
246              - "0"
247          - values:
248              - "-0x7FFFFFFF"
249              - "1"
250          - values:
251              - "-0x80000000"
252              - "0"
253          - values:
254              - "0xFFFFFFFF"
255              - "0x7FFFFFFF"
256          - values:
257              - "-0xFFFFFFFF"
258              - "0x80000001"
259
260      - file-name: "vals"
261        isa:
262          instructions:
263            - sig: xor2 v:in:i32
264              acc: inout:i32
265              prefix: bit
266              format: [pref_op_v_8]
267        code-template: |
268          #
269              ldai %s
270              movi v0, %s
271              xor2 v0
272              movi v0, %s
273              jne v0, set_failure
274              ldai 0
275              jmp fall_through
276          set_failure:
277              ldai 1
278          fall_through:
279        description: Check xor2 with various values.
280        tags: ['tsan']
281        cases:
282          - values:
283              - "0xD5899254"
284              - "0x1A4A299A"
285              - "0xCFC3BBCE"
286          - values:
287              - "0xF4D6AAC6"
288              - "0x1EA9F134"
289              - "0xEA7F5BF2"
290          - values:
291              - "0xA54CE385"
292              - "0xE64C451A"
293              - "0x4300A69F"
294          - values:
295              - "0xCFD219"
296              - "0xDD412AC4"
297              - "0xDD8EF8DD"
298          - values:
299              - "0x5F803721"
300              - "0xA6D40762"
301              - "0xF9543043"
302          - values:
303              - "0xC05A503D"
304              - "0x4DBE3911"
305              - "0x8DE4692C"
306          - values:
307              - "0xB14B6559"
308              - "0xCC9B598A"
309              - "0x7DD03CD3"
310          - values:
311              - "0x6D781048"
312              - "0x93215EED"
313              - "0xFE594EA5"
314          - values:
315              - "0xE92EADFC"
316              - "0x7C4B8500"
317              - "0x956528FC"
318          - values:
319              - "0xF655FFB4"
320              - "0xCF684F7B"
321              - "0x393DB0CF"
322
323      - file-name: "vals_mod32_1"
324        bugid: ['1324']
325        tags: ['verifier']
326        runner-options: ['verifier-failure', 'verifier-config']
327        isa:
328          instructions:
329            - sig: xor2 v:in:i32
330              acc: inout:i32
331              prefix: bit
332              format: [pref_op_v_8]
333        code-template: |
334          #
335              ldai.64 %s
336              movi.64 v0, %s
337              xor2 v0
338              movi.64 v0, %s
339              cmp.64 v0
340        description: Check xor2 with incorrect accumulator and register types.
341        cases:
342          - values:
343              - "0x17FFFFFFF"
344              - "0x7FFFFFFF"
345              - "0"
346          - values:
347              - "0x77777777FFFFFFFF"
348              - "0x1111111180000000"
349              - "0x000000007FFFFFFF"
350          - values:
351              - "0x180000000"
352              - "0xF80000000"
353              - "0"
354
355      - file-name: "regs"
356        isa:
357          instructions:
358            - sig: xor2 v:in:i32
359              acc: inout:i32
360              prefix: bit
361              format: [pref_op_v_8]
362        runner-options: ['compile-only']
363        code-template: |
364          #
365              xor2 %s
366        check-type: none
367        description: Check xor2 with various register numbers.
368        cases:
369          - values:
370              - "v255"
371          - values:
372              - "v256"
373            runner-options: ['compile-failure']
374
375      - file-name: "type"
376        bugid: ["964", "966"]
377        tags: ["verifier"]
378        isa:
379          verification:
380            - acc_type
381            - v1_type
382        runner-options: ['verifier-failure', 'verifier-config']
383        header-template: []
384        code-template: |
385          .record T {}
386          .function i32 main() {
387              %s
388              *s
389              xor2 v0
390        check-type: exit-positive
391        description: Check 'xor2' with incorrect accumulator and/or register types.
392        cases:
393          - values:
394            - ldai 0
395            id: acc_ok
396          - values:
397            - ldai.64 0
398          - values:
399            - fldai 0
400            bugid: ['7315']
401          - values:
402            - fldai.64 0
403          - values:
404            - lda.null
405          - values:
406            - |
407              #
408                  movi v1, 0
409                  newarr v1, v1, i32[]
410                  lda.obj v1
411          - values:
412            - lda.str "0"
413          - values:
414            - lda.type T
415          - values:
416            - |
417              #
418                  newobj v1, T
419                  lda.obj v1
420        template-cases:
421          - values:
422            - movi v0, 0
423            exclude: [acc_ok]
424          - values:
425            - movi.64 v0, 0
426          - values:
427            - fmovi v0, 0
428            bugid: ['7315']
429          - values:
430            - fmovi.64 v0, 0
431          - values:
432            - mov.null v0
433          - values:
434            - |
435              #
436                  movi v0, 0
437                  newarr v0, v0, i32[]
438          - values:
439            - |
440              #
441                  lda.str "0"
442                  sta.obj v0
443          - values:
444            - |
445              #
446                  lda.type T
447                  sta.obj v0
448          - values:
449            - newobj v0, T
450
451
452      - file-name: uninitialized_regs
453        isa:
454          instructions:
455            - sig: xor2 v:in:i32
456              acc: inout:i32
457              prefix: bit
458              format: [pref_op_v_8]
459        description: Check 'xor2' with uninitialized registers.
460        tags: ['verifier']
461        runner-options: ['verifier-failure', 'verifier-config']
462        code-template: |
463          #
464              %s
465              *s
466              xor2 *s
467        check-type: exit-positive
468        template-cases:
469          - values:
470              - ''
471          - values:
472              - ldai 0
473            exclude: [init]
474        cases:
475          - values:
476              - ''
477              - v0
478          - values:
479              - movi v1, 0
480              - v1
481            id: init
482          - values:
483              - ''
484              - v8
485          - values:
486              - ''
487              - v15
488          - values:
489              - movi v15, 0
490              - v15
491            id: init
492