• 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: "cmp.64"
17    isa:
18      title: Integer comparison
19      description: Perform specified signed or unsigned integer comparison between register and accumulator.
20      exceptions:
21        - x_none
22    commands:
23      - file-name: "op_vs_8_eq"
24        isa:
25          instructions:
26            - sig: cmp.64 v:in:i64
27              acc: inout:i64->i32
28              format: [op_v_8]
29        check-type: check-positive
30        description: Check cmp.64 with equal values.
31        tags: ['tsan']
32        code-template: |
33            # test - compare equal values
34                ldai.64 %s
35                movi.64 v0, %s
36                cmp.64 v0
37        cases:
38          - values:
39              - "0"
40              - "0"
41          - values:
42              - "1"
43              - "1"
44          - values:
45              - "-1"
46              - "-1"
47          - values:
48              - "0x7fffffff"
49              - "0x7fffffff"
50          - values:
51              - "-0x7fffffff"
52              - "-0x7fffffff"
53          - values:
54              - "0x80000000"
55              - "0x80000000"
56          - values:
57              - "-0x80000000"
58              - "-0x80000000"
59          - values:
60              - "0xffffffff"
61              - "0xffffffff"
62          - values:
63              - "-0xffffffff"
64              - "-0xffffffff"
65          - values:
66              - "0x7fffffffffffffff"
67              - "0x7fffffffffffffff"
68          - values:
69              - "-9223372036854775808"
70              - "0x8000000000000000"
71
72      - file-name: "op_vs_8_lt"
73        isa:
74          instructions:
75            - sig: cmp.64 v:in:i64
76              acc: inout:i64->i32
77              format: [op_v_8]
78        check-type: check-positive
79        description: Check cmp.64 with different values.
80        tags: ['tsan']
81        code-template: |
82          # test - check less than
83                ldai.64 %s
84                movi.64 v0, %s
85                cmp.64 v0
86                addi 1
87        cases:
88          - values:
89            - "0"
90            - "0x0000000000000001"
91          - values:
92            - "-1"
93            - "0"
94          - values:
95            - "9223372036854775707"
96            - "9223372036854775807"
97          - values:
98            - "0x8000000000000000"
99            - "0x7fffffffffffffff"
100          - values:
101            - "0x8000000000000000"
102            - "0x8000000000000001"
103          - values:
104            - "-2"
105            - "0xffffffffffffffff"
106          - values:
107            - "0x7ffffffffffffffe"
108            - "9223372036854775807"
109          - values:
110            - "65535"
111            - "0x00010000"
112
113      - file-name: "op_vs_8_gt"
114        isa:
115          instructions:
116            - sig: cmp.64 v:in:i64
117              acc: inout:i64->i32
118              format: [op_v_8]
119        check-type: check-positive
120        description: Check cmp.64 with different values.
121        tags: ['tsan']
122        code-template: |
123          #   test - check greater than
124                ldai.64 %s
125                movi.64 v0, %s
126                cmp.64 v0
127                subi 1
128        cases:
129          - values:
130            - "0x0000000000000001"
131            - "0"
132          - values:
133            - "0"
134            - "-1"
135          - values:
136            - "9223372036854775807"
137            - "9223372036854775707"
138          - values:
139            - "0x7fffffffffffffff"
140            - "0x8000000000000000"
141          - values:
142            - "0x8000000000000001"
143            - "0x8000000000000000"
144          - values:
145            - "0xffffffffffffffff"
146            - "-2"
147          - values:
148            - "9223372036854775807"
149            - "0x7ffffffffffffffe"
150          - values:
151            - "0x00010000"
152            - "65535"
153
154      - file-name: "op_vs_8_reg256"
155        isa:
156          instructions:
157            - sig: cmp.64 v:in:i64
158              acc: inout:i64->i32
159              format: [op_v_8]
160        check-type: none
161        runner-options: [compile-failure]
162        description: Check cmp.64 with incorrect register numbers.
163        code-template: |
164          #
165              cmp.64 v256
166
167      - file-name: "op_vs_8_reg255"
168        isa:
169          instructions:
170            - sig: cmp.64 v:in:i64
171              acc: inout:i64->i32
172              format: [op_v_8]
173        check-type: none
174        runner-options: [compile-only]
175        description: Check cmp.64 with correct register numbers.
176        code-template: |
177          #
178              cmp.64 v255
179
180      - file-name: type
181        isa:
182          instructions:
183            - sig: cmp.64 v:in:i64
184              acc: inout:i64->i32
185              format: [op_v_8]
186          verification:
187            - v1_type
188            - acc_type
189        tags: ['verifier']
190        runner-options: ['verifier-failure', 'verifier-debug-config']
191        header-template: []
192        code-template: |
193          #
194          .record A {}
195          .record B {}
196          .record panda.String <external>
197          .record panda.Object <external>
198          .function i32 main() {
199              %s
200              *s
201              cmp.64 v0
202        check-type: exit-positive
203        description: Check 'cmp.64' with incorrect register type.
204        template-cases:
205          - values:
206              - movi v0, 0
207          - values:
208              - movi.64 v0, 0
209            exclude: [val]
210          - values:
211              - fmovi.64 v0, 0
212          - values:
213              - |
214                #
215                    lda.type B
216                    sta.obj v0
217          - values:
218              - |
219                #
220                    lda.type B[]
221                    sta.obj v0
222          - values:
223              - |
224                #
225                    lda.type panda.String
226                    sta.obj v0
227          - values:
228              - |
229                #
230                    lda.str "string"
231                    sta.obj v0
232          - values:
233              - |
234                #
235                    movi v0, 10
236                    newarr v0, v0, i32[]
237          - values:
238              - mov.null v0
239
240        cases:
241          - values:
242              - ldai 0
243          - values:
244              - ldai.64 0
245            id: val
246          - values:
247              - fldai.64 0
248          - values:
249              - |
250                #
251                    lda.type A
252          - values:
253              - |
254                #
255                    lda.type A[]
256          - values:
257              - |
258                #
259                    lda.type panda.String
260          - values:
261              - |
262                #
263                    lda.str "string"
264          - values:
265              - |
266                #
267                    movi v1, 10
268                    newarr v1, v1, f64[]
269                    lda.obj v1
270
271          - values:
272              - lda.null
273
274      - file-name: uninitialized_regs
275        isa:
276          instructions:
277            - sig: cmp.64 v:in:i64
278              acc: inout:i64->i32
279              format: [op_v_8]
280        description: Check 'cmp.64' with uninitialized registers.
281        tags: ['verifier']
282        runner-options: ['verifier-failure', 'verifier-debug-config']
283        header-template: []
284        code-template: |
285            #
286            .function i32 main() {
287                %s
288                *s
289                cmp.64 %s
290        check-type: exit-positive
291        template-cases:
292          - values:
293              - ''
294              - v0
295          - values:
296              - movi.64 v0, 0
297              - v0
298            exclude: [init]
299          - values:
300              - ''
301              - v7
302          - values:
303              - ''
304              - v15
305          - values:
306              - 'movi.64 v15, 0'
307              - v15
308            exclude: [init]
309          - values:
310              - ''
311              - v128
312          - values:
313              - 'movi.64 v128, 0'
314              - v128
315            exclude: [init]
316          - values:
317              - ''
318              - v255
319          - values:
320              - 'movi.64 v255, 0'
321              - v255
322            exclude: [init]
323        cases:
324          - values:
325              - ''
326          - values:
327              - ldai.64 0
328            id: init
329