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