NEON VLD3(multiple 3-element structures) assembly parsing.
[oota-llvm.git] / test / MC / ARM / simple-fp-encoding.s
1 @ RUN: llvm-mc -mcpu=cortex-a8 -triple armv7-apple-darwin -show-encoding < %s | FileCheck %s
2
3 @ CHECK: vadd.f64 d16, d17, d16      @ encoding: [0xa0,0x0b,0x71,0xee]
4         vadd.f64        d16, d17, d16
5
6 @ CHECK: vadd.f32 s0, s1, s0         @ encoding: [0x80,0x0a,0x30,0xee]
7         vadd.f32        s0, s1, s0
8
9 @ CHECK: vsub.f64 d16, d17, d16      @ encoding: [0xe0,0x0b,0x71,0xee]
10         vsub.f64        d16, d17, d16
11
12 @ CHECK: vsub.f32 s0, s1, s0         @ encoding: [0xc0,0x0a,0x30,0xee]
13         vsub.f32        s0, s1, s0
14
15 @ CHECK: vdiv.f64 d16, d17, d16      @ encoding: [0xa0,0x0b,0xc1,0xee]
16         vdiv.f64        d16, d17, d16
17
18 @ CHECK: vdiv.f32 s0, s1, s0         @ encoding: [0x80,0x0a,0x80,0xee]
19         vdiv.f32        s0, s1, s0
20
21 @ CHECK: vmul.f64 d16, d17, d16      @ encoding: [0xa0,0x0b,0x61,0xee]
22         vmul.f64        d16, d17, d16
23
24 @ CHECK: vmul.f64       d20, d20, d17   @ encoding: [0xa1,0x4b,0x64,0xee]
25         vmul.f64  d20, d17
26
27 @ CHECK: vmul.f32 s0, s1, s0         @ encoding: [0x80,0x0a,0x20,0xee]
28         vmul.f32        s0, s1, s0
29
30 @ CHECK: vmul.f32       s11, s11, s21   @ encoding: [0xaa,0x5a,0x65,0xee]
31         vmul.f32  s11, s21
32
33 @ CHECK: vnmul.f64 d16, d17, d16     @ encoding: [0xe0,0x0b,0x61,0xee]
34         vnmul.f64       d16, d17, d16
35
36 @ CHECK: vnmul.f32 s0, s1, s0        @ encoding: [0xc0,0x0a,0x20,0xee]
37         vnmul.f32       s0, s1, s0
38
39 @ CHECK: vcmpe.f64 d17, d16          @ encoding: [0xe0,0x1b,0xf4,0xee]
40         vcmpe.f64       d17, d16
41
42 @ CHECK: vcmpe.f32 s1, s0            @ encoding: [0xc0,0x0a,0xf4,0xee]
43         vcmpe.f32       s1, s0
44
45 @ CHECK: vcmpe.f64 d16, #0           @ encoding: [0xc0,0x0b,0xf5,0xee]
46         vcmpe.f64       d16, #0
47
48 @ CHECK: vcmpe.f32 s0, #0            @ encoding: [0xc0,0x0a,0xb5,0xee]
49         vcmpe.f32       s0, #0
50
51 @ CHECK: vabs.f64 d16, d16           @ encoding: [0xe0,0x0b,0xf0,0xee]
52         vabs.f64        d16, d16
53
54 @ CHECK: vabs.f32 s0, s0             @ encoding: [0xc0,0x0a,0xb0,0xee]
55         vabs.f32        s0, s0
56
57 @ CHECK: vcvt.f32.f64 s0, d16        @ encoding: [0xe0,0x0b,0xb7,0xee]
58         vcvt.f32.f64    s0, d16
59
60 @ CHECK: vcvt.f64.f32 d16, s0        @ encoding: [0xc0,0x0a,0xf7,0xee]
61         vcvt.f64.f32    d16, s0
62
63 @ CHECK: vneg.f64 d16, d16           @ encoding: [0x60,0x0b,0xf1,0xee]
64         vneg.f64        d16, d16
65
66 @ CHECK: vneg.f32 s0, s0             @ encoding: [0x40,0x0a,0xb1,0xee]
67         vneg.f32        s0, s0
68
69 @ CHECK: vsqrt.f64 d16, d16          @ encoding: [0xe0,0x0b,0xf1,0xee]
70         vsqrt.f64       d16, d16
71
72 @ CHECK: vsqrt.f32 s0, s0            @ encoding: [0xc0,0x0a,0xb1,0xee]
73         vsqrt.f32       s0, s0
74
75 @ CHECK: vcvt.f64.s32 d16, s0        @ encoding: [0xc0,0x0b,0xf8,0xee]
76         vcvt.f64.s32    d16, s0
77
78 @ CHECK: vcvt.f32.s32 s0, s0         @ encoding: [0xc0,0x0a,0xb8,0xee]
79         vcvt.f32.s32    s0, s0
80
81 @ CHECK: vcvt.f64.u32 d16, s0        @ encoding: [0x40,0x0b,0xf8,0xee]
82         vcvt.f64.u32    d16, s0
83
84 @ CHECK: vcvt.f32.u32 s0, s0         @ encoding: [0x40,0x0a,0xb8,0xee]
85         vcvt.f32.u32    s0, s0
86
87 @ CHECK: vcvt.s32.f64 s0, d16        @ encoding: [0xe0,0x0b,0xbd,0xee]
88         vcvt.s32.f64    s0, d16
89
90 @ CHECK: vcvt.s32.f32 s0, s0         @ encoding: [0xc0,0x0a,0xbd,0xee]
91         vcvt.s32.f32    s0, s0
92
93 @ CHECK: vcvt.u32.f64 s0, d16        @ encoding: [0xe0,0x0b,0xbc,0xee]
94         vcvt.u32.f64    s0, d16
95
96 @ CHECK: vcvt.u32.f32 s0, s0         @ encoding: [0xc0,0x0a,0xbc,0xee]
97         vcvt.u32.f32    s0, s0
98
99 @ CHECK: vmla.f64 d16, d18, d17      @ encoding: [0xa1,0x0b,0x42,0xee]
100         vmla.f64        d16, d18, d17
101
102 @ CHECK: vmla.f32 s1, s2, s0         @ encoding: [0x00,0x0a,0x41,0xee]
103         vmla.f32        s1, s2, s0
104
105 @ CHECK: vmls.f64 d16, d18, d17      @ encoding: [0xe1,0x0b,0x42,0xee]
106         vmls.f64        d16, d18, d17
107
108 @ CHECK: vmls.f32 s1, s2, s0         @ encoding: [0x40,0x0a,0x41,0xee]
109         vmls.f32        s1, s2, s0
110
111 @ CHECK: vnmla.f64 d16, d18, d17     @ encoding: [0xe1,0x0b,0x52,0xee]
112         vnmla.f64       d16, d18, d17
113
114 @ CHECK: vnmla.f32 s1, s2, s0        @ encoding: [0x40,0x0a,0x51,0xee]
115         vnmla.f32       s1, s2, s0
116
117 @ CHECK: vnmls.f64 d16, d18, d17     @ encoding: [0xa1,0x0b,0x52,0xee]
118         vnmls.f64       d16, d18, d17
119
120 @ CHECK: vnmls.f32 s1, s2, s0        @ encoding: [0x00,0x0a,0x51,0xee]
121         vnmls.f32       s1, s2, s0
122
123 @ CHECK: vmrs apsr_nzcv, fpscr       @ encoding: [0x10,0xfa,0xf1,0xee]
124 @ CHECK: vmrs apsr_nzcv, fpscr       @ encoding: [0x10,0xfa,0xf1,0xee]
125         vmrs    apsr_nzcv, fpscr
126         fmstat
127
128 @ CHECK: vnegne.f64 d16, d16         @ encoding: [0x60,0x0b,0xf1,0x1e]
129         vnegne.f64      d16, d16
130
131 @ CHECK: vmovne s0, r0               @ encoding: [0x10,0x0a,0x00,0x1e]
132 @ CHECK: vmoveq s0, r1               @ encoding: [0x10,0x1a,0x00,0x0e]
133         vmovne  s0, r0
134         vmoveq  s0, r1
135
136         vmov.f32 r1, s2
137         vmov.f32 s4, r3
138         vmov.f64 r1, r5, d2
139         vmov.f64 d4, r3, r9
140
141 @ CHECK: vmov   r1, s2                  @ encoding: [0x10,0x1a,0x11,0xee]
142 @ CHECK: vmov   s4, r3                  @ encoding: [0x10,0x3a,0x02,0xee]
143 @ CHECK: vmov   r1, r5, d2              @ encoding: [0x12,0x1b,0x55,0xec]
144 @ CHECK: vmov   d4, r3, r9              @ encoding: [0x14,0x3b,0x49,0xec]
145
146 @ CHECK: vmrs r0, fpscr              @ encoding: [0x10,0x0a,0xf1,0xee]
147         vmrs    r0, fpscr
148 @ CHECK: vmrs  r0, fpexc             @ encoding: [0x10,0x0a,0xf8,0xee]
149         vmrs  r0, fpexc
150 @ CHECK: vmrs  r0, fpsid             @ encoding: [0x10,0x0a,0xf0,0xee]
151         vmrs  r0, fpsid
152
153 @ CHECK: vmsr fpscr, r0              @ encoding: [0x10,0x0a,0xe1,0xee]
154         vmsr    fpscr, r0
155 @ CHECK: vmsr  fpexc, r0             @ encoding: [0x10,0x0a,0xe8,0xee]
156         vmsr  fpexc, r0
157 @ CHECK: vmsr  fpsid, r0             @ encoding: [0x10,0x0a,0xe0,0xee]
158         vmsr  fpsid, r0
159
160         vmov.f64        d16, #3.000000e+00
161         vmov.f32        s0, #3.000000e+00
162         vmov.f64        d16, #-3.000000e+00
163         vmov.f32        s0, #-3.000000e+00
164
165 @ CHECK: vmov.f64 d16, #3.000000e+00 @ encoding: [0x08,0x0b,0xf0,0xee]
166 @ CHECK: vmov.f32 s0, #3.000000e+00  @ encoding: [0x08,0x0a,0xb0,0xee]
167 @ CHECK: vmov.f64 d16, #-3.000000e+00 @ encoding: [0x08,0x0b,0xf8,0xee]
168 @ CHECK: vmov.f32 s0, #-3.000000e+00  @ encoding: [0x08,0x0a,0xb8,0xee]
169
170 @ CHECK: vmov s0, r0                 @ encoding: [0x10,0x0a,0x00,0xee]
171 @ CHECK: vmov s1, r1                 @ encoding: [0x90,0x1a,0x00,0xee]
172 @ CHECK: vmov s2, r2                 @ encoding: [0x10,0x2a,0x01,0xee]
173 @ CHECK: vmov s3, r3                 @ encoding: [0x90,0x3a,0x01,0xee]
174         vmov    s0, r0
175         vmov    s1, r1
176         vmov    s2, r2
177         vmov    s3, r3
178
179 @ CHECK: vmov r0, s0                 @ encoding: [0x10,0x0a,0x10,0xee]
180 @ CHECK: vmov r1, s1                 @ encoding: [0x90,0x1a,0x10,0xee]
181 @ CHECK: vmov r2, s2                 @ encoding: [0x10,0x2a,0x11,0xee]
182 @ CHECK: vmov r3, s3                 @ encoding: [0x90,0x3a,0x11,0xee]
183         vmov    r0, s0
184         vmov    r1, s1
185         vmov    r2, s2
186         vmov    r3, s3
187
188 @ CHECK: vmov r0, r1, d16            @ encoding: [0x30,0x0b,0x51,0xec]
189         vmov    r0, r1, d16
190
191 @ CHECK: vldr d17, [r0]           @ encoding: [0x00,0x1b,0xd0,0xed]
192 @ CHECK: vldr s0, [lr]            @ encoding: [0x00,0x0a,0x9e,0xed]
193 @ CHECK: vldr d0, [lr]            @ encoding: [0x00,0x0b,0x9e,0xed]
194
195         vldr.64 d17, [r0]
196         vldr.i32 s0, [lr]
197         vldr.d d0, [lr]
198
199 @ CHECK: vldr d1, [r2, #32]       @ encoding: [0x08,0x1b,0x92,0xed]
200 @ CHECK: vldr d1, [r2, #-32]      @ encoding: [0x08,0x1b,0x12,0xed]
201         vldr.64 d1, [r2, #32]
202         vldr.f64        d1, [r2, #-32]
203
204 @ CHECK: vldr d2, [r3]            @ encoding: [0x00,0x2b,0x93,0xed]
205         vldr.64 d2, [r3]
206
207 @ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
208 @ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
209 @ CHECK: vldr d3, [pc, #-0]            @ encoding: [0x00,0x3b,0x1f,0xed]
210         vldr.64 d3, [pc]
211         vldr.64 d3, [pc,#0]
212         vldr.64 d3, [pc,#-0]
213
214 @ CHECK: vldr s13, [r0]           @ encoding: [0x00,0x6a,0xd0,0xed]
215         vldr.32 s13, [r0]
216
217 @ CHECK: vldr s1, [r2, #32]       @ encoding: [0x08,0x0a,0xd2,0xed]
218 @ CHECK: vldr s1, [r2, #-32]      @ encoding: [0x08,0x0a,0x52,0xed]
219         vldr.32 s1, [r2, #32]
220         vldr.32 s1, [r2, #-32]
221
222 @ CHECK: vldr s2, [r3]            @ encoding: [0x00,0x1a,0x93,0xed]
223         vldr.32 s2, [r3]
224
225 @ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
226 @ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
227 @ CHECK: vldr s5, [pc, #-0]            @ encoding: [0x00,0x2a,0x5f,0xed]
228         vldr.32 s5, [pc]
229         vldr.32 s5, [pc,#0]
230         vldr.32 s5, [pc,#-0]
231
232 @ CHECK: vstr d4, [r1]            @ encoding: [0x00,0x4b,0x81,0xed]
233 @ CHECK: vstr d4, [r1, #24]       @ encoding: [0x06,0x4b,0x81,0xed]
234 @ CHECK: vstr d4, [r1, #-24]      @ encoding: [0x06,0x4b,0x01,0xed]
235 @ CHECK: vstr s0, [lr]            @ encoding: [0x00,0x0a,0x8e,0xed]
236 @ CHECK: vstr d0, [lr]            @ encoding: [0x00,0x0b,0x8e,0xed]
237
238         vstr.64 d4, [r1]
239         vstr.64 d4, [r1, #24]
240         vstr.64 d4, [r1, #-24]
241         vstr s0, [lr]
242         vstr d0, [lr]
243
244 @ CHECK: vstr s4, [r1]            @ encoding: [0x00,0x2a,0x81,0xed]
245 @ CHECK: vstr s4, [r1, #24]       @ encoding: [0x06,0x2a,0x81,0xed]
246 @ CHECK: vstr s4, [r1, #-24]      @ encoding: [0x06,0x2a,0x01,0xed]
247         vstr.32 s4, [r1]
248         vstr.32 s4, [r1, #24]
249         vstr.32 s4, [r1, #-24]
250
251 @ CHECK: vldmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x91,0xec]
252 @ CHECK: vldmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x91,0xec]
253         vldmia  r1, {d2,d3-d6,d7}
254         vldmia  r1, {s2,s3-s6,s7}
255
256 @ CHECK: vstmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x81,0xec]
257 @ CHECK: vstmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x81,0xec]
258 @ CHECK: vpush  {d8, d9, d10, d11, d12, d13, d14, d15} @ encoding: [0x10,0x8b,0x2d,0xed]
259         vstmia  r1, {d2,d3-d6,d7}
260         vstmia  r1, {s2,s3-s6,s7}
261         vstmdb sp!, {q4-q7}
262
263 @ CHECK: vcvtr.s32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbd,0xee]
264 @ CHECK: vcvtr.s32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbd,0xee]
265 @ CHECK: vcvtr.u32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbc,0xee]
266 @ CHECK: vcvtr.u32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbc,0xee]
267         vcvtr.s32.f64  s0, d0
268         vcvtr.s32.f32  s0, s1
269         vcvtr.u32.f64  s0, d0
270         vcvtr.u32.f32  s0, s1
271
272 @ CHECK: vmovne s25, s26, r2, r5
273         vmovne  s25, s26, r2, r5        @ encoding: [0x39,0x2a,0x45,0x1c]
274
275 @ VMOV w/ optional data type suffix.
276         vmov.32 s1, r8
277         vmov.s16 s2, r4
278         vmov.16 s3, r6
279         vmov.u32 s4, r1
280         vmov.p8 s5, r2
281         vmov.8 s6, r3
282
283         vmov.32 r1, s8
284         vmov.s16 r2, s4
285         vmov.16 r3, s6
286         vmov.u32 r4, s1
287         vmov.p8 r5, s2
288         vmov.8 r6, s3
289
290 @ CHECK: vmov   s1, r8                  @ encoding: [0x90,0x8a,0x00,0xee]
291 @ CHECK: vmov   s2, r4                  @ encoding: [0x10,0x4a,0x01,0xee]
292 @ CHECK: vmov   s3, r6                  @ encoding: [0x90,0x6a,0x01,0xee]
293 @ CHECK: vmov   s4, r1                  @ encoding: [0x10,0x1a,0x02,0xee]
294 @ CHECK: vmov   s5, r2                  @ encoding: [0x90,0x2a,0x02,0xee]
295 @ CHECK: vmov   s6, r3                  @ encoding: [0x10,0x3a,0x03,0xee]
296 @ CHECK: vmov   r1, s8                  @ encoding: [0x10,0x1a,0x14,0xee]
297 @ CHECK: vmov   r2, s4                  @ encoding: [0x10,0x2a,0x12,0xee]
298 @ CHECK: vmov   r3, s6                  @ encoding: [0x10,0x3a,0x13,0xee]
299 @ CHECK: vmov   r4, s1                  @ encoding: [0x90,0x4a,0x10,0xee]
300 @ CHECK: vmov   r5, s2                  @ encoding: [0x10,0x5a,0x11,0xee]
301 @ CHECK: vmov   r6, s3                  @ encoding: [0x90,0x6a,0x11,0xee]
302
303
304 @ VCVT (between floating-point and fixed-point)
305         vcvt.f32.u32 s0, s0, #20
306         vcvt.f64.s32 d0, d0, #32
307         vcvt.f32.u16 s0, s0, #1
308         vcvt.f64.s16 d0, d0, #16
309
310 @ CHECK: vcvt.f32.u32   s0, s0, #20     @ encoding: [0xc6,0x0a,0xbb,0xee]
311 @ CHECK: vcvt.f64.s32   d0, d0, #32     @ encoding: [0xc0,0x0b,0xba,0xee]
312 @ CHECK: vcvt.f32.u16   s0, s0, #1      @ encoding: [0x67,0x0a,0xbb,0xee]
313 @ CHECK: vcvt.f64.s16   d0, d0, #16     @ encoding: [0x40,0x0b,0xba,0xee]
314
315
316 @ Use NEON to load some f32 immediates that don't fit the f8 representation.
317         vmov.f32 d4, #0.0
318         vmov.f32 d4, #32.0
319
320 @ CHECK: vmov.i32       d4, #0x0        @ encoding: [0x10,0x40,0x80,0xf2]
321 @ CHECK: vmov.i32       d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2]