• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021 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                jmp fall_through
39            set_failure:
40                ldai 1
41            fall_through:
42        description: Check `neg` with various values.
43        tags: ['tsan', 'clang_release_sanitizer']
44        cases:
45          - values: ["0", "0x0"]
46          - values: ["1", "0xFFFFFFFF"]
47          - values: ["-1", "0x1"]
48          - values: ["0xF", "0xFFFFFFF1"]
49          - values: ["-0xF", "0xF"]
50          - values: ["0x7F", "0xFFFFFF81"]
51          - values: ["-0x7F", "0x7F"]
52          - values: ["0x80", "0xFFFFFF80"]
53          - values: ["-0x80", "0x80"]
54          - values: ["0xFF", "0xFFFFFF01"]
55          - values: ["-0xFF", "0xFF"]
56          - values: ["0xFFF", "0xFFFFF001"]
57          - values: ["-0xFFF", "0xFFF"]
58          - values: ["0xFFFF", "0xFFFF0001"]
59          - values: ["-0xFFFF", "0xFFFF"]
60          - values: ["0xFFFFF", "0xFFF00001"]
61          - values: ["-0xFFFFF", "0xFFFFF"]
62          - values: ["0xFFFFFF", "0xFF000001"]
63          - values: ["-0xFFFFFF", "0xFFFFFF"]
64          - values: ["0xFFFFFFF", "0xF0000001"]
65          - values: ["-0xFFFFFFF", "0xFFFFFFF"]
66          - values: ["0x7FFFFFFF", "0x80000001"]
67          - values: ["-0x7FFFFFFF", "0x7FFFFFFF"]
68          - values: ["0x80000000", "0x80000000"]
69          - values: ["-0x80000000", "0x80000000"]
70          - values: ["0xFFFFFFFF", "0x1"]
71          - values: ["-0xFFFFFFFF", "0xFFFFFFFF"]
72
73      - file-name: "vals"
74        isa:
75          instructions:
76            - sig: neg
77              acc: inout:i32
78              format: [op_none]
79        code-template: |
80          #
81              ldai %s
82              neg
83              movi v0, %s
84              jne v0, set_failure
85              ldai 0
86              jmp fall_through
87          set_failure:
88              ldai 1
89          fall_through:
90        description: Check `neg` with various values.
91        cases:
92          - values: ["0x2FEAEDB4", "0xD015124C"]
93          - values: ["0x9C6C30BF", "0x6393CF41"]
94          - values: ["0x1BF216CF", "0xE40DE931"]
95          - values: ["0xDF9CD1F7", "0x20632E09"]
96          - values: ["0xF40F9EF9", "0xBF06107"]
97          - values: ["0x7941CA86", "0x86BE357A"]
98          - values: ["0x50E20B50", "0xAF1DF4B0"]
99          - values: ["0xA6098C4", "0xF59F673C"]
100          - values: ["0x74FBE6DD", "0x8B041923"]
101          - values: ["0x337D0DA3", "0xCC82F25D"]
102          - values: ["0xF7E0915C", "0x81F6EA4"]
103          - values: ["0x4513D47D", "0xBAEC2B83"]
104          - values: ["0xC77ECE9", "0xF3881317"]
105          - values: ["0xFF812549", "0x7EDAB7"]
106          - values: ["0x19715C4F", "0xE68EA3B1"]
107          - values: ["0x8A8CB359", "0x75734CA7"]
108          - values: ["0x5C6E79E0", "0xA3918620"]
109          - values: ["0xC1D11086", "0x3E2EEF7A"]
110          - values: ["0x834E4631", "0x7CB1B9CF"]
111          - values: ["0x2F5F3BC2", "0xD0A0C43E"]
112
113      - file-name: type
114        bugid: ["964", "966"]
115        tags: ["verifier"]
116        isa:
117          instructions:
118            - sig: neg
119              acc: inout:i32
120              format: [op_none]
121          verification:
122            - acc_type
123        runner-options: ['verifier-failure', 'verifier-debug-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.64 1.0
140          - values:
141            - lda.type T
142          - values:
143            - lda.type T[]
144          - values:
145            - lda.type panda.Object
146          - values:
147            - lda.type panda.String
148          - values:
149            - lda.str "x"
150          - values:
151            - |
152              newobj v0, T
153              lda.obj v0
154          - values:
155            - lda.null
156          - values:
157            - |
158              #
159                  movi v0, 10
160                  newarr v0, v0, i32[]
161                  lda.obj v0
162
163      - file-name: uninitialized_regs
164        bugid: ["2787"]
165        tags: ["verifier"]
166        isa:
167          instructions:
168            - sig: neg
169              acc: inout:i32
170              format: [op_none]
171        description: Check neg with uninitialized accumulator.
172        runner-options: ['verifier-failure', 'verifier-debug-config']
173        header-template: []
174        code-template: |
175          #
176          .function i32 main() {
177              # acc is undefined
178              neg
179        check-type: exit-positive
180