simple-fp-encoding.s revision fae96f17b4b022fccd94a143698112a17d8ddf05
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@ Between two single precision registers and two core registers
200        vmov s3, s4, r1, r2
201        vmov s2, s3, r1, r2
202        vmov r1, r2, s3, s4
203        vmov r1, r2, s2, s3
204@ CHECK: vmov s3, s4, r1, r2      @ encoding: [0x31,0x1a,0x42,0xec]
205@ CHECK: vmov s2, s3, r1, r2      @ encoding: [0x11,0x1a,0x42,0xec]
206@ CHECK: vmov r1, r2, s3, s4      @ encoding: [0x31,0x1a,0x52,0xec]
207@ CHECK: vmov r1, r2, s2, s3      @ encoding: [0x11,0x1a,0x52,0xec]
208
209@ Between one double precision register and two core registers
210        vmov d15, r1, r2
211        vmov d16, r1, r2
212        vmov r1, r2, d15
213        vmov r1, r2, d16
214@ CHECK: vmov d15, r1, r2         @ encoding: [0x1f,0x1b,0x42,0xec]
215@ CHECK: vmov d16, r1, r2         @ encoding: [0x30,0x1b,0x42,0xec]
216@ CHECK: vmov r1, r2, d15         @ encoding: [0x1f,0x1b,0x52,0xec]
217@ CHECK: vmov r1, r2, d16         @ encoding: [0x30,0x1b,0x52,0xec]
218
219
220@ CHECK: vldr d17, [r0]           @ encoding: [0x00,0x1b,0xd0,0xed]
221@ CHECK: vldr s0, [lr]            @ encoding: [0x00,0x0a,0x9e,0xed]
222@ CHECK: vldr d0, [lr]            @ encoding: [0x00,0x0b,0x9e,0xed]
223
224        vldr.64	d17, [r0]
225	vldr.i32 s0, [lr]
226	vldr.d d0, [lr]
227
228@ CHECK: vldr d1, [r2, #32]       @ encoding: [0x08,0x1b,0x92,0xed]
229@ CHECK: vldr d1, [r2, #-32]      @ encoding: [0x08,0x1b,0x12,0xed]
230        vldr.64	d1, [r2, #32]
231        vldr.f64	d1, [r2, #-32]
232
233@ CHECK: vldr d2, [r3]            @ encoding: [0x00,0x2b,0x93,0xed]
234        vldr.64 d2, [r3]
235
236@ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
237@ CHECK: vldr d3, [pc]            @ encoding: [0x00,0x3b,0x9f,0xed]
238@ CHECK: vldr d3, [pc, #-0]            @ encoding: [0x00,0x3b,0x1f,0xed]
239        vldr.64 d3, [pc]
240        vldr.64 d3, [pc,#0]
241        vldr.64 d3, [pc,#-0]
242
243@ CHECK: vldr s13, [r0]           @ encoding: [0x00,0x6a,0xd0,0xed]
244        vldr.32	s13, [r0]
245
246@ CHECK: vldr s1, [r2, #32]       @ encoding: [0x08,0x0a,0xd2,0xed]
247@ CHECK: vldr s1, [r2, #-32]      @ encoding: [0x08,0x0a,0x52,0xed]
248        vldr.32	s1, [r2, #32]
249        vldr.32	s1, [r2, #-32]
250
251@ CHECK: vldr s2, [r3]            @ encoding: [0x00,0x1a,0x93,0xed]
252        vldr.32 s2, [r3]
253
254@ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
255@ CHECK: vldr s5, [pc]            @ encoding: [0x00,0x2a,0xdf,0xed]
256@ CHECK: vldr s5, [pc, #-0]            @ encoding: [0x00,0x2a,0x5f,0xed]
257        vldr.32 s5, [pc]
258        vldr.32 s5, [pc,#0]
259        vldr.32 s5, [pc,#-0]
260
261@ CHECK: vstr d4, [r1]            @ encoding: [0x00,0x4b,0x81,0xed]
262@ CHECK: vstr d4, [r1, #24]       @ encoding: [0x06,0x4b,0x81,0xed]
263@ CHECK: vstr d4, [r1, #-24]      @ encoding: [0x06,0x4b,0x01,0xed]
264@ CHECK: vstr s0, [lr]            @ encoding: [0x00,0x0a,0x8e,0xed]
265@ CHECK: vstr d0, [lr]            @ encoding: [0x00,0x0b,0x8e,0xed]
266
267        vstr.64 d4, [r1]
268        vstr.64 d4, [r1, #24]
269        vstr.64 d4, [r1, #-24]
270	vstr s0, [lr]
271	vstr d0, [lr]
272
273@ CHECK: vstr s4, [r1]            @ encoding: [0x00,0x2a,0x81,0xed]
274@ CHECK: vstr s4, [r1, #24]       @ encoding: [0x06,0x2a,0x81,0xed]
275@ CHECK: vstr s4, [r1, #-24]      @ encoding: [0x06,0x2a,0x01,0xed]
276        vstr.32 s4, [r1]
277        vstr.32 s4, [r1, #24]
278        vstr.32 s4, [r1, #-24]
279
280@ CHECK: vldmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x91,0xec]
281@ CHECK: vldmia r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x91,0xec]
282        vldmia  r1, {d2,d3-d6,d7}
283        vldmia  r1, {s2,s3-s6,s7}
284
285@ CHECK: vstmia r1, {d2, d3, d4, d5, d6, d7} @ encoding: [0x0c,0x2b,0x81,0xec]
286@ CHECK: vstmia	r1, {s2, s3, s4, s5, s6, s7} @ encoding: [0x06,0x1a,0x81,0xec]
287@ CHECK: vpush	{d8, d9, d10, d11, d12, d13, d14, d15} @ encoding: [0x10,0x8b,0x2d,0xed]
288        vstmia  r1, {d2,d3-d6,d7}
289        vstmia  r1, {s2,s3-s6,s7}
290        vstmdb sp!, {q4-q7}
291
292@ CHECK: vcvtr.s32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbd,0xee]
293@ CHECK: vcvtr.s32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbd,0xee]
294@ CHECK: vcvtr.u32.f64  s0, d0 @ encoding: [0x40,0x0b,0xbc,0xee]
295@ CHECK: vcvtr.u32.f32  s0, s1 @ encoding: [0x60,0x0a,0xbc,0xee]
296        vcvtr.s32.f64  s0, d0
297        vcvtr.s32.f32  s0, s1
298        vcvtr.u32.f64  s0, d0
299        vcvtr.u32.f32  s0, s1
300
301@ CHECK: vmovne	s25, s26, r2, r5
302        vmovne	s25, s26, r2, r5        @ encoding: [0x39,0x2a,0x45,0x1c]
303
304@ VMOV w/ optional data type suffix.
305	vmov.32 s1, r8
306        vmov.s16 s2, r4
307        vmov.16 s3, r6
308        vmov.u32 s4, r1
309        vmov.p8 s5, r2
310        vmov.8 s6, r3
311
312        vmov.32 r1, s8
313        vmov.s16 r2, s4
314        vmov.16 r3, s6
315        vmov.u32 r4, s1
316        vmov.p8 r5, s2
317        vmov.8 r6, s3
318
319@ CHECK: vmov	s1, r8                  @ encoding: [0x90,0x8a,0x00,0xee]
320@ CHECK: vmov	s2, r4                  @ encoding: [0x10,0x4a,0x01,0xee]
321@ CHECK: vmov	s3, r6                  @ encoding: [0x90,0x6a,0x01,0xee]
322@ CHECK: vmov	s4, r1                  @ encoding: [0x10,0x1a,0x02,0xee]
323@ CHECK: vmov	s5, r2                  @ encoding: [0x90,0x2a,0x02,0xee]
324@ CHECK: vmov	s6, r3                  @ encoding: [0x10,0x3a,0x03,0xee]
325@ CHECK: vmov	r1, s8                  @ encoding: [0x10,0x1a,0x14,0xee]
326@ CHECK: vmov	r2, s4                  @ encoding: [0x10,0x2a,0x12,0xee]
327@ CHECK: vmov	r3, s6                  @ encoding: [0x10,0x3a,0x13,0xee]
328@ CHECK: vmov	r4, s1                  @ encoding: [0x90,0x4a,0x10,0xee]
329@ CHECK: vmov	r5, s2                  @ encoding: [0x10,0x5a,0x11,0xee]
330@ CHECK: vmov	r6, s3                  @ encoding: [0x90,0x6a,0x11,0xee]
331
332
333@ VCVT (between floating-point and fixed-point)
334        vcvt.f32.u32 s0, s0, #20
335        vcvt.f64.s32 d0, d0, #32
336        vcvt.f32.u16 s0, s0, #1
337        vcvt.f64.s16 d0, d0, #16
338        vcvt.f32.s32 s1, s1, #20
339        vcvt.f64.u32 d20, d20, #32
340        vcvt.f32.s16 s17, s17, #1
341        vcvt.f64.u16 d23, d23, #16
342        vcvt.u32.f32 s12, s12, #20
343        vcvt.s32.f64 d2, d2, #32
344        vcvt.u16.f32 s28, s28, #1
345        vcvt.s16.f64 d15, d15, #16
346        vcvt.s32.f32 s1, s1, #20
347        vcvt.u32.f64 d20, d20, #32
348        vcvt.s16.f32 s17, s17, #1
349        vcvt.u16.f64 d23, d23, #16
350
351@ CHECK: vcvt.f32.u32	s0, s0, #20     @ encoding: [0xc6,0x0a,0xbb,0xee]
352@ CHECK: vcvt.f64.s32	d0, d0, #32     @ encoding: [0xc0,0x0b,0xba,0xee]
353@ CHECK: vcvt.f32.u16	s0, s0, #1      @ encoding: [0x67,0x0a,0xbb,0xee]
354@ CHECK: vcvt.f64.s16	d0, d0, #16     @ encoding: [0x40,0x0b,0xba,0xee]
355@ CHECK: vcvt.f32.s32	s1, s1, #20     @ encoding: [0xc6,0x0a,0xfa,0xee]
356@ CHECK: vcvt.f64.u32	d20, d20, #32   @ encoding: [0xc0,0x4b,0xfb,0xee]
357@ CHECK: vcvt.f32.s16	s17, s17, #1    @ encoding: [0x67,0x8a,0xfa,0xee]
358@ CHECK: vcvt.f64.u16	d23, d23, #16   @ encoding: [0x40,0x7b,0xfb,0xee]
359
360@ CHECK: vcvt.u32.f32	s12, s12, #20   @ encoding: [0xc6,0x6a,0xbf,0xee]
361@ CHECK: vcvt.s32.f64	d2, d2, #32     @ encoding: [0xc0,0x2b,0xbe,0xee]
362@ CHECK: vcvt.u16.f32	s28, s28, #1    @ encoding: [0x67,0xea,0xbf,0xee]
363@ CHECK: vcvt.s16.f64	d15, d15, #16   @ encoding: [0x40,0xfb,0xbe,0xee]
364@ CHECK: vcvt.s32.f32	s1, s1, #20     @ encoding: [0xc6,0x0a,0xfe,0xee]
365@ CHECK: vcvt.u32.f64	d20, d20, #32   @ encoding: [0xc0,0x4b,0xff,0xee]
366@ CHECK: vcvt.s16.f32	s17, s17, #1    @ encoding: [0x67,0x8a,0xfe,0xee]
367@ CHECK: vcvt.u16.f64	d23, d23, #16   @ encoding: [0x40,0x7b,0xff,0xee]
368
369
370@ Use NEON to load some f32 immediates that don't fit the f8 representation.
371        vmov.f32 d4, #0.0
372        vmov.f32 d4, #32.0
373
374@ CHECK: vmov.i32	d4, #0x0        @ encoding: [0x10,0x40,0x80,0xf2]
375@ CHECK: vmov.i32	d4, #0x42000000 @ encoding: [0x12,0x46,0x84,0xf2]
376