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