• 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: "mov"
17    isa:
18        title: Move register-to-register
19        description: Move values between registers.
20        exceptions:
21          - x_none
22    commands:
23      - file-name: "op_vs_4_vs_4"
24        isa:
25          instructions:
26            - sig: mov v1:out:i32, v2:in:i32
27              acc: none
28              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
29        code-template: |
30          #
31              movi %s, 0x12345678
32              mov %s, %s
33              ldai 0x12345678
34              jne %s, set_failure
35              ldai 0
36              jmp fall_through
37          set_failure:
38              ldai 1
39          fall_through:
40        description: Check mov instruction with different register numbers (4 bit).
41        cases:
42          - values: [v0, v0, v0, v0]
43          - values: [v0, v1, v0, v1]
44          - values: [v0, v2, v0, v2]
45          - values: [v0, v4, v0, v4]
46          - values: [v0, v7, v0, v7]
47          - values: [v1, v1, v1, v1]
48          - values: [v1, v2, v1, v2]
49          - values: [v1, v4, v1, v4]
50          - values: [v1, v7, v1, v7]
51          - values: [v2, v2, v2, v2]
52          - values: [v2, v4, v2, v4]
53          - values: [v2, v7, v2, v7]
54          - values: [v4, v4, v4, v4]
55          - values: [v4, v7, v4, v7]
56          - values: [v7, v7, v7, v7]
57
58      - file-name: "op_vs_8_vs_8"
59        isa:
60          instructions:
61            - sig: mov v1:out:i32, v2:in:i32
62              acc: none
63              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
64        code-template: |
65          #
66              movi %s, 0x12345678
67              mov %s, %s
68              ldai 0x12345678
69              jne %s, set_failure
70              ldai 0
71              jmp fall_through
72          set_failure:
73              ldai 1
74          fall_through:
75        description: Check mov instruction with different register numbers (8 bit).
76        cases:
77          - values: [v0, v8, v0, v8]
78          - values: [v0, v64, v0, v64]
79          - values: [v0, v128, v0, v128]
80          - values: [v0, v255, v0, v255]
81          - values: [v8,   v0, v8, v0]
82          - values: [v64,  v0, v64, v0]
83          - values: [v128, v0, v128, v0]
84          - values: [v255, v0, v255, v0]
85          - values: [v8, v8, v8, v8]
86          - values: [v8, v64, v8, v64]
87          - values: [v8, v128, v8, v128]
88          - values: [v8, v255, v8, v255]
89          - values: [v64, v64, v64, v64]
90          - values: [v64, v128, v64, v128]
91          - values: [v64, v255, v64, v255]
92          - values: [v128, v128, v128, v128]
93          - values: [v128, v255, v128, v255]
94          - values: [v255, v255, v255, v255]
95
96      - file-name: "op_vs_16_vs_16"
97        isa:
98          instructions:
99            - sig: mov v1:out:i32, v2:in:i32
100              acc: none
101              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
102        code-template: |
103          #
104              movi v0, 0x12345678
105              mov %s, v0
106              mov %s, %s
107              mov v1, %s
108              ldai 0x12345678
109              jne v1, set_failure
110              ldai 0
111              jmp fall_through
112          set_failure:
113              ldai 1
114          fall_through:
115        description: Check mov instruction with different register numbers (16 bit).
116        tags: ['tsan']
117        cases:
118          - values: [v256, v256, v256, v256]
119          - values: [v256, v1024, v256, v1024]
120          - values: [v256, v32768, v256, v32768]
121          - values: [v256, v65535, v256, v65535]
122          - values: [v1024, v1024, v1024, v1024]
123          - values: [v1024, v32768, v1024, v32768]
124          - values: [v1024, v65535, v1024, v65535]
125          - values: [v32768, v32768, v32768, v32768]
126          - values: [v32768, v65535, v32768, v65535]
127          - values: [v65535, v65535, v65535, v65535]
128
129      - file-name: "err"
130        isa:
131          instructions:
132            - sig: mov v1:out:i32, v2:in:i32
133              acc: none
134              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
135        code-template: |
136          #
137              mov %s, %s
138        check-type: none
139        runner-options: [compile-failure]
140        description: Test erroneous code with mov instruction.
141        cases:
142          - values: [v0, v65536]
143            description: Check when register number is out of range.
144          - values: [v65536, v65536]
145            description: Check when register number is out of range.
146          - values: [v65536, v0]
147            description: Check when register number is out of range.
148          - values: [v65536, a0]
149            description: Check when register number is out of range and incorrect register name.
150          - values: [a0, v65536]
151            description: Check when register number is out of range and incorrect register name.
152          - values: [a0, a0]
153            description: Check when register number is out of range and incorrect register name.
154          - values: [1, v65536]
155            description: Check with incorrect destination and register number out of range.
156
157      - file-name: "type_1"
158        isa:
159          instructions:
160            - sig: mov v1:out:i32, v2:in:i32
161              acc: none
162              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
163        code-template: |
164          #
165              %s
166              mov v1, v0
167              %s
168              %s
169        bugid: ['1324']
170        tags: ['verifier']
171        runner-options: ['verifier-failure', 'verifier-debug-config']
172        description: |
173          Check mov with different type of source register - i64 (failure) values,
174          f64 (failure) values, Object (failure).
175        cases:
176          - values: ["movi.64 v0, 0", "ldai.64 0", "cmp.64 v1"]
177          - values: ["movi.64 v0, 0x12345678", "ldai.64 0x12345678", "cmp.64 v1"]
178          - values: ["movi.64 v0, 0x123456789", "ldai.64 0x123456789", "fcmpg.64 v1"]
179          - values: ["fmovi.64 v0, 0", "fldai.64 0", "fcmpg.64 v1"]
180          - values: ["fmovi.64 v0, 1", "fldai.64 1", "fcmpg.64 v1"]
181          - values: ["fmovi.64 v0, 0x1", "fldai.64 0x1", "fcmpg.64 v1"]
182          - values: ["fmovi.64 v0, 0x12345678", "fldai.64 0x12345678 ", "fcmpg.64 v1"]
183          - values: ["fmovi.64 v0, 0x123456789", "fldai.64 0x123456789", "fcmpg.64 v1"]
184          - values:
185            - mov.null v0
186            - lda.null
187            - |
188              #
189                  jne.obj v1, return_ne_num
190                  ldai 0
191                  return
192              return_ne_num:
193                  ldai 1
194                  return
195
196      - file-name: "vals_pos"
197        isa:
198          instructions:
199            - sig: mov v1:out:i32, v2:in:i32
200              acc: none
201              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
202        code-template: |
203          #
204              movi v0, %s
205              mov v1, v0
206              lda v0
207              jne v1, set_failure
208              ldai 0
209              jmp fall_through
210          set_failure:
211              ldai 1
212          fall_through:
213        description: Check mov instruction moves value from register to register.
214        cases:
215          - values: ['0']
216          - values: ['1']
217          - values: ['0x80']
218          - values: ['0xff']
219          - values: ['0x8000']
220          - values: ['0xffff']
221          - values: ['0x80000000']
222          - values: ['0xffffffff']
223          - values: ['0x12345678']
224          - values: ['0x87654321']
225
226      - file-name: "vals_neg"
227        isa:
228          instructions:
229            - sig: mov v1:out:i32, v2:in:i32
230              acc: none
231              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
232        code-template: |
233          #
234              movi v0, %s
235              mov v1, v0
236              lda v0
237              jne v1, set_failure
238              ldai 0
239              jmp fall_through
240          set_failure:
241              ldai 1
242          fall_through:
243        description: Check mov instruction moves values from register to register
244        cases:
245          - values: ['-1']
246          - values: ['-0x80']
247          - values: ['-0xff']
248          - values: ['-0x8000']
249          - values: ['-0xffff']
250          - values: ['-0x80000000']
251          - values: ['-0xffffffff']
252          - values: ['-0x12345678']
253          - values: ['-0x87654321']
254
255      - file-name: "type"
256        tags: ['verifier']
257        isa:
258          instructions:
259            - sig: mov v1:out:i32, v2:in:i32
260              acc: none
261              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
262          verification:
263            - v2_type
264        runner-options: ['verifier-failure', 'verifier-debug-config']
265        header-template: []
266        code-template: |
267            #
268            .record A {}
269            .record B {}
270            .record panda.String <external>
271            .record panda.Object <external>
272            .function i32 main() {
273                %s
274                *s
275                mov v0, v1
276                ldai 0
277        check-type: no-check
278        description: Check mov with incorrect source register type. Destination type is not checked.
279        template-cases:
280          - values:
281              - |
282                #
283                    lda.type B
284                    sta.obj v0
285          - values:
286              - |
287                #
288                    lda.type B[]
289                    sta.obj v0
290          - values:
291              - |
292                #
293                    lda.type panda.String
294                    sta.obj v0
295          - values:
296              - |
297                #
298                    lda.type panda.Object
299                    sta.obj v0
300          - values:
301              - |
302                #
303                    movi v0, 10
304                    newarr v0, v0, i32[]
305          - values:
306              - mov.null v0
307          - values:
308              - movi v0, 0
309          - values:
310              - movi.64 v0, 0
311          - values:
312              - fmovi.64 v0, 0
313        cases:
314          - values:
315              - movi.64 v1, 0
316          - values:
317              - fmovi.64 v1, 0
318          - values:
319              - |
320                #
321                    lda.type A
322                    sta.obj v1
323          - values:
324              - |
325                #
326                    lda.type A[]
327                    sta.obj v1
328          - values:
329              - |
330                #
331                    lda.type panda.String
332                    sta.obj v1
333          - values:
334              - |
335                #
336                    lda.str "string"
337                    sta.obj v1
338          - values:
339              - |
340                #
341                    lda.type panda.Object
342                    sta.obj v1
343          - values:
344              - |
345                #
346                    movi v1, 10
347                    newarr v1, v1, f64[]
348          - values:
349              - mov.null v1
350
351      - file-name: uninitialized_regs
352        isa:
353          instructions:
354            - sig: mov v1:out:i32, v2:in:i32
355              acc: none
356              format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
357        description: Check mov with uninitialized registers.
358        tags: ['verifier']
359        runner-options: ['verifier-failure', 'verifier-debug-config']
360        header-template: []
361        code-template: |
362          #
363          .function u32 main() {
364              %s
365              *s
366              mov %s, *s
367              ldai 0
368        check-type: no-check
369        template-cases:
370          - values: ['', 'v0']
371          - values: ['', 'v256']
372          - values: ['', 'v65535']
373          - values:
374              - movi.64 v2, 0
375              - v2
376          - values:
377              - |
378                #
379                    fmovi.64 v1, 0
380                    mov.64 v65534, v1
381              - v65534
382          - values:
383              - |
384                #
385                    fmovi.64 v1, 0
386                    mov.64 v257, v1
387              - v257
388        cases:
389          - values:
390              - ''
391              - v0
392          - values:
393              - ''
394              - v8
395          - values:
396              - ''
397              - v15
398          - values:
399              - ''
400              - v256
401          - values:
402              - ''
403              - v65535
404