1# RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon --disassemble -output-asm-variant=1 < %s | FileCheck %s
2
3#-----------------------------------------------------------------------------
4# Floating-point arithmetic
5#-----------------------------------------------------------------------------
6
70x41 0xc0 0x20 0x1e
80x41 0xc0 0x60 0x1e
9
10# CHECK: fabs s1, s2
11# CHECK: fabs d1, d2
12
130x41 0x28 0x23 0x1e
140x41 0x28 0x63 0x1e
15
16# CHECK: fadd s1, s2, s3
17# CHECK: fadd d1, d2, d3
18
190x41 0x18 0x23 0x1e
200x41 0x18 0x63 0x1e
21
22# CHECK: fdiv s1, s2, s3
23# CHECK: fdiv d1, d2, d3
24
250x41 0x10 0x03 0x1f
260x41 0x10 0x43 0x1f
27
28# CHECK: fmadd s1, s2, s3, s4
29# CHECK: fmadd d1, d2, d3, d4
30
310x41 0x48 0x23 0x1e
320x41 0x48 0x63 0x1e
330x41 0x68 0x23 0x1e
340x41 0x68 0x63 0x1e
35
36# CHECK: fmax   s1, s2, s3
37# CHECK: fmax   d1, d2, d3
38# CHECK: fmaxnm s1, s2, s3
39# CHECK: fmaxnm d1, d2, d3
40
410x41 0x58 0x23 0x1e
420x41 0x58 0x63 0x1e
430x41 0x78 0x23 0x1e
440x41 0x78 0x63 0x1e
45
46# CHECK: fmin   s1, s2, s3
47# CHECK: fmin   d1, d2, d3
48# CHECK: fminnm s1, s2, s3
49# CHECK: fminnm d1, d2, d3
50
510x41 0x90 0x03 0x1f
520x41 0x90 0x43 0x1f
53
54# CHECK: fmsub s1, s2, s3, s4
55# CHECK: fmsub d1, d2, d3, d4
56
570x41 0x08 0x23 0x1e
580x41 0x08 0x63 0x1e
59
60# CHECK: fmul s1, s2, s3
61# CHECK: fmul d1, d2, d3
62
630x41 0x40 0x21 0x1e
640x41 0x40 0x61 0x1e
65
66# CHECK: fneg s1, s2
67# CHECK: fneg d1, d2
68
690x41 0x10 0x23 0x1f
700x41 0x10 0x63 0x1f
71
72# CHECK: fnmadd s1, s2, s3, s4
73# CHECK: fnmadd d1, d2, d3, d4
74
750x41 0x90 0x23 0x1f
760x41 0x90 0x63 0x1f
77
78# CHECK: fnmsub s1, s2, s3, s4
79# CHECK: fnmsub d1, d2, d3, d4
80
810x41 0x88 0x23 0x1e
820x41 0x88 0x63 0x1e
83
84# CHECK: fnmul s1, s2, s3
85# CHECK: fnmul d1, d2, d3
86
870x41 0xc0 0x21 0x1e
880x41 0xc0 0x61 0x1e
89
90# CHECK: fsqrt s1, s2
91# CHECK: fsqrt d1, d2
92
930x41 0x38 0x23 0x1e
940x41 0x38 0x63 0x1e
95
96# CHECK: fsub s1, s2, s3
97# CHECK: fsub d1, d2, d3
98
99#-----------------------------------------------------------------------------
100# Floating-point comparison
101#-----------------------------------------------------------------------------
102
1030x20 0x04 0x22 0x1e
1040x20 0x04 0x62 0x1e
1050x30 0x04 0x22 0x1e
1060x30 0x04 0x62 0x1e
107
108# CHECK: fccmp  s1, s2, #0, eq
109# CHECK: fccmp  d1, d2, #0, eq
110# CHECK: fccmpe s1, s2, #0, eq
111# CHECK: fccmpe d1, d2, #0, eq
112
1130x20 0x20 0x22 0x1e
1140x20 0x20 0x62 0x1e
1150x28 0x20 0x20 0x1e
1160x28 0x20 0x60 0x1e
1170x30 0x20 0x22 0x1e
1180x30 0x20 0x62 0x1e
1190x38 0x20 0x20 0x1e
1200x38 0x20 0x60 0x1e
121
122# CHECK: fcmp  s1, s2
123# CHECK: fcmp  d1, d2
124# CHECK: fcmp  s1, #0.0
125# CHECK: fcmp  d1, #0.0
126# CHECK: fcmpe s1, s2
127# CHECK: fcmpe d1, d2
128# CHECK: fcmpe s1, #0.0
129# CHECK: fcmpe d1, #0.0
130
131#-----------------------------------------------------------------------------
132# Floating-point conditional select
133#-----------------------------------------------------------------------------
134
1350x41 0x0c 0x23 0x1e
1360x41 0x0c 0x63 0x1e
137
138# CHECK: fcsel s1, s2, s3, eq
139# CHECK: fcsel d1, d2, d3, eq
140
141#-----------------------------------------------------------------------------
142# Floating-point convert
143#-----------------------------------------------------------------------------
144
1450x41 0xc0 0x63 0x1e
1460x41 0x40 0x62 0x1e
1470x41 0xc0 0xe2 0x1e
1480x41 0x40 0xe2 0x1e
1490x41 0xc0 0x22 0x1e
1500x41 0xc0 0x23 0x1e
151
152# CHECK: fcvt h1, d2
153# CHECK: fcvt s1, d2
154# CHECK: fcvt d1, h2
155# CHECK: fcvt s1, h2
156# CHECK: fcvt d1, s2
157# CHECK: fcvt h1, s2
158
1590x41 0x00 0x44 0x1e
1600x41 0x04 0x44 0x1e
1610x41 0x00 0x44 0x9e
1620x41 0x04 0x44 0x9e
1630x41 0x00 0x04 0x1e
1640x41 0x04 0x04 0x1e
1650x41 0x00 0x04 0x9e
1660x41 0x04 0x04 0x9e
167
168#-----------------------------------------------------------------------------
169# Floating-point move
170#-----------------------------------------------------------------------------
171
1720x41 0x00 0x27 0x1e
1730x41 0x00 0x26 0x1e
1740x41 0x00 0x67 0x9e
1750x41 0x00 0x66 0x9e
176
177# CHECK: fmov s1, w2
178# CHECK: fmov w1, s2
179# CHECK: fmov d1, x2
180# CHECK: fmov x1, d2
181
1820x01 0x10 0x28 0x1e
1830x01 0x10 0x68 0x1e
1840x01 0xf0 0x7b 0x1e
1850x01 0xf0 0x6b 0x1e
186
187# CHECK: fmov s1, #0.12500000
188# CHECK: fmov d1, #0.12500000
189# CHECK: fmov d1, #-0.48437500
190# CHECK: fmov d1, #0.48437500
191
1920x41 0x40 0x20 0x1e
1930x41 0x40 0x60 0x1e
194
195# CHECK: fmov s1, s2
196# CHECK: fmov d1, d2
197
198#-----------------------------------------------------------------------------
199# Floating-point round to integral
200#-----------------------------------------------------------------------------
201
2020x41 0x40 0x26 0x1e
2030x41 0x40 0x66 0x1e
204
205# CHECK: frinta s1, s2
206# CHECK: frinta d1, d2
207
2080x41 0xc0 0x27 0x1e
2090x41 0xc0 0x67 0x1e
210
211# CHECK: frinti s1, s2
212# CHECK: frinti d1, d2
213
2140x41 0x40 0x25 0x1e
2150x41 0x40 0x65 0x1e
216
217# CHECK: frintm s1, s2
218# CHECK: frintm d1, d2
219
2200x41 0x40 0x24 0x1e
2210x41 0x40 0x64 0x1e
222
223# CHECK: frintn s1, s2
224# CHECK: frintn d1, d2
225
2260x41 0xc0 0x24 0x1e
2270x41 0xc0 0x64 0x1e
228
229# CHECK: frintp s1, s2
230# CHECK: frintp d1, d2
231
2320x41 0x40 0x27 0x1e
2330x41 0x40 0x67 0x1e
234
235# CHECK: frintx s1, s2
236# CHECK: frintx d1, d2
237
2380x41 0xc0 0x25 0x1e
2390x41 0xc0 0x65 0x1e
240
241# CHECK: frintz s1, s2
242# CHECK: frintz d1, d2
243
244  0x00 0x3c 0xe0 0x7e
245  0x00 0x8c 0xe0 0x5e
246
247# CHECK: cmhs d0, d0, d0
248# CHECK: cmtst d0, d0, d0
249
2500x00 0x00 0xaf 0x9e
2510x00 0x00 0xae 0x9e
252
253# CHECK: fmov.d v0[1], x0
254# CHECK: fmov.d x0, v0[1]
255
256