1 # RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+mve -show-encoding < %s 2> %t \
2 # RUN: | FileCheck --check-prefix=CHECK %s
3 # RUN: FileCheck --check-prefix=ERROR < %t %s
5 # CHECK: vld20.8 {q0, q1}, [sp] @ encoding: [0x9d,0xfc,0x00,0x1e]
8 # CHECK: vld20.8 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0x00,0x1e]
11 # CHECK: vld20.8 {q0, q1}, [r0]! @ encoding: [0xb0,0xfc,0x00,0x1e]
12 vld20.8
{q0
, q1
}, [r0]!
14 # CHECK: vld20.8 {q0, q1}, [r11] @ encoding: [0x9b,0xfc,0x00,0x1e]
15 vld20.8
{q0
, q1
}, [r11]
17 # CHECK: vld20.8 {q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x00,0xbe]
18 vld20.8
{q5
, q6
}, [r0]!
20 # CHECK: vld21.8 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0x20,0x1e]
21 vld21.8
{q0
, q1
}, [r0]
23 # CHECK: vld21.8 {q3, q4}, [r0]! @ encoding: [0xb0,0xfc,0x20,0x7e]
24 vld21.8
{q3
, q4
}, [r0]!
26 # CHECK: vld20.16 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0x80,0x1e]
27 vld20.16
{q0
, q1
}, [r0]
29 # CHECK: vld20.16 {q0, q1}, [r0]! @ encoding: [0xb0,0xfc,0x80,0x1e]
30 vld20.16
{q0
, q1
}, [r0]!
32 # CHECK: vld20.16 {q0, q1}, [r11] @ encoding: [0x9b,0xfc,0x80,0x1e]
33 vld20.16
{q0
, q1
}, [r11]
35 # CHECK: vld20.16 {q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x80,0xbe]
36 vld20.16
{q5
, q6
}, [r0]!
38 # CHECK: vld21.16 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0xa0,0x1e]
39 vld21.16
{q0
, q1
}, [r0]
41 # CHECK: vld21.16 {q3, q4}, [r0]! @ encoding: [0xb0,0xfc,0xa0,0x7e]
42 vld21.16
{q3
, q4
}, [r0]!
44 # CHECK: vld20.32 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0x00,0x1f]
45 vld20.32
{q0
, q1
}, [r0]
47 # CHECK: vld20.32 {q0, q1}, [r0]! @ encoding: [0xb0,0xfc,0x00,0x1f]
48 vld20.32
{q0
, q1
}, [r0]!
50 # CHECK: vld20.32 {q0, q1}, [r11] @ encoding: [0x9b,0xfc,0x00,0x1f]
51 vld20.32
{q0
, q1
}, [r11]
53 # CHECK: vld20.32 {q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x00,0xbf]
54 vld20.32
{q5
, q6
}, [r0]!
56 # CHECK: vld21.32 {q0, q1}, [r0] @ encoding: [0x90,0xfc,0x20,0x1f]
57 vld21.32
{q0
, q1
}, [r0]
59 # CHECK: vld21.32 {q3, q4}, [r0]! @ encoding: [0xb0,0xfc,0x20,0x7f]
60 vld21.32
{q3
, q4
}, [r0]!
62 # CHECK: vst20.8 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0x00,0x1e]
63 vst20.8
{q0
, q1
}, [r0]
65 # CHECK: vst20.8 {q0, q1}, [r0]! @ encoding: [0xa0,0xfc,0x00,0x1e]
66 vst20.8
{q0
, q1
}, [r0]!
68 # CHECK: vst20.8 {q0, q1}, [r11] @ encoding: [0x8b,0xfc,0x00,0x1e]
69 vst20.8
{q0
, q1
}, [r11]
71 # CHECK: vst20.8 {q5, q6}, [r0]! @ encoding: [0xa0,0xfc,0x00,0xbe]
72 vst20.8
{q5
, q6
}, [r0]!
74 # CHECK: vst21.8 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0x20,0x1e]
75 vst21.8
{q0
, q1
}, [r0]
77 # CHECK: vst21.8 {q3, q4}, [r0]! @ encoding: [0xa0,0xfc,0x20,0x7e]
78 vst21.8
{q3
, q4
}, [r0]!
80 # CHECK: vst20.16 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0x80,0x1e]
81 vst20.16
{q0
, q1
}, [r0]
83 # CHECK: vst20.16 {q0, q1}, [r0]! @ encoding: [0xa0,0xfc,0x80,0x1e]
84 vst20.16
{q0
, q1
}, [r0]!
86 # CHECK: vst20.16 {q0, q1}, [r11] @ encoding: [0x8b,0xfc,0x80,0x1e]
87 vst20.16
{q0
, q1
}, [r11]
89 # CHECK: vst20.16 {q5, q6}, [r0]! @ encoding: [0xa0,0xfc,0x80,0xbe]
90 vst20.16
{q5
, q6
}, [r0]!
92 # CHECK: vst21.16 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0xa0,0x1e]
93 vst21.16
{q0
, q1
}, [r0]
95 # CHECK: vst21.16 {q3, q4}, [r0]! @ encoding: [0xa0,0xfc,0xa0,0x7e]
96 vst21.16
{q3
, q4
}, [r0]!
98 # CHECK: vst20.32 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0x00,0x1f]
99 vst20.32
{q0
, q1
}, [r0]
101 # CHECK: vst20.32 {q0, q1}, [r0]! @ encoding: [0xa0,0xfc,0x00,0x1f]
102 vst20.32
{q0
, q1
}, [r0]!
104 # CHECK: vst20.32 {q0, q1}, [r11] @ encoding: [0x8b,0xfc,0x00,0x1f]
105 vst20.32
{q0
, q1
}, [r11]
107 # CHECK: vst20.32 {q5, q6}, [r0]! @ encoding: [0xa0,0xfc,0x00,0xbf]
108 vst20.32
{q5
, q6
}, [r0]!
110 # CHECK: vst21.32 {q0, q1}, [r0] @ encoding: [0x80,0xfc,0x20,0x1f]
111 vst21.32
{q0
, q1
}, [r0]
113 # CHECK: vst21.32 {q3, q4}, [r0]! @ encoding: [0xa0,0xfc,0x20,0x7f]
114 vst21.32
{q3
, q4
}, [r0]!
116 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
117 vld20.8
{q0
, q1
}, [sp
]!
119 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
120 vld20.64
{q0
, q1
}, [r0]
122 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: non-contiguous register range
123 vld20.32
{q0
, q2
}, [r0]
125 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: operand must be a list of two consecutive q-registers in range [q0,q7]
126 vld20.32
{q0
, q1
, q2
}, [r0]
128 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: operand must be a list of two consecutive q-registers in range [q0,q7]
131 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid instruction
132 vld20.32 q0
, q1
, [r0]
134 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: vector register in range Q0-Q7 expected
135 vld20.32
{q7
, q8
}, [r0]
137 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: vector register in range Q0-Q7 expected
138 vld20.32
{d0
, d1
}, [r0]
140 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid instruction
141 vld22.32
{q0
, q1
}, [r0]
143 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
144 vld20.32
{q0
, q1
}, [pc
]
146 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
147 vld20.32
{q0
, q1
}, [r0, #4]
149 # CHECK: vld40.8 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x01,0x1e]
150 vld40.8
{q0
, q1
, q2
, q3
}, [r0]
152 # CHECK: vld40.8 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0x01,0x1e]
153 vld40.8
{q0
, q1
, q2
, q3
}, [r0]!
155 # CHECK: vld40.8 {q0, q1, q2, q3}, [r11] @ encoding: [0x9b,0xfc,0x01,0x1e]
156 vld40.8
{q0
, q1
, q2
, q3
}, [r11]
158 # CHECK: vld40.8 {q3, q4, q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x01,0x7e]
159 vld40.8
{q3
, q4
, q5
, q6
}, [r0]!
161 # CHECK: vld41.8 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x21,0x1e]
162 vld41.8
{q0
, q1
, q2
, q3
}, [r0]
164 # CHECK: vld41.8 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0x21,0x9e]
165 vld41.8
{q4
, q5
, q6
, q7
}, [r0]!
167 # CHECK: vld42.8 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x41,0x1e]
168 vld42.8
{q0
, q1
, q2
, q3
}, [r0]
170 # CHECK: vld42.8 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0x41,0x1e]
171 vld42.8
{q0
, q1
, q2
, q3
}, [r0]!
173 # CHECK: vld43.8 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x61,0x1e]
174 vld43.8
{q0
, q1
, q2
, q3
}, [r0]
176 # CHECK: vld43.8 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0x61,0x9e]
177 vld43.8
{q4
, q5
, q6
, q7
}, [r0]!
179 # CHECK: vld40.16 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x81,0x1e]
180 vld40.16
{q0
, q1
, q2
, q3
}, [r0]
182 # CHECK: vld40.16 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0x81,0x1e]
183 vld40.16
{q0
, q1
, q2
, q3
}, [r0]!
185 # CHECK: vld40.16 {q0, q1, q2, q3}, [r11] @ encoding: [0x9b,0xfc,0x81,0x1e]
186 vld40.16
{q0
, q1
, q2
, q3
}, [r11]
188 # CHECK: vld40.16 {q3, q4, q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x81,0x7e]
189 vld40.16
{q3
, q4
, q5
, q6
}, [r0]!
191 # CHECK: vld41.16 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0xa1,0x1e]
192 vld41.16
{q0
, q1
, q2
, q3
}, [r0]
194 # CHECK: vld41.16 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0xa1,0x9e]
195 vld41.16
{q4
, q5
, q6
, q7
}, [r0]!
197 # CHECK: vld42.16 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0xc1,0x1e]
198 vld42.16
{q0
, q1
, q2
, q3
}, [r0]
200 # CHECK: vld42.16 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0xc1,0x1e]
201 vld42.16
{q0
, q1
, q2
, q3
}, [r0]!
203 # CHECK: vld43.16 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0xe1,0x1e]
204 vld43.16
{q0
, q1
, q2
, q3
}, [r0]
206 # CHECK: vld43.16 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0xe1,0x9e]
207 vld43.16
{q4
, q5
, q6
, q7
}, [r0]!
209 # CHECK: vld40.32 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x01,0x1f]
210 vld40.32
{q0
, q1
, q2
, q3
}, [r0]
212 # CHECK: vld40.32 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0x01,0x1f]
213 vld40.32
{q0
, q1
, q2
, q3
}, [r0]!
215 # CHECK: vld40.32 {q0, q1, q2, q3}, [r11] @ encoding: [0x9b,0xfc,0x01,0x1f]
216 vld40.32
{q0
, q1
, q2
, q3
}, [r11]
218 # CHECK: vld40.32 {q3, q4, q5, q6}, [r0]! @ encoding: [0xb0,0xfc,0x01,0x7f]
219 vld40.32
{q3
, q4
, q5
, q6
}, [r0]!
221 # CHECK: vld41.32 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x21,0x1f]
222 vld41.32
{q0
, q1
, q2
, q3
}, [r0]
224 # CHECK: vld41.32 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0x21,0x9f]
225 vld41.32
{q4
, q5
, q6
, q7
}, [r0]!
227 # CHECK: vld42.32 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x41,0x1f]
228 vld42.32
{q0
, q1
, q2
, q3
}, [r0]
230 # CHECK: vld42.32 {q0, q1, q2, q3}, [r0]! @ encoding: [0xb0,0xfc,0x41,0x1f]
231 vld42.32
{q0
, q1
, q2
, q3
}, [r0]!
233 # CHECK: vld43.32 {q0, q1, q2, q3}, [r0] @ encoding: [0x90,0xfc,0x61,0x1f]
234 vld43.32
{q0
, q1
, q2
, q3
}, [r0]
236 # CHECK: vld43.32 {q4, q5, q6, q7}, [r0]! @ encoding: [0xb0,0xfc,0x61,0x9f]
237 vld43.32
{q4
, q5
, q6
, q7
}, [r0]!
239 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
240 vld40.64
{q0
, q1
, q2
, q3
}, [r0]
242 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: non-contiguous register range
243 vld40.32
{q0
, q2
, q3
, q4
}, [r0]
245 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: operand must be a list of four consecutive q-registers in range [q0,q7]
246 vld40.32
{q0
, q1
, q2
, q3
, q4
}, [r0]
248 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: operand must be a list of four consecutive q-registers in range [q0,q7]
249 vld40.32
{q0
, q1
}, [r0]
251 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: operand must be a list of four consecutive q-registers in range [q0,q7]
252 vld40.32
{q0
, q1
, q2
}, [r0]
254 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid instruction
255 vld40.32 q0
, q1
, q2
, q3
, [r0]
257 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: vector register in range Q0-Q7 expected
258 vld40.32
{q5
, q6
, q7
, q8
}, [r0]
260 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: vector register in range Q0-Q7 expected
261 vld40.32
{d0
, d1
, d2
, d3
}, [r0]
263 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid instruction
264 vld44.32
{q0
, q1
, q2
, q3
}, [r0]
266 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
267 vld40.32
{q0
, q1
, q2
, q3
}, [pc
]
269 # ERROR: [[@LINE+1]]:{{[0-9]+}}: {{error|note}}: invalid operand for instruction
270 vld40.32
{q0
, q1
, q2
, q3
}, [r0, #4]