1; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding -output-asm-variant=1 < %s | FileCheck %s
2
3foo:
4;-----------------------------------------------------------------------------
5; Floating-point arithmetic
6;-----------------------------------------------------------------------------
7
8  fabs s1, s2
9  fabs d1, d2
10
11; CHECK: fabs s1, s2                 ; encoding: [0x41,0xc0,0x20,0x1e]
12; CHECK: fabs d1, d2                 ; encoding: [0x41,0xc0,0x60,0x1e]
13
14  fadd s1, s2, s3
15  fadd d1, d2, d3
16
17; CHECK: fadd s1, s2, s3             ; encoding: [0x41,0x28,0x23,0x1e]
18; CHECK: fadd d1, d2, d3             ; encoding: [0x41,0x28,0x63,0x1e]
19
20  fdiv s1, s2, s3
21  fdiv d1, d2, d3
22
23; CHECK: fdiv s1, s2, s3             ; encoding: [0x41,0x18,0x23,0x1e]
24; CHECK: fdiv d1, d2, d3             ; encoding: [0x41,0x18,0x63,0x1e]
25
26  fmadd s1, s2, s3, s4
27  fmadd d1, d2, d3, d4
28
29; CHECK: fmadd s1, s2, s3, s4        ; encoding: [0x41,0x10,0x03,0x1f]
30; CHECK: fmadd d1, d2, d3, d4        ; encoding: [0x41,0x10,0x43,0x1f]
31
32  fmax   s1, s2, s3
33  fmax   d1, d2, d3
34  fmaxnm s1, s2, s3
35  fmaxnm d1, d2, d3
36
37; CHECK: fmax   s1, s2, s3           ; encoding: [0x41,0x48,0x23,0x1e]
38; CHECK: fmax   d1, d2, d3           ; encoding: [0x41,0x48,0x63,0x1e]
39; CHECK: fmaxnm s1, s2, s3           ; encoding: [0x41,0x68,0x23,0x1e]
40; CHECK: fmaxnm d1, d2, d3           ; encoding: [0x41,0x68,0x63,0x1e]
41
42  fmin   s1, s2, s3
43  fmin   d1, d2, d3
44  fminnm s1, s2, s3
45  fminnm d1, d2, d3
46
47; CHECK: fmin   s1, s2, s3           ; encoding: [0x41,0x58,0x23,0x1e]
48; CHECK: fmin   d1, d2, d3           ; encoding: [0x41,0x58,0x63,0x1e]
49; CHECK: fminnm s1, s2, s3           ; encoding: [0x41,0x78,0x23,0x1e]
50; CHECK: fminnm d1, d2, d3           ; encoding: [0x41,0x78,0x63,0x1e]
51
52  fmsub s1, s2, s3, s4
53  fmsub d1, d2, d3, d4
54
55; CHECK: fmsub s1, s2, s3, s4        ; encoding: [0x41,0x90,0x03,0x1f]
56; CHECK: fmsub d1, d2, d3, d4        ; encoding: [0x41,0x90,0x43,0x1f]
57
58  fmul s1, s2, s3
59  fmul d1, d2, d3
60
61; CHECK: fmul s1, s2, s3             ; encoding: [0x41,0x08,0x23,0x1e]
62; CHECK: fmul d1, d2, d3             ; encoding: [0x41,0x08,0x63,0x1e]
63
64  fneg s1, s2
65  fneg d1, d2
66
67; CHECK: fneg s1, s2                 ; encoding: [0x41,0x40,0x21,0x1e]
68; CHECK: fneg d1, d2                 ; encoding: [0x41,0x40,0x61,0x1e]
69
70  fnmadd s1, s2, s3, s4
71  fnmadd d1, d2, d3, d4
72
73; CHECK: fnmadd s1, s2, s3, s4       ; encoding: [0x41,0x10,0x23,0x1f]
74; CHECK: fnmadd d1, d2, d3, d4       ; encoding: [0x41,0x10,0x63,0x1f]
75
76  fnmsub s1, s2, s3, s4
77  fnmsub d1, d2, d3, d4
78
79; CHECK: fnmsub s1, s2, s3, s4       ; encoding: [0x41,0x90,0x23,0x1f]
80; CHECK: fnmsub d1, d2, d3, d4       ; encoding: [0x41,0x90,0x63,0x1f]
81
82  fnmul s1, s2, s3
83  fnmul d1, d2, d3
84
85; CHECK: fnmul s1, s2, s3            ; encoding: [0x41,0x88,0x23,0x1e]
86; CHECK: fnmul d1, d2, d3            ; encoding: [0x41,0x88,0x63,0x1e]
87
88  fsqrt s1, s2
89  fsqrt d1, d2
90
91; CHECK: fsqrt s1, s2                ; encoding: [0x41,0xc0,0x21,0x1e]
92; CHECK: fsqrt d1, d2                ; encoding: [0x41,0xc0,0x61,0x1e]
93
94  fsub s1, s2, s3
95  fsub d1, d2, d3
96
97; CHECK: fsub s1, s2, s3             ; encoding: [0x41,0x38,0x23,0x1e]
98; CHECK: fsub d1, d2, d3             ; encoding: [0x41,0x38,0x63,0x1e]
99
100;-----------------------------------------------------------------------------
101; Floating-point comparison
102;-----------------------------------------------------------------------------
103
104  fccmp  s1, s2, #0, eq
105  fccmp  d1, d2, #0, eq
106  fccmpe s1, s2, #0, eq
107  fccmpe d1, d2, #0, eq
108
109; CHECK: fccmp  s1, s2, #0, eq       ; encoding: [0x20,0x04,0x22,0x1e]
110; CHECK: fccmp  d1, d2, #0, eq       ; encoding: [0x20,0x04,0x62,0x1e]
111; CHECK: fccmpe s1, s2, #0, eq       ; encoding: [0x30,0x04,0x22,0x1e]
112; CHECK: fccmpe d1, d2, #0, eq       ; encoding: [0x30,0x04,0x62,0x1e]
113
114  fcmp  s1, s2
115  fcmp  d1, d2
116  fcmp  s1, #0.0
117  fcmp  d1, #0.0
118  fcmpe s1, s2
119  fcmpe d1, d2
120  fcmpe s1, #0.0
121  fcmpe d1, #0.0
122
123; CHECK: fcmp  s1, s2                ; encoding: [0x20,0x20,0x22,0x1e]
124; CHECK: fcmp  d1, d2                ; encoding: [0x20,0x20,0x62,0x1e]
125; CHECK: fcmp  s1, #0.0              ; encoding: [0x28,0x20,0x20,0x1e]
126; CHECK: fcmp  d1, #0.0              ; encoding: [0x28,0x20,0x60,0x1e]
127; CHECK: fcmpe s1, s2                ; encoding: [0x30,0x20,0x22,0x1e]
128; CHECK: fcmpe d1, d2                ; encoding: [0x30,0x20,0x62,0x1e]
129; CHECK: fcmpe s1, #0.0              ; encoding: [0x38,0x20,0x20,0x1e]
130; CHECK: fcmpe d1, #0.0              ; encoding: [0x38,0x20,0x60,0x1e]
131
132;-----------------------------------------------------------------------------
133; Floating-point conditional select
134;-----------------------------------------------------------------------------
135
136  fcsel s1, s2, s3, eq
137  fcsel d1, d2, d3, eq
138
139; CHECK: fcsel s1, s2, s3, eq        ; encoding: [0x41,0x0c,0x23,0x1e]
140; CHECK: fcsel d1, d2, d3, eq        ; encoding: [0x41,0x0c,0x63,0x1e]
141
142;-----------------------------------------------------------------------------
143; Floating-point convert
144;-----------------------------------------------------------------------------
145
146  fcvt h1, d2
147  fcvt s1, d2
148  fcvt d1, h2
149  fcvt s1, h2
150  fcvt d1, s2
151  fcvt h1, s2
152
153; CHECK: fcvt h1, d2                 ; encoding: [0x41,0xc0,0x63,0x1e]
154; CHECK: fcvt s1, d2                 ; encoding: [0x41,0x40,0x62,0x1e]
155; CHECK: fcvt d1, h2                 ; encoding: [0x41,0xc0,0xe2,0x1e]
156; CHECK: fcvt s1, h2                 ; encoding: [0x41,0x40,0xe2,0x1e]
157; CHECK: fcvt d1, s2                 ; encoding: [0x41,0xc0,0x22,0x1e]
158; CHECK: fcvt h1, s2                 ; encoding: [0x41,0xc0,0x23,0x1e]
159
160  fcvtas w1, d2
161  fcvtas x1, d2
162  fcvtas w1, s2
163  fcvtas x1, s2
164
165; CHECK: fcvtas	w1, d2                  ; encoding: [0x41,0x00,0x64,0x1e]
166; CHECK: fcvtas	x1, d2                  ; encoding: [0x41,0x00,0x64,0x9e]
167; CHECK: fcvtas	w1, s2                  ; encoding: [0x41,0x00,0x24,0x1e]
168; CHECK: fcvtas	x1, s2                  ; encoding: [0x41,0x00,0x24,0x9e]
169
170  fcvtau w1, s2
171  fcvtau w1, d2
172  fcvtau x1, s2
173  fcvtau x1, d2
174
175; CHECK: fcvtau	w1, s2                  ; encoding: [0x41,0x00,0x25,0x1e]
176; CHECK: fcvtau	w1, d2                  ; encoding: [0x41,0x00,0x65,0x1e]
177; CHECK: fcvtau	x1, s2                  ; encoding: [0x41,0x00,0x25,0x9e]
178; CHECK: fcvtau	x1, d2                  ; encoding: [0x41,0x00,0x65,0x9e]
179
180  fcvtms w1, s2
181  fcvtms w1, d2
182  fcvtms x1, s2
183  fcvtms x1, d2
184
185; CHECK: fcvtms	w1, s2                  ; encoding: [0x41,0x00,0x30,0x1e]
186; CHECK: fcvtms	w1, d2                  ; encoding: [0x41,0x00,0x70,0x1e]
187; CHECK: fcvtms	x1, s2                  ; encoding: [0x41,0x00,0x30,0x9e]
188; CHECK: fcvtms	x1, d2                  ; encoding: [0x41,0x00,0x70,0x9e]
189
190  fcvtmu w1, s2
191  fcvtmu w1, d2
192  fcvtmu x1, s2
193  fcvtmu x1, d2
194
195; CHECK: fcvtmu	w1, s2                  ; encoding: [0x41,0x00,0x31,0x1e]
196; CHECK: fcvtmu	w1, d2                  ; encoding: [0x41,0x00,0x71,0x1e]
197; CHECK: fcvtmu	x1, s2                  ; encoding: [0x41,0x00,0x31,0x9e]
198; CHECK: fcvtmu	x1, d2                  ; encoding: [0x41,0x00,0x71,0x9e]
199
200  fcvtns w1, s2
201  fcvtns w1, d2
202  fcvtns x1, s2
203  fcvtns x1, d2
204
205; CHECK: fcvtns	w1, s2                  ; encoding: [0x41,0x00,0x20,0x1e]
206; CHECK: fcvtns	w1, d2                  ; encoding: [0x41,0x00,0x60,0x1e]
207; CHECK: fcvtns	x1, s2                  ; encoding: [0x41,0x00,0x20,0x9e]
208; CHECK: fcvtns	x1, d2                  ; encoding: [0x41,0x00,0x60,0x9e]
209
210  fcvtnu w1, s2
211  fcvtnu w1, d2
212  fcvtnu x1, s2
213  fcvtnu x1, d2
214
215; CHECK: fcvtnu	w1, s2                  ; encoding: [0x41,0x00,0x21,0x1e]
216; CHECK: fcvtnu	w1, d2                  ; encoding: [0x41,0x00,0x61,0x1e]
217; CHECK: fcvtnu	x1, s2                  ; encoding: [0x41,0x00,0x21,0x9e]
218; CHECK: fcvtnu	x1, d2                  ; encoding: [0x41,0x00,0x61,0x9e]
219
220  fcvtps w1, s2
221  fcvtps w1, d2
222  fcvtps x1, s2
223  fcvtps x1, d2
224
225; CHECK: fcvtps	w1, s2                  ; encoding: [0x41,0x00,0x28,0x1e]
226; CHECK: fcvtps	w1, d2                  ; encoding: [0x41,0x00,0x68,0x1e]
227; CHECK: fcvtps	x1, s2                  ; encoding: [0x41,0x00,0x28,0x9e]
228; CHECK: fcvtps	x1, d2                  ; encoding: [0x41,0x00,0x68,0x9e]
229
230  fcvtpu w1, s2
231  fcvtpu w1, d2
232  fcvtpu x1, s2
233  fcvtpu x1, d2
234
235; CHECK: fcvtpu	w1, s2                  ; encoding: [0x41,0x00,0x29,0x1e]
236; CHECK: fcvtpu	w1, d2                  ; encoding: [0x41,0x00,0x69,0x1e]
237; CHECK: fcvtpu	x1, s2                  ; encoding: [0x41,0x00,0x29,0x9e]
238; CHECK: fcvtpu	x1, d2                  ; encoding: [0x41,0x00,0x69,0x9e]
239
240  fcvtzs w1, s2
241  fcvtzs w1, s2, #1
242  fcvtzs w1, d2
243  fcvtzs w1, d2, #1
244  fcvtzs x1, s2
245  fcvtzs x1, s2, #1
246  fcvtzs x1, d2
247  fcvtzs x1, d2, #1
248
249; CHECK: fcvtzs	w1, s2                  ; encoding: [0x41,0x00,0x38,0x1e]
250; CHECK: fcvtzs	w1, s2, #1              ; encoding: [0x41,0xfc,0x18,0x1e]
251; CHECK: fcvtzs	w1, d2                  ; encoding: [0x41,0x00,0x78,0x1e]
252; CHECK: fcvtzs	w1, d2, #1              ; encoding: [0x41,0xfc,0x58,0x1e]
253; CHECK: fcvtzs	x1, s2                  ; encoding: [0x41,0x00,0x38,0x9e]
254; CHECK: fcvtzs	x1, s2, #1              ; encoding: [0x41,0xfc,0x18,0x9e]
255; CHECK: fcvtzs	x1, d2                  ; encoding: [0x41,0x00,0x78,0x9e]
256; CHECK: fcvtzs	x1, d2, #1              ; encoding: [0x41,0xfc,0x58,0x9e]
257
258  fcvtzu w1, s2
259  fcvtzu w1, s2, #1
260  fcvtzu w1, d2
261  fcvtzu w1, d2, #1
262  fcvtzu x1, s2
263  fcvtzu x1, s2, #1
264  fcvtzu x1, d2
265  fcvtzu x1, d2, #1
266
267; CHECK: fcvtzu	w1, s2                  ; encoding: [0x41,0x00,0x39,0x1e]
268; CHECK: fcvtzu	w1, s2, #1              ; encoding: [0x41,0xfc,0x19,0x1e]
269; CHECK: fcvtzu	w1, d2                  ; encoding: [0x41,0x00,0x79,0x1e]
270; CHECK: fcvtzu	w1, d2, #1              ; encoding: [0x41,0xfc,0x59,0x1e]
271; CHECK: fcvtzu	x1, s2                  ; encoding: [0x41,0x00,0x39,0x9e]
272; CHECK: fcvtzu	x1, s2, #1              ; encoding: [0x41,0xfc,0x19,0x9e]
273; CHECK: fcvtzu	x1, d2                  ; encoding: [0x41,0x00,0x79,0x9e]
274; CHECK: fcvtzu	x1, d2, #1              ; encoding: [0x41,0xfc,0x59,0x9e]
275
276  scvtf s1, w2
277  scvtf s1, w2, #1
278  scvtf d1, w2
279  scvtf d1, w2, #1
280  scvtf s1, x2
281  scvtf s1, x2, #1
282  scvtf d1, x2
283  scvtf d1, x2, #1
284
285; CHECK: scvtf	s1, w2                  ; encoding: [0x41,0x00,0x22,0x1e]
286; CHECK: scvtf	s1, w2, #1              ; encoding: [0x41,0xfc,0x02,0x1e]
287; CHECK: scvtf	d1, w2                  ; encoding: [0x41,0x00,0x62,0x1e]
288; CHECK: scvtf	d1, w2, #1              ; encoding: [0x41,0xfc,0x42,0x1e]
289; CHECK: scvtf	s1, x2                  ; encoding: [0x41,0x00,0x22,0x9e]
290; CHECK: scvtf	s1, x2, #1              ; encoding: [0x41,0xfc,0x02,0x9e]
291; CHECK: scvtf	d1, x2                  ; encoding: [0x41,0x00,0x62,0x9e]
292; CHECK: scvtf	d1, x2, #1              ; encoding: [0x41,0xfc,0x42,0x9e]
293
294  ucvtf s1, w2
295  ucvtf s1, w2, #1
296  ucvtf d1, w2
297  ucvtf d1, w2, #1
298  ucvtf s1, x2
299  ucvtf s1, x2, #1
300  ucvtf d1, x2
301  ucvtf d1, x2, #1
302
303; CHECK: ucvtf	s1, w2                  ; encoding: [0x41,0x00,0x23,0x1e]
304; CHECK: ucvtf	s1, w2, #1              ; encoding: [0x41,0xfc,0x03,0x1e]
305; CHECK: ucvtf	d1, w2                  ; encoding: [0x41,0x00,0x63,0x1e]
306; CHECK: ucvtf	d1, w2, #1              ; encoding: [0x41,0xfc,0x43,0x1e]
307; CHECK: ucvtf	s1, x2                  ; encoding: [0x41,0x00,0x23,0x9e]
308; CHECK: ucvtf	s1, x2, #1              ; encoding: [0x41,0xfc,0x03,0x9e]
309; CHECK: ucvtf	d1, x2                  ; encoding: [0x41,0x00,0x63,0x9e]
310; CHECK: ucvtf	d1, x2, #1              ; encoding: [0x41,0xfc,0x43,0x9e]
311
312;-----------------------------------------------------------------------------
313; Floating-point move
314;-----------------------------------------------------------------------------
315
316  fmov s1, w2
317  fmov w1, s2
318  fmov d1, x2
319  fmov x1, d2
320
321; CHECK: fmov s1, w2                 ; encoding: [0x41,0x00,0x27,0x1e]
322; CHECK: fmov w1, s2                 ; encoding: [0x41,0x00,0x26,0x1e]
323; CHECK: fmov d1, x2                 ; encoding: [0x41,0x00,0x67,0x9e]
324; CHECK: fmov x1, d2                 ; encoding: [0x41,0x00,0x66,0x9e]
325
326  fmov s1, #0.125
327  fmov s1, #0x40
328  fmov d1, #0.125
329  fmov d1, #0x40
330  fmov d1, #-4.843750e-01
331  fmov d1, #4.843750e-01
332  fmov d3, #3
333  fmov s2, #0.0
334  fmov d2, #0.0
335
336; CHECK: fmov s1, #0.12500000      ; encoding: [0x01,0x10,0x28,0x1e]
337; CHECK: fmov s1, #0.12500000      ; encoding: [0x01,0x10,0x28,0x1e]
338; CHECK: fmov d1, #0.12500000      ; encoding: [0x01,0x10,0x68,0x1e]
339; CHECK: fmov d1, #0.12500000      ; encoding: [0x01,0x10,0x68,0x1e]
340; CHECK: fmov d1, #-0.48437500     ; encoding: [0x01,0xf0,0x7b,0x1e]
341; CHECK: fmov d1, #0.48437500      ; encoding: [0x01,0xf0,0x6b,0x1e]
342; CHECK: fmov d3, #3.00000000      ; encoding: [0x03,0x10,0x61,0x1e]
343; CHECK: fmov s2, wzr                ; encoding: [0xe2,0x03,0x27,0x1e]
344; CHECK: fmov d2, xzr                ; encoding: [0xe2,0x03,0x67,0x9e]
345
346  fmov s1, s2
347  fmov d1, d2
348
349; CHECK: fmov s1, s2                 ; encoding: [0x41,0x40,0x20,0x1e]
350; CHECK: fmov d1, d2                 ; encoding: [0x41,0x40,0x60,0x1e]
351
352
353  fmov x2, v5.d[1]
354  fmov.d x9, v7[1]
355  fmov v1.d[1], x1
356  fmov.d v8[1], x6
357
358; CHECK: fmov.d	x2, v5[1]               ; encoding: [0xa2,0x00,0xae,0x9e]
359; CHECK: fmov.d	x9, v7[1]               ; encoding: [0xe9,0x00,0xae,0x9e]
360; CHECK: fmov.d	v1[1], x1               ; encoding: [0x21,0x00,0xaf,0x9e]
361; CHECK: fmov.d	v8[1], x6               ; encoding: [0xc8,0x00,0xaf,0x9e]
362
363
364;-----------------------------------------------------------------------------
365; Floating-point round to integral
366;-----------------------------------------------------------------------------
367
368  frinta s1, s2
369  frinta d1, d2
370
371; CHECK: frinta s1, s2               ; encoding: [0x41,0x40,0x26,0x1e]
372; CHECK: frinta d1, d2               ; encoding: [0x41,0x40,0x66,0x1e]
373
374  frinti s1, s2
375  frinti d1, d2
376
377; CHECK: frinti s1, s2               ; encoding: [0x41,0xc0,0x27,0x1e]
378; CHECK: frinti d1, d2               ; encoding: [0x41,0xc0,0x67,0x1e]
379
380  frintm s1, s2
381  frintm d1, d2
382
383; CHECK: frintm s1, s2               ; encoding: [0x41,0x40,0x25,0x1e]
384; CHECK: frintm d1, d2               ; encoding: [0x41,0x40,0x65,0x1e]
385
386  frintn s1, s2
387  frintn d1, d2
388
389; CHECK: frintn s1, s2               ; encoding: [0x41,0x40,0x24,0x1e]
390; CHECK: frintn d1, d2               ; encoding: [0x41,0x40,0x64,0x1e]
391
392  frintp s1, s2
393  frintp d1, d2
394
395; CHECK: frintp s1, s2               ; encoding: [0x41,0xc0,0x24,0x1e]
396; CHECK: frintp d1, d2               ; encoding: [0x41,0xc0,0x64,0x1e]
397
398  frintx s1, s2
399  frintx d1, d2
400
401; CHECK: frintx s1, s2               ; encoding: [0x41,0x40,0x27,0x1e]
402; CHECK: frintx d1, d2               ; encoding: [0x41,0x40,0x67,0x1e]
403
404  frintz s1, s2
405  frintz d1, d2
406
407; CHECK: frintz s1, s2               ; encoding: [0x41,0xc0,0x25,0x1e]
408; CHECK: frintz d1, d2               ; encoding: [0x41,0xc0,0x65,0x1e]
409
410  cmhs d0, d0, d0
411  cmtst d0, d0, d0
412
413; CHECK: cmhs	d0, d0, d0              ; encoding: [0x00,0x3c,0xe0,0x7e]
414; CHECK: cmtst	d0, d0, d0              ; encoding: [0x00,0x8c,0xe0,0x5e]
415
416
417
418;-----------------------------------------------------------------------------
419; Floating-point extract and narrow
420;-----------------------------------------------------------------------------
421  sqxtn b4, h2
422  sqxtn h2, s3
423  sqxtn s9, d2
424
425; CHECK: sqxtn b4, h2                  ; encoding: [0x44,0x48,0x21,0x5e]
426; CHECK: sqxtn h2, s3                  ; encoding: [0x62,0x48,0x61,0x5e]
427; CHECK: sqxtn s9, d2                  ; encoding: [0x49,0x48,0xa1,0x5e]
428
429  sqxtun b4, h2
430  sqxtun h2, s3
431  sqxtun s9, d2
432
433; CHECK: sqxtun b4, h2                  ; encoding: [0x44,0x28,0x21,0x7e]
434; CHECK: sqxtun h2, s3                  ; encoding: [0x62,0x28,0x61,0x7e]
435; CHECK: sqxtun s9, d2                  ; encoding: [0x49,0x28,0xa1,0x7e]
436
437  uqxtn b4, h2
438  uqxtn h2, s3
439  uqxtn s9, d2
440
441; CHECK: uqxtn b4, h2                  ; encoding: [0x44,0x48,0x21,0x7e]
442; CHECK: uqxtn h2, s3                  ; encoding: [0x62,0x48,0x61,0x7e]
443; CHECK: uqxtn s9, d2                  ; encoding: [0x49,0x48,0xa1,0x7e]
444