xref: /aosp_15_r20/external/llvm/test/MC/ARM/single-precision-fp.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker@ RUN: not llvm-mc < %s -triple thumbv8-unknown-unknown -show-encoding -mattr=+fp-only-sp,-neon 2> %t > %t2
2*9880d681SAndroid Build Coastguard Worker@ RUN:     FileCheck %s < %t --check-prefix=CHECK-ERRORS
3*9880d681SAndroid Build Coastguard Worker@ RUN:     FileCheck %s < %t2
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker        vadd.f64 d0, d1, d2
6*9880d681SAndroid Build Coastguard Worker        vsub.f64 d2, d3, d4
7*9880d681SAndroid Build Coastguard Worker        vdiv.f64 d4, d5, d6
8*9880d681SAndroid Build Coastguard Worker        vmul.f64 d6, d7, d8
9*9880d681SAndroid Build Coastguard Worker        vnmul.f64 d8, d9, d10
10*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
11*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vadd.f64 d0, d1, d2
12*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
13*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsub.f64 d2, d3, d4
14*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
15*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vdiv.f64 d4, d5, d6
16*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
17*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmul.f64 d6, d7, d8
18*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
19*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmul.f64 d8, d9, d10
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker        vmla.f64 d11, d10, d9
22*9880d681SAndroid Build Coastguard Worker        vmls.f64 d8, d7, d6
23*9880d681SAndroid Build Coastguard Worker        vnmla.f64 d5, d4, d3
24*9880d681SAndroid Build Coastguard Worker        vnmls.f64 d2, d1, d0
25*9880d681SAndroid Build Coastguard Worker        vfma.f64 d1, d2, d3
26*9880d681SAndroid Build Coastguard Worker        vfms.f64 d4, d5, d6
27*9880d681SAndroid Build Coastguard Worker        vfnma.f64 d7, d8, d9
28*9880d681SAndroid Build Coastguard Worker        vfnms.f64 d10, d11, d12
29*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
30*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmla.f64 d11, d10, d9
31*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
32*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmls.f64 d8, d7, d6
33*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
34*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmla.f64 d5, d4, d3
35*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
36*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vnmls.f64 d2, d1, d0
37*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
38*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfma.f64 d1, d2, d3
39*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
40*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfms.f64 d4, d5, d6
41*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
42*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfnma.f64 d7, d8, d9
43*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
44*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vfnms.f64 d10, d11, d12
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker        vneg.f64 d15, d14
47*9880d681SAndroid Build Coastguard Worker        vsqrt.f64 d13, d12
48*9880d681SAndroid Build Coastguard Worker        vsqrt d13, d14
49*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
50*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vneg.f64 d15, d14
51*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
52*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsqrt.f64 d13, d12
53*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
54*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vsqrt d13, d14
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker        vcmpe.f64 d0, d1
57*9880d681SAndroid Build Coastguard Worker        vcmp.f64 d2, d3
58*9880d681SAndroid Build Coastguard Worker        vabs.f64 d4, d5
59*9880d681SAndroid Build Coastguard Worker        vcmpe.f64 d5, #0
60*9880d681SAndroid Build Coastguard Worker        vcmp.f64 d6, #0
61*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
62*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmpe.f64 d0, d1
63*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
64*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmp.f64 d2, d3
65*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
66*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vabs.f64 d4, d5
67*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
68*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmpe.f64 d5, #0
69*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
70*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcmp.f64 d6, #0
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker        @ FIXME: overlapping aliases and a probable TableGen indeterminacy mean
73*9880d681SAndroid Build Coastguard Worker        @ that the actual reason can vary by platform.
74*9880d681SAndroid Build Coastguard Worker        vmov.f64 d11, d10
75*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires:
76*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmov.f64 d11, d10
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker        vcvt.f64.s32 d9, s8
79*9880d681SAndroid Build Coastguard Worker        vcvt.f64.u32 d7, s6
80*9880d681SAndroid Build Coastguard Worker        vcvt.s32.f64 s5, d4
81*9880d681SAndroid Build Coastguard Worker        vcvt.u32.f64 s3, d2
82*9880d681SAndroid Build Coastguard Worker        vcvtr.s32.f64 s1, d0
83*9880d681SAndroid Build Coastguard Worker        vcvtr.u32.f64 s1, d2
84*9880d681SAndroid Build Coastguard Worker        vcvt.s16.f64 d3, d4, #1
85*9880d681SAndroid Build Coastguard Worker        vcvt.u16.f64 d5, d6, #2
86*9880d681SAndroid Build Coastguard Worker        vcvt.s32.f64 d7, d8, #3
87*9880d681SAndroid Build Coastguard Worker        vcvt.u32.f64 d9, d10, #4
88*9880d681SAndroid Build Coastguard Worker        vcvt.f64.s16 d11, d12, #3
89*9880d681SAndroid Build Coastguard Worker        vcvt.f64.u16 d13, d14, #2
90*9880d681SAndroid Build Coastguard Worker        vcvt.f64.s32 d15, d14, #1
91*9880d681SAndroid Build Coastguard Worker        vcvt.f64.u32 d13, d12, #1
92*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
93*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s32 d9, s8
94*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
95*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u32 d7, s6
96*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
97*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s32.f64 s5, d4
98*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
99*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u32.f64 s3, d2
100*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
101*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtr.s32.f64 s1, d0
102*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
103*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtr.u32.f64 s1, d2
104*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
105*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s16.f64 d3, d4, #1
106*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
107*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u16.f64 d5, d6, #2
108*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
109*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.s32.f64 d7, d8, #3
110*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
111*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.u32.f64 d9, d10, #4
112*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
113*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s16 d11, d12, #3
114*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
115*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u16 d13, d14, #2
116*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
117*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.s32 d15, d14, #1
118*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
119*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvt.f64.u32 d13, d12, #1
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker        @ v8 operations, also double precision so make sure they're rejected.
122*9880d681SAndroid Build Coastguard Worker        vselgt.f64 d0, d1, d2
123*9880d681SAndroid Build Coastguard Worker        vselge.f64 d3, d4, d5
124*9880d681SAndroid Build Coastguard Worker        vseleq.f64 d6, d7, d8
125*9880d681SAndroid Build Coastguard Worker        vselvs.f64 d9, d10, d11
126*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
127*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselgt.f64 d0, d1, d2
128*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
129*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselge.f64 d3, d4, d5
130*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
131*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vseleq.f64 d6, d7, d8
132*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
133*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vselvs.f64 d9, d10, d11
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker        vmaxnm.f64 d12, d13, d14
136*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
137*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vmaxnm.f64 d12, d13, d14
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker        vcvtb.f64.f16 d7, s8
140*9880d681SAndroid Build Coastguard Worker        vcvtb.f16.f64 s9, d10
141*9880d681SAndroid Build Coastguard Worker        vcvtt.f64.f16 d11, s12
142*9880d681SAndroid Build Coastguard Worker        vcvtt.f16.f64 s13, d14
143*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
144*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtb.f64.f16 d7, s8
145*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
146*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtb.f16.f64 s9, d10
147*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
148*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtt.f64.f16 d11, s12
149*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
150*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vcvtt.f16.f64 s13, d14
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker        vrintz.f64 d15, d14
153*9880d681SAndroid Build Coastguard Worker        vrintr.f64.f64 d13, d12
154*9880d681SAndroid Build Coastguard Worker        vrintx.f64 d11, d10
155*9880d681SAndroid Build Coastguard Worker        vrinta.f64.f64 d9, d8
156*9880d681SAndroid Build Coastguard Worker        vrintn.f64 d7, d6
157*9880d681SAndroid Build Coastguard Worker        vrintp.f64.f64 d5, d4
158*9880d681SAndroid Build Coastguard Worker        vrintm.f64 d3, d2
159*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
160*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintz.f64 d15, d14
161*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
162*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintr.f64.f64 d13, d12
163*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
164*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintx.f64 d11, d10
165*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
166*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrinta.f64.f64 d9, d8
167*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
168*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintn.f64 d7, d6
169*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
170*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintp.f64.f64 d5, d4
171*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS: error: instruction requires: double precision VFP
172*9880d681SAndroid Build Coastguard Worker@ CHECK-ERRORS-NEXT: vrintm.f64 d3, d2
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker        @ Double precisionish operations that actually *are* allowed.
175*9880d681SAndroid Build Coastguard Worker        vldr d0, [sp]
176*9880d681SAndroid Build Coastguard Worker        vstr d3, [sp]
177*9880d681SAndroid Build Coastguard Worker        vldm r0, {d0, d1}
178*9880d681SAndroid Build Coastguard Worker        vstm r4, {d3, d4}
179*9880d681SAndroid Build Coastguard Worker        vpush {d6, d7}
180*9880d681SAndroid Build Coastguard Worker        vpop {d8, d9}
181*9880d681SAndroid Build Coastguard Worker        vmov r1, r0, d1
182*9880d681SAndroid Build Coastguard Worker        vmov d2, r3, r4
183*9880d681SAndroid Build Coastguard Worker        vmov.f64 r5, r6, d7
184*9880d681SAndroid Build Coastguard Worker        vmov.f64 d8, r9, r10
185*9880d681SAndroid Build Coastguard Worker@ CHECK: vldr d0, [sp]
186*9880d681SAndroid Build Coastguard Worker@ CHECK: vstr d3, [sp]
187*9880d681SAndroid Build Coastguard Worker@ CHECK: vldmia r0, {d0, d1}
188*9880d681SAndroid Build Coastguard Worker@ CHECK: vstmia r4, {d3, d4}
189*9880d681SAndroid Build Coastguard Worker@ CHECK: vpush {d6, d7}
190*9880d681SAndroid Build Coastguard Worker@ CHECK: vpop {d8, d9}
191*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov r1, r0, d1
192*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov d2, r3, r4
193*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov r5, r6, d7
194*9880d681SAndroid Build Coastguard Worker@ CHECK: vmov d8, r9, r10
195