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