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