• 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: "inci"
17    isa:
18      title: Increment register with immediate
19      description: >
20        Increment virtual register by specified immediate. Immediate is sign extended to operand size.
21      exceptions:
22        - x_none
23    commands:
24      - file-name: "op_v_4_imm_4_zero"
25        isa:
26          instructions:
27            - sig: inci v:inout:i32, imm:i32
28              acc: none
29              format: [op_v_4_imm_4]
30        code-template: |
31          #
32              movi v0, 0
33              inci v0, %s
34              ldai %s
35              jne v0, set_failure
36              ldai 0
37              jmp fall_through
38          set_failure:
39              ldai 1
40          fall_through:
41
42        description: Check `inci` with various values.
43        cases:
44          - values: ["0", "0x0"]
45          - values: ["1", "0x1"]
46          - values: ["-1", "0xFFFFFFFF"]
47          - values: ["0x7", "0x7"]
48          - values: ["-0x7", "0xFFFFFFF9"]
49          - values: ["0x8", "0xFFFFFFF8"]
50          - values: ["-0x8", "0xFFFFFFF8"]
51          - values: ["0xF", "0xFFFFFFFF"]
52          - values: ["-0xF", "0x1"]
53
54          # The following tests truncates first argument to imm4 size.
55          - values: ["0xF1", "1"]
56          - values: ["-0xF1", "-1"]
57          - values: ["0xF7", "7"]
58          - values: ["-0xF7", "-7"]
59          - values: ["0xF8", "-8"]
60          - values: ["-0xF8", "-8"]
61          - values: ["0xFF", "-1"]
62          - values: ["-0xFF", "1"]
63          - values: ["0xFFFF", "-1"]
64          - values: ["-0xFFFF", "1"]
65          - values: ["0xFFFFFF", "-1"]
66          - values: ["-0xFFFFFF", "1"]
67          - values: ["0xFFFFFFFF", "-1"]
68          - values: ["-0xFFFFFFFF", "1"]
69
70      - file-name: "op_v_4_imm_4_pone"
71        isa:
72          instructions:
73            - sig: inci v:inout:i32, imm:i32
74              acc: none
75              format: [op_v_4_imm_4]
76        code-template: |
77          #
78              movi v0, 1
79              inci v0, %s
80              ldai %s
81              jne v0, set_failure
82              ldai 0
83              jmp fall_through
84          set_failure:
85              ldai 1
86          fall_through:
87        description: Check `inci` with various values.
88        cases:
89          - values: ["0", "0x1"]
90          - values: ["1", "0x2"]
91          - values: ["-1", "0"]
92          - values: ["0x7", "0x8"]
93          - values: ["-0x7", "0xFFFFFFFA"]
94          - values: ["0x8", "0xFFFFFFF9"]
95          - values: ["-0x8", "0xFFFFFFF9"]
96          - values: ["0xF", "0"]
97          - values: ["-0xF", "0x2"]
98      - file-name: "op_v_4_imm_4_none"
99        isa:
100          instructions:
101            - sig: inci v:inout:i32, imm:i32
102              acc: none
103              format: [op_v_4_imm_4]
104        code-template: |
105          #
106              movi v0, -1
107              inci v0, %s
108              ldai %s
109              jne v0, set_failure
110              ldai 0
111              jmp fall_through
112          set_failure:
113              ldai 1
114          fall_through:
115        description: Check `inci` with various values.
116        cases:
117          - values: ["0", "0xFFFFFFFF"]
118          - values: ["1", "0"]
119          - values: ["-1", "0xFFFFFFFE"]
120          - values: ["0x7", "0x6"]
121          - values: ["-0x7", "0xFFFFFFF8"]
122          - values: ["0x8", "0xFFFFFFF7"]
123          - values: ["-0x8", "0xFFFFFFF7"]
124          - values: ["0xF", "0xFFFFFFFE"]
125          - values: ["-0xF", "0"]
126
127      - file-name: "op_v_4_imm_4_pmax"
128        isa:
129          instructions:
130            - sig: inci v:inout:i32, imm:i32
131              acc: none
132              format: [op_v_4_imm_4]
133        code-template: |
134          #
135              movi v0, 0x7FFFFFFF
136              inci v0, %s
137              ldai %s
138              jne v0, set_failure
139              ldai 0
140              jmp fall_through
141          set_failure:
142              ldai 1
143          fall_through:
144        description: Check `inci` with various values.
145        tags: ['clang_release_sanitizer']
146        cases:
147          - values: ["0", "0x7FFFFFFF"]
148          - values: ["1", "0x80000000"]
149          - values: ["-1", "0x7FFFFFFE"]
150          - values: ["0x7", "0x80000006"]
151          - values: ["-0x7", "0x7FFFFFF8"]
152          - values: ["0x8", "0x7FFFFFF7"]
153          - values: ["-0x8", "0x7FFFFFF7"]
154          - values: ["0xF", "0x7FFFFFFE"]
155          - values: ["-0xF", "0x80000000"]
156
157      - file-name: "op_v_4_imm_4_nmax"
158        isa:
159          instructions:
160            - sig: inci v:inout:i32, imm:i32
161              acc: none
162              format: [op_v_4_imm_4]
163        code-template: |
164          #
165              movi v0, 0x80000000
166              inci v0, %s
167              ldai %s
168              jne v0, set_failure
169              ldai 0
170              jmp fall_through
171          set_failure:
172              ldai 1
173          fall_through:
174        description: Check `inci` with various values.
175        tags: ['clang_release_sanitizer']
176        cases:
177          - values: ["0", "0x80000000"]
178          - values: ["1", "0x80000001"]
179          - values: ["-1", "0x7FFFFFFF"]
180          - values: ["0x7", "0x80000007"]
181          - values: ["-0x7", "0x7FFFFFF9"]
182          - values: ["0x8", "0x7FFFFFF8"]
183          - values: ["-0x8", "0x7FFFFFF8"]
184          - values: ["0xF", "0x7FFFFFFF"]
185          - values: ["-0xF", "0x80000001"]
186
187      - file-name: "values"
188        isa:
189          instructions:
190            - sig: inci v:inout:i32, imm:i32
191              acc: none
192              format: [op_v_4_imm_4]
193        code-template: |
194          #
195              movi v0, %s
196              inci v0, %s
197              movi v1, %s
198              lda v0
199              jne v0, set_failure
200              ldai 0
201              jmp fall_through
202          set_failure:
203              ldai 1
204          fall_through:
205
206        description: Check `inci` with various values.
207        tags: ['tsan']
208        cases:
209          - values: ["0x527DF0C9", "0x810768F7", "0x527DF0D0"]
210          - values: ["0xF4D85C6B", "0x6A4FAA10", "0xF4D85C6B"]
211          - values: ["0xE1A513C2", "0x441A43A5", "0xE1A513C7"]
212          - values: ["0x22587543", "0xC0315D2F", "0x22587542"]
213          - values: ["0xAC2F0564", "0x4184FBB0", "0xAC2F0564"]
214          - values: ["0x789DD1C7", "0x785F2B4D", "0x789DD1C4"]
215          - values: ["0xF2945867", "0x9E7905DA", "0xF2945861"]
216          - values: ["0xCAF110C4", "0xD75B995", "0xCAF110C9"]
217          - values: ["0x36A6B239", "0x673DF774", "0x36A6B23D"]
218          - values: ["0xA9C7A3F1", "0xB6A9ED44", "0xA9C7A3F5"]
219          - values: ["0x76A8E402", "0xDC74D94E", "0x76A8E400"]
220          - values: ["0xB7BFCE38", "0x9C079C1F", "0xB7BFCE37"]
221          - values: ["0x78E8FD86", "0xCABD40FC", "0x78E8FD82"]
222          - values: ["0xAC15926", "0xFE5CF7C0", "0xAC15926"]
223          - values: ["0x49CC307D", "0xDC493657", "0x49CC3084"]
224          - values: ["0xAB00FCF5", "0xD97A5566", "0xAB00FCFB"]
225          - values: ["0x36863547", "0xB57C2433", "0x3686354A"]
226          - values: ["0x6AFD4EF", "0x70D9AA3C", "0x6AFD4EB"]
227          - values: ["0x41941827", "0x211BB144", "0x4194182B"]
228          - values: ["0x2FFB422A", "0xCB5D991A", "0x2FFB4224"]
229
230      - file-name: "regs"
231        isa:
232          instructions:
233            - sig: inci v:inout:i32, imm:i32
234              acc: none
235              format: [op_v_4_imm_4]
236        runner-options: ['compile-only']
237        code-template: |
238            #
239                inci %s, 0
240        check-type: none
241        description: Check `inci` with various register numbers.
242        cases:
243            - values: ["v0"]
244            - values: ["v1"]
245            - values: ["v15"]
246            - values: ["v16"]
247              runner-options: ['compile-failure']
248
249      - file-name: "type"
250        isa:
251          instructions:
252            - sig: inci v:inout:i32, imm:i32
253              acc: none
254              format: [op_v_4_imm_4]
255          verification:
256            - v1_i32
257        bugid: ["964", "1653"]
258        tags: ["verifier"]
259        description: |
260          Check `inci` with incorrect accumulator type.
261          Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) and invokes `inci`.
262          Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error.
263        code-template: |
264              #
265                  %s
266                  inci v0, 1
267                  ldai 0
268                  return
269        check-type: none
270        runner-options: ['verifier-failure', 'verifier-debug-config']
271        cases:
272          - values: [mov.null v0]
273          - values:
274            - |
275              #
276                  lda.str ""
277                  sta v0
278          - values:
279            - |
280              #
281                  lda.str "some string"
282                  sta v0
283          - values: ["fmovi.64 v0, 0.0"]
284          - values: ["fmovi.64 v0, -0.0"]
285          - values: ["fmovi.64 v0, 1.0"]
286          - values: ["fmovi.64 v0, -1.0"]
287          - values: ["fmovi.64 v0, 0x7FF8000000000000"]
288          - values: ["fmovi.64 v0, 0xFFFFFFFFFFFFFFFF"]
289          - values: ["fmovi.64 v0, 0x7FF0000000000000"]
290          - values: ["fmovi.64 v0, 0xFFF0000000000000"]
291          - values: ["fmovi.64 v0, 0xffefffffffffffff"]
292          - values: ["fmovi.64 v0, 0x7fefffffffffffff"]
293          - values: ["fmovi.64 v0, 0x0000000000000001"]
294          - values: ["fmovi.64 v0, 0x8000000000000001"]
295          - values: ["fmovi.64 v0, 3.14159265358979323846"]
296          - values: ["fmovi.64 v0, 0.0"]
297          - values: ["fmovi.64 v0, -0.0"]
298          - values: ["fmovi.64 v0, 1.0"]
299          - values: ["fmovi.64 v0, -1.0"]
300          - values: ["fmovi.64 v0, 0x7FF8000000000000"]
301          - values: ["fmovi.64 v0, 0xFFFFFFFFFFFFFFFF"]
302          - values: ["fmovi.64 v0, 0x7FF0000000000000"]
303          - values: ["fmovi.64 v0, 0xFFF0000000000000"]
304          - values: ["fmovi.64 v0, 0xffefffffffffffff"]
305          - values: ["fmovi.64 v0, 0x7fefffffffffffff"]
306          - values: ["fmovi.64 v0, 0x0000000000000001"]
307          - values: ["fmovi.64 v0, 0x8000000000000001"]
308          - values: ["fmovi.64 v0, 3.14159265358979323846"]
309          - values: ["movi.64 v0, 0"]
310          - values: ["movi.64 v0, 1"]
311          - values: ["movi.64 v0, -1"]
312          - values: ["movi.64 v0, 0x0000000100000000"]
313          - values: ["movi.64 v0, -0x0000000100000000"]
314          - values: ["movi.64 v0, 0x0000000080000000"]
315          - values: ["movi.64 v0, -0x0000000080000000"]
316          - values: ["movi.64 v0, 0x7FFFFFFFFFFFFFFF"]
317          - values: ["movi.64 v0, -0x7FFFFFFFFFFFFFFF"]
318          - values: ["movi.64 v0, 0x1000000000000000"]
319          - values: ["movi.64 v0, 0x8000000000000000"]
320          - values: ["movi.64 v0, 0xF000000000000000"]
321          - values: ["movi.64 v0, 0xFFFFFFFF00000000"]
322          - values: ["movi.64 v0, 0xFFFFFFFFFFFFFFFF"]
323          - values: ["movi.64 v0, -0x1000000000000000"]
324          - values: ["movi.64 v0, -0x8000000000000000"]
325          - values: ["movi.64 v0, -0xF000000000000000"]
326          - values: ["movi.64 v0, -0xFFFFFFFF00000000"]
327          - values: ["movi.64 v0, -0xFFFFFFFFFFFFFFFF"]
328
329      - file-name: "type_obj"
330        isa:
331          instructions:
332            - sig: inci v:inout:i32, imm:i32
333              acc: none
334              format: [op_v_4_imm_4]
335          verification:
336            - v1_i32
337        bugid: ["964"]
338        tags: ["verifier"]
339        description: |
340          Check `inci` with incorrect accumulator type.
341          Load different values (objects, strings, types, 64-bit floating point values, 64-bit integer values) and invokes `inci`.
342          Return 0 to indicate that negative test failed, because this line is unreachable and code will not be executed after verification error.
343        code-template: |
344              #
345              .record Object {}
346              .function i32 main() {
347                  %s
348                  inci v0, 1
349                  ldai 0
350                  return
351        check-type: none
352        runner-options: ['verifier-failure', 'verifier-debug-config']
353        header-template: []
354        cases:
355          - values:
356            - |
357              lda.type Object
358              sta v0
359          - values:
360            - newobj v0, Object
361