ARM case-insensitive checking for APSR_nzcv.
[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 @ CHECK: vmrs APSR_nzcv, fpscr       @ encoding: [0x10,0xfa,0xf1,0xee]
126         vmrs    APSR_nzcv, fpscr
127         vmrs    apsr_nzcv, fpscr
128         fmstat
129
130 @ CHECK: vnegne.f64 d16, d16         @ encoding: [0x60,0x0b,0xf1,0x1e]
131         vnegne.f64      d16, d16
132
133 @ CHECK: vmovne s0, r0               @ encoding: [0x10,0x0a,0x00,0x1e]
134 @ CHECK: vmoveq s0, r1               @ encoding: [0x10,0x1a,0x00,0x0e]
135         vmovne  s0, r0
136         vmoveq  s0, r1
137
138         vmov.f32 r1, s2
139         vmov.f32 s4, r3
140         vmov.f64 r1, r5, d2
141         vmov.f64 d4, r3, r9
142
143 @ CHECK: vmov   r1, s2                  @ encoding: [0x10,0x1a,0x11,0xee]
144 @ CHECK: vmov   s4, r3                  @ encoding: [0x10,0x3a,0x02,0xee]
145 @ CHECK: vmov   r1, r5, d2              @ encoding: [0x12,0x1b,0x55,0xec]
146 @ CHECK: vmov   d4, r3, r9              @ encoding: [0x14,0x3b,0x49,0xec]
147
148 @ CHECK: vmrs r0, fpscr              @ encoding: [0x10,0x0a,0xf1,0xee]
149         vmrs    r0, fpscr
150 @ CHECK: vmrs  r0, fpexc             @ encoding: [0x10,0x0a,0xf8,0xee]
151         vmrs  r0, fpexc
152 @ CHECK: vmrs  r0, fpsid             @ encoding: [0x10,0x0a,0xf0,0xee]
153         vmrs  r0, fpsid
154
155 @ CHECK: vmsr fpscr, r0              @ encoding: [0x10,0x0a,0xe1,0xee]
156         vmsr    fpscr, r0
157 @ CHECK: vmsr  fpexc, r0             @ encoding: [0x10,0x0a,0xe8,0xee]
158         vmsr  fpexc, r0
159 @ CHECK: vmsr  fpsid, r0             @ encoding: [0x10,0x0a,0xe0,0xee]
160         vmsr  fpsid, r0
161
162         vmov.f64        d16, #3.000000e+00
163         vmov.f32        s0, #3.000000e+00
164         vmov.f64        d16, #-3.000000e+00
165         vmov.f32        s0, #-3.000000e+00
166
167 @ CHECK: vmov.f64 d16, #3.000000e+00 @ encoding: [0x08,0x0b,0xf0,0xee]
168 @ CHECK: vmov.f32 s0, #3.000000e+00  @ encoding: [0x08,0x0a,0xb0,0xee]
169 @ CHECK: vmov.f64 d16, #-3.000000e+00 @ encoding: [0x08,0x0b,0xf8,0xee]
170 @ CHECK: vmov.f32 s0, #-3.000000e+00  @ encoding: [0x08,0x0a,0xb8,0xee]
171
172 @ CHECK: vmov s0, r0                 @ encoding: [0x10,0x0a,0x00,0xee]
173 @ CHECK: vmov s1, r1                 @ encoding: [0x90,0x1a,0x00,0xee]
174 @ CHECK: vmov s2, r2                 @ encoding: [0x10,0x2a,0x01,0xee]
175 @ CHECK: vmov s3, r3                 @ encoding: [0x90,0x3a,0x01,0xee]
176         vmov    s0, r0
177         vmov    s1, r1
178         vmov    s2, r2
179         vmov    s3, r3
180
181 @ CHECK: vmov r0, s0                 @ encoding: [0x10,0x0a,0x10,0xee]
182 @ CHECK: vmov r1, s1                 @ encoding: [0x90,0x1a,0x10,0xee]
183 @ CHECK: vmov r2, s2                 @ encoding: [0x10,0x2a,0x11,0xee]
184 @ CHECK: vmov r3, s3                 @ encoding: [0x90,0x3a,0x11,0xee]
185         vmov    r0, s0
186         vmov    r1, s1
187         vmov    r2, s2
188         vmov    r3, s3
189
190 @ CHECK: vmov r0, r1, d16            @ encoding: [0x30,0x0b,0x51,0xec]
191         vmov    r0, r1, d16
192
193 @ CHECK: vldr d17, [r0]           @ encoding: [0x00,0x1b,0xd0,0xed]
194 @ CHECK: vldr s0, [lr]            @ encoding: [0x00,0x0a,0x9e,0xed]
195 @ CHECK: vldr d0, [lr]            @ encoding: [0x00,0x0b,0x9e,0xed]
196
197         vldr.64 d17, [r0]
198         vldr.i32 s0, [lr]
199         vldr.d d0, [lr]
200
201 @ CHECK: vldr d1, [r2, #32]       @ encoding: [0x08,0x1b,0x92,0xed]
202 @ CHECK: vldr d1, [r2, #-32]      @ encoding: [0x08,0x1b,0x12,0xed]
203         vldr.64 d1, [r2, #32]
204         vldr.f64        d1, [r2, #-32]
205
206 @ CHECK: vldr d2, [r3]            @ encoding: [0x00,0x2b,0x93,0xed]
207         vldr.64 d2, [r3]
208
209 @ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
210 @ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
211 @ CHECK: vldr d3, [pc, #-0]            @ encoding: [0x00,0x3b,0x1f,0xed]
212         vldr.64 d3, [pc]
213         vldr.64 d3, [pc,#0]
214         vldr.64 d3, [pc,#-0]
215
216 @ CHECK: vldr s13, [r0]           @ encoding: [0x00,0x6a,0xd0,0xed]
217         vldr.32 s13, [r0]
218
219 @ CHECK: vldr s1, [r2, #32]       @ encoding: [0x08,0x0a,0xd2,0xed]
220 @ CHECK: vldr s1, [r2, #-32]      @ encoding: [0x08,0x0a,0x52,0xed]
221         vldr.32 s1, [r2, #32]
222         vldr.32 s1, [r2, #-32]
223
224 @ CHECK: vldr s2, [r3]            @ encoding: [0x00,0x1a,0x93,0xed]
225         vldr.32 s2, [r3]
226
227 @ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
228 @ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
229 @ CHECK: vldr s5, [pc, #-0]            @ encoding: [0x00,0x2a,0x5f,0xed]
230         vldr.32 s5, [pc]
231         vldr.32 s5, [pc,#0]
232         vldr.32 s5, [pc,#-0]
233
234 @ CHECK: vstr d4, [r1]            @ encoding: [0x00,0x4b,0x81,0xed]
235 @ CHECK: vstr d4, [r1, #24]       @ encoding: [0x06,0x4b,0x81,0xed]
236 @ CHECK: vstr d4, [r1, #-24]      @ encoding: [0x06,0x4b,0x01,0xed]
237 @ CHECK: vstr s0, [lr]            @ encoding: [0x00,0x0a,0x8e,0xed]
238 @ CHECK: vstr d0, [lr]            @ encoding: [0x00,0x0b,0x8e,0xed]
239
240         vstr.64 d4, [r1]
241         vstr.64 d4, [r1, #24]
242         vstr.64 d4, [r1, #-24]
243         vstr s0, [lr]
244         vstr d0, [lr]
245
246 @ CHECK: vstr s4, [r1]            @ encoding: [0x00,0x2a,0x81,0xed]
247 @ CHECK: vstr s4, [r1, #24]       @ encoding: [0x06,0x2a,0x81,0xed]
248 @ CHECK: vstr s4, [r1, #-24]      @ encoding: [0x06,0x2a,0x01,0xed]
249         vstr.32 s4, [r1]
250         vstr.32 s4, [r1, #24]
251         vstr.32 s4, [r1, #-24]
252
253 @ CHECK: vldmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x91,0xec]
254 @ CHECK: vldmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x91,0xec]
255         vldmia  r1, {d2,d3-d6,d7}
256         vldmia  r1, {s2,s3-s6,s7}
257
258 @ CHECK: vstmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x81,0xec]
259 @ CHECK: vstmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x81,0xec]
260 @ CHECK: vpush  {d8, d9, d10, d11, d12, d13, d14, d15} @ encoding: [0x10,0x8b,0x2d,0xed]
261         vstmia  r1, {d2,d3-d6,d7}
262         vstmia  r1, {s2,s3-s6,s7}
263         vstmdb sp!, {q4-q7}
264
265 @ CHECK: vcvtr.s32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbd,0xee]
266 @ CHECK: vcvtr.s32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbd,0xee]
267 @ CHECK: vcvtr.u32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbc,0xee]
268 @ CHECK: vcvtr.u32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbc,0xee]
269         vcvtr.s32.f64  s0, d0
270         vcvtr.s32.f32  s0, s1
271         vcvtr.u32.f64  s0, d0
272         vcvtr.u32.f32  s0, s1
273
274 @ CHECK: vmovne s25, s26, r2, r5
275         vmovne  s25, s26, r2, r5        @ encoding: [0x39,0x2a,0x45,0x1c]
276
277 @ VMOV w/ optional data type suffix.
278         vmov.32 s1, r8
279         vmov.s16 s2, r4
280         vmov.16 s3, r6
281         vmov.u32 s4, r1
282         vmov.p8 s5, r2
283         vmov.8 s6, r3
284
285         vmov.32 r1, s8
286         vmov.s16 r2, s4
287         vmov.16 r3, s6
288         vmov.u32 r4, s1
289         vmov.p8 r5, s2
290         vmov.8 r6, s3
291
292 @ CHECK: vmov   s1, r8                  @ encoding: [0x90,0x8a,0x00,0xee]
293 @ CHECK: vmov   s2, r4                  @ encoding: [0x10,0x4a,0x01,0xee]
294 @ CHECK: vmov   s3, r6                  @ encoding: [0x90,0x6a,0x01,0xee]
295 @ CHECK: vmov   s4, r1                  @ encoding: [0x10,0x1a,0x02,0xee]
296 @ CHECK: vmov   s5, r2                  @ encoding: [0x90,0x2a,0x02,0xee]
297 @ CHECK: vmov   s6, r3                  @ encoding: [0x10,0x3a,0x03,0xee]
298 @ CHECK: vmov   r1, s8                  @ encoding: [0x10,0x1a,0x14,0xee]
299 @ CHECK: vmov   r2, s4                  @ encoding: [0x10,0x2a,0x12,0xee]
300 @ CHECK: vmov   r3, s6                  @ encoding: [0x10,0x3a,0x13,0xee]
301 @ CHECK: vmov   r4, s1                  @ encoding: [0x90,0x4a,0x10,0xee]
302 @ CHECK: vmov   r5, s2                  @ encoding: [0x10,0x5a,0x11,0xee]
303 @ CHECK: vmov   r6, s3                  @ encoding: [0x90,0x6a,0x11,0xee]
304
305
306 @ VCVT (between floating-point and fixed-point)
307         vcvt.f32.u32 s0, s0, #20
308         vcvt.f64.s32 d0, d0, #32
309         vcvt.f32.u16 s0, s0, #1
310         vcvt.f64.s16 d0, d0, #16
311         vcvt.f32.s32 s1, s1, #20
312         vcvt.f64.u32 d20, d20, #32
313         vcvt.f32.s16 s17, s17, #1
314         vcvt.f64.u16 d23, d23, #16
315         vcvt.u32.f32 s12, s12, #20 
316         vcvt.s32.f64 d2, d2, #32
317         vcvt.u16.f32 s28, s28, #1
318         vcvt.s16.f64 d15, d15, #16
319         vcvt.s32.f32 s1, s1, #20
320         vcvt.u32.f64 d20, d20, #32
321         vcvt.s16.f32 s17, s17, #1
322         vcvt.u16.f64 d23, d23, #16
323
324 @ CHECK: vcvt.f32.u32   s0, s0, #20     @ encoding: [0xc6,0x0a,0xbb,0xee]
325 @ CHECK: vcvt.f64.s32   d0, d0, #32     @ encoding: [0xc0,0x0b,0xba,0xee]
326 @ CHECK: vcvt.f32.u16   s0, s0, #1      @ encoding: [0x67,0x0a,0xbb,0xee]
327 @ CHECK: vcvt.f64.s16   d0, d0, #16     @ encoding: [0x40,0x0b,0xba,0xee]
328 @ CHECK: vcvt.f32.s32   s1, s1, #20     @ encoding: [0xc6,0x0a,0xfa,0xee]
329 @ CHECK: vcvt.f64.u32   d20, d20, #32   @ encoding: [0xc0,0x4b,0xfb,0xee]
330 @ CHECK: vcvt.f32.s16   s17, s17, #1    @ encoding: [0x67,0x8a,0xfa,0xee]
331 @ CHECK: vcvt.f64.u16   d23, d23, #16   @ encoding: [0x40,0x7b,0xfb,0xee]
332
333 @ CHECK: vcvt.u32.f32   s12, s12, #20   @ encoding: [0xc6,0x6a,0xbf,0xee]
334 @ CHECK: vcvt.s32.f64   d2, d2, #32     @ encoding: [0xc0,0x2b,0xbe,0xee]
335 @ CHECK: vcvt.u16.f32   s28, s28, #1    @ encoding: [0x67,0xea,0xbf,0xee]
336 @ CHECK: vcvt.s16.f64   d15, d15, #16   @ encoding: [0x40,0xfb,0xbe,0xee]
337 @ CHECK: vcvt.s32.f32   s1, s1, #20     @ encoding: [0xc6,0x0a,0xfe,0xee]
338 @ CHECK: vcvt.u32.f64   d20, d20, #32   @ encoding: [0xc0,0x4b,0xff,0xee]
339 @ CHECK: vcvt.s16.f32   s17, s17, #1    @ encoding: [0x67,0x8a,0xfe,0xee]
340 @ CHECK: vcvt.u16.f64   d23, d23, #16   @ encoding: [0x40,0x7b,0xff,0xee]
341
342
343 @ Use NEON to load some f32 immediates that don't fit the f8 representation.
344         vmov.f32 d4, #0.0
345         vmov.f32 d4, #32.0
346
347 @ CHECK: vmov.i32       d4, #0x0        @ encoding: [0x10,0x40,0x80,0xf2]
348 @ CHECK: vmov.i32       d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2]