simple-fp-encoding.s revision 9426ac7b575de9e1297a01f27307d858343ac4ed
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]
358