ARM some VFP tblgen'erated two-operand aliases.
[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         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]