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: 'neg'
17    isa:
18      title: Unary
19      description: >
20        Perform specified operation on accumulator
21      exceptions:
22        - x_none
23
24    commands:
25      - file-name: 'op_none'
26        isa:
27          instructions:
28            - sig: neg
29              acc: inout:i32
30              format: [op_none]
31        code-template: |
32          #
33              ldai %s
34              neg
35              movi v0, %s
36              jne v0, set_failure
37              ldai 0
38              return
39          set_failure:
40              ldai 1
41              return
42        check-type: none
43        description: Check `neg` with various values.
44        tags: ['tsan']
45        cases:
46          - values: ['0', '0x0']
47          - values: ['1', '0xFFFFFFFF']
48          - values: ['-1', '0x1']
49          - values: ['0xF', '0xFFFFFFF1']
50          - values: ['-0xF', '0xF']
51          - values: ['0x7F', '0xFFFFFF81']
52          - values: ['-0x7F', '0x7F']
53          - values: ['0x80', '0xFFFFFF80']
54          - values: ['-0x80', '0x80']
55          - values: ['0xFF', '0xFFFFFF01']
56          - values: ['-0xFF', '0xFF']
57          - values: ['0xFFF', '0xFFFFF001']
58          - values: ['-0xFFF', '0xFFF']
59          - values: ['0xFFFF', '0xFFFF0001']
60          - values: ['-0xFFFF', '0xFFFF']
61          - values: ['0xFFFFF', '0xFFF00001']
62          - values: ['-0xFFFFF', '0xFFFFF']
63          - values: ['0xFFFFFF', '0xFF000001']
64          - values: ['-0xFFFFFF', '0xFFFFFF']
65          - values: ['0xFFFFFFF', '0xF0000001']
66          - values: ['-0xFFFFFFF', '0xFFFFFFF']
67          - values: ['0x7FFFFFFF', '0x80000001']
68          - values: ['-0x7FFFFFFF', '0x7FFFFFFF']
69          - values: ['0x80000000', '0x80000000']
70            tags: [sanitizer-fail]
71          - values: ['-0x80000000', '0x80000000']
72            tags: [sanitizer-fail]
73          - values: ['0xFFFFFFFF', '0x1']
74          - values: ['-0xFFFFFFFF', '0xFFFFFFFF']
75
76      - file-name: 'vals'
77        isa:
78          instructions:
79            - sig: neg
80              acc: inout:i32
81              format: [op_none]
82        code-template: |
83          #
84              ldai %s
85              neg
86              movi v0, %s
87              jne v0, set_failure
88              ldai 0
89              return
90          set_failure:
91              ldai 1
92              return
93        check-type: none
94        description: Check `neg` with various values.
95        cases:
96          - values: ['0x2FEAEDB4', '0xD015124C']
97          - values: ['0x9C6C30BF', '0x6393CF41']
98          - values: ['0x1BF216CF', '0xE40DE931']
99          - values: ['0xDF9CD1F7', '0x20632E09']
100          - values: ['0xF40F9EF9', '0xBF06107']
101          - values: ['0x7941CA86', '0x86BE357A']
102          - values: ['0x50E20B50', '0xAF1DF4B0']
103          - values: ['0xA6098C4', '0xF59F673C']
104          - values: ['0x74FBE6DD', '0x8B041923']
105          - values: ['0x337D0DA3', '0xCC82F25D']
106          - values: ['0xF7E0915C', '0x81F6EA4']
107          - values: ['0x4513D47D', '0xBAEC2B83']
108          - values: ['0xC77ECE9', '0xF3881317']
109          - values: ['0xFF812549', '0x7EDAB7']
110          - values: ['0x19715C4F', '0xE68EA3B1']
111          - values: ['0x8A8CB359', '0x75734CA7']
112          - values: ['0x5C6E79E0', '0xA3918620']
113          - values: ['0xC1D11086', '0x3E2EEF7A']
114          - values: ['0x834E4631', '0x7CB1B9CF']
115          - values: ['0x2F5F3BC2', '0xD0A0C43E']
116
117      - file-name: type
118        bugid: ['964', '966']
119        tags: ['verifier']
120        isa:
121          verification:
122            - acc_type
123        runner-options: ['verifier-failure', 'verifier-config']
124        header-template: []
125        code-template: |
126          .record T {}
127          .record panda.String <external>
128          .record panda.Object <external>
129          #
130          .function i32 main() {
131              %s
132              neg
133        check-type: exit-positive
134        description: Check `neg` with incorrect accumulator type.
135        cases:
136          - values:
137              - ldai.64 1
138          - values:
139              - fldai 1
140          - values:
141              - fldai.64 1.0
142          - values:
143              - lda.type T
144          - values:
145              - lda.type T[]
146          - values:
147              - lda.type panda.Object
148          - values:
149              - lda.type panda.String
150          - values:
151              - lda.str "x"
152          - values:
153              - |
154                newobj v0, T
155                lda.obj v0
156          - values:
157              - lda.null
158          - values:
159              - |
160                #
161                    movi v0, 10
162                    newarr v0, v0, i32[]
163                    lda.obj v0
164
165      - file-name: uninitialized_regs
166        bugid: ['2787']
167        tags: ['verifier']
168        isa:
169          instructions:
170            - sig: neg
171              acc: inout:i32
172              format: [op_none]
173        description: Check neg with uninitialized accumulator.
174        runner-options: ['verifier-failure', 'verifier-config']
175        header-template: []
176        code-template: |
177          #
178          .function i32 main() {
179              # acc is undefined
180              neg
181        check-type: exit-positive
182