xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/mips64-f128.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips4 -mattr=+soft-float -O1 \
2*9880d681SAndroid Build Coastguard Worker; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefixes=ALL,C_CC_FMT,PRER6
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64 -mattr=+soft-float -O1 \
4*9880d681SAndroid Build Coastguard Worker; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefixes=ALL,C_CC_FMT,PRER6
5*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r2 -mattr=+soft-float -O1 \
6*9880d681SAndroid Build Coastguard Worker; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefixes=ALL,C_CC_FMT,PRER6
7*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=mips64el-unknown-unknown -mcpu=mips64r6 -mattr=+soft-float -O1 \
8*9880d681SAndroid Build Coastguard Worker; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefixes=ALL,CMP_CC_FMT,R6
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker@gld0 = external global fp128
11*9880d681SAndroid Build Coastguard Worker@gld1 = external global fp128
12*9880d681SAndroid Build Coastguard Worker@gld2 = external global fp128
13*9880d681SAndroid Build Coastguard Worker@gf1 = external global float
14*9880d681SAndroid Build Coastguard Worker@gd1 = external global double
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: addLD:
17*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__addtf3)
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdefine fp128 @addLD() {
20*9880d681SAndroid Build Coastguard Workerentry:
21*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
22*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
23*9880d681SAndroid Build Coastguard Worker  %add = fadd fp128 %0, %1
24*9880d681SAndroid Build Coastguard Worker  ret fp128 %add
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: subLD:
28*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__subtf3)
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine fp128 @subLD() {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
33*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
34*9880d681SAndroid Build Coastguard Worker  %sub = fsub fp128 %0, %1
35*9880d681SAndroid Build Coastguard Worker  ret fp128 %sub
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: mulLD:
39*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__multf3)
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine fp128 @mulLD() {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
44*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
45*9880d681SAndroid Build Coastguard Worker  %mul = fmul fp128 %0, %1
46*9880d681SAndroid Build Coastguard Worker  ret fp128 %mul
47*9880d681SAndroid Build Coastguard Worker}
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: divLD:
50*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__divtf3)
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerdefine fp128 @divLD() {
53*9880d681SAndroid Build Coastguard Workerentry:
54*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
55*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
56*9880d681SAndroid Build Coastguard Worker  %div = fdiv fp128 %0, %1
57*9880d681SAndroid Build Coastguard Worker  ret fp128 %div
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_char:
61*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatsitf)
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_char(i8 signext %a) {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i8 %a to fp128
66*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_short:
70*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatsitf)
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_short(i16 signext %a) {
73*9880d681SAndroid Build Coastguard Workerentry:
74*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i16 %a to fp128
75*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_int:
79*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatsitf)
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_int(i32 %a) {
82*9880d681SAndroid Build Coastguard Workerentry:
83*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i32 %a to fp128
84*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_LL:
88*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatditf)
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_LL(i64 %a) {
91*9880d681SAndroid Build Coastguard Workerentry:
92*9880d681SAndroid Build Coastguard Worker  %conv = sitofp i64 %a to fp128
93*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
94*9880d681SAndroid Build Coastguard Worker}
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_UChar:
97*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatunsitf)
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_UChar(i8 zeroext %a) {
100*9880d681SAndroid Build Coastguard Workerentry:
101*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i8 %a to fp128
102*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_UShort:
106*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatunsitf)
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_UShort(i16 zeroext %a) {
109*9880d681SAndroid Build Coastguard Workerentry:
110*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i16 %a to fp128
111*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_UInt:
115*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatunsitf)
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_UInt(i32 signext %a) {
118*9880d681SAndroid Build Coastguard Workerentry:
119*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i32 %a to fp128
120*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_ULL:
124*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__floatunditf)
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_ULL(i64 %a) {
127*9880d681SAndroid Build Coastguard Workerentry:
128*9880d681SAndroid Build Coastguard Worker  %conv = uitofp i64 %a to fp128
129*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_char_LD:
133*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfsi)
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Workerdefine signext i8 @conv_char_LD(fp128 %a) {
136*9880d681SAndroid Build Coastguard Workerentry:
137*9880d681SAndroid Build Coastguard Worker  %conv = fptosi fp128 %a to i8
138*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
139*9880d681SAndroid Build Coastguard Worker}
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_short_LD:
142*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfsi)
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdefine signext i16 @conv_short_LD(fp128 %a) {
145*9880d681SAndroid Build Coastguard Workerentry:
146*9880d681SAndroid Build Coastguard Worker  %conv = fptosi fp128 %a to i16
147*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_int_LD:
151*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfsi)
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Workerdefine i32 @conv_int_LD(fp128 %a) {
154*9880d681SAndroid Build Coastguard Workerentry:
155*9880d681SAndroid Build Coastguard Worker  %conv = fptosi fp128 %a to i32
156*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
157*9880d681SAndroid Build Coastguard Worker}
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LL_LD:
160*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfdi)
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Workerdefine i64 @conv_LL_LD(fp128 %a) {
163*9880d681SAndroid Build Coastguard Workerentry:
164*9880d681SAndroid Build Coastguard Worker  %conv = fptosi fp128 %a to i64
165*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_UChar_LD:
169*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfsi)
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @conv_UChar_LD(fp128 %a) {
172*9880d681SAndroid Build Coastguard Workerentry:
173*9880d681SAndroid Build Coastguard Worker  %conv = fptoui fp128 %a to i8
174*9880d681SAndroid Build Coastguard Worker  ret i8 %conv
175*9880d681SAndroid Build Coastguard Worker}
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_UShort_LD:
178*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixtfsi)
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @conv_UShort_LD(fp128 %a) {
181*9880d681SAndroid Build Coastguard Workerentry:
182*9880d681SAndroid Build Coastguard Worker  %conv = fptoui fp128 %a to i16
183*9880d681SAndroid Build Coastguard Worker  ret i16 %conv
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_UInt_LD:
187*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixunstfsi)
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine i32 @conv_UInt_LD(fp128 %a) {
190*9880d681SAndroid Build Coastguard Workerentry:
191*9880d681SAndroid Build Coastguard Worker  %conv = fptoui fp128 %a to i32
192*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_ULL_LD:
196*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__fixunstfdi)
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Workerdefine i64 @conv_ULL_LD(fp128 %a) {
199*9880d681SAndroid Build Coastguard Workerentry:
200*9880d681SAndroid Build Coastguard Worker  %conv = fptoui fp128 %a to i64
201*9880d681SAndroid Build Coastguard Worker  ret i64 %conv
202*9880d681SAndroid Build Coastguard Worker}
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_float:
205*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__extendsftf2)
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_float(float %a) {
208*9880d681SAndroid Build Coastguard Workerentry:
209*9880d681SAndroid Build Coastguard Worker  %conv = fpext float %a to fp128
210*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_LD_double:
214*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__extenddftf2)
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Workerdefine fp128 @conv_LD_double(double %a) {
217*9880d681SAndroid Build Coastguard Workerentry:
218*9880d681SAndroid Build Coastguard Worker  %conv = fpext double %a to fp128
219*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_float_LD:
223*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__trunctfsf2)
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Workerdefine float @conv_float_LD(fp128 %a) {
226*9880d681SAndroid Build Coastguard Workerentry:
227*9880d681SAndroid Build Coastguard Worker  %conv = fptrunc fp128 %a to float
228*9880d681SAndroid Build Coastguard Worker  ret float %conv
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: conv_double_LD:
232*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__trunctfdf2)
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerdefine double @conv_double_LD(fp128 %a) {
235*9880d681SAndroid Build Coastguard Workerentry:
236*9880d681SAndroid Build Coastguard Worker  %conv = fptrunc fp128 %a to double
237*9880d681SAndroid Build Coastguard Worker  ret double %conv
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; ALL-LABEL:             libcall1_fabsl:
241*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld      $[[R0:[0-9]+]], 8($[[R4:[0-9]+]])
242*9880d681SAndroid Build Coastguard Worker; ALL-DAG: daddiu  $[[R1:[0-9]+]], $zero, 1
243*9880d681SAndroid Build Coastguard Worker; ALL-DAG: dsll    $[[R2:[0-9]+]], $[[R1]], 63
244*9880d681SAndroid Build Coastguard Worker; ALL-DAG: daddiu  $[[R3:[0-9]+]], $[[R2]], -1
245*9880d681SAndroid Build Coastguard Worker; ALL-DAG: and     $4, $[[R0]], $[[R3]]
246*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld      $2, 0($[[R4]])
247*9880d681SAndroid Build Coastguard Worker
248*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_fabsl() {
249*9880d681SAndroid Build Coastguard Workerentry:
250*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
251*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @fabsl(fp128 %0) nounwind readnone
252*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdeclare fp128 @fabsl(fp128) #1
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_ceill:
258*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(ceill)
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_ceill() {
261*9880d681SAndroid Build Coastguard Workerentry:
262*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
263*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @ceill(fp128 %0) nounwind readnone
264*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdeclare fp128 @ceill(fp128) #1
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_sinl:
270*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(sinl)
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_sinl() {
273*9880d681SAndroid Build Coastguard Workerentry:
274*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
275*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @sinl(fp128 %0) nounwind
276*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdeclare fp128 @sinl(fp128) #2
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_cosl:
282*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(cosl)
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_cosl() {
285*9880d681SAndroid Build Coastguard Workerentry:
286*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
287*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @cosl(fp128 %0) nounwind
288*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Workerdeclare fp128 @cosl(fp128) #2
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_expl:
294*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(expl)
295*9880d681SAndroid Build Coastguard Worker
296*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_expl() {
297*9880d681SAndroid Build Coastguard Workerentry:
298*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
299*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @expl(fp128 %0) nounwind
300*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerdeclare fp128 @expl(fp128) #2
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_exp2l:
306*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(exp2l)
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_exp2l() {
309*9880d681SAndroid Build Coastguard Workerentry:
310*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
311*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @exp2l(fp128 %0) nounwind
312*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerdeclare fp128 @exp2l(fp128) #2
316*9880d681SAndroid Build Coastguard Worker
317*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_logl:
318*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(logl)
319*9880d681SAndroid Build Coastguard Worker
320*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_logl() {
321*9880d681SAndroid Build Coastguard Workerentry:
322*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
323*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @logl(fp128 %0) nounwind
324*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
325*9880d681SAndroid Build Coastguard Worker}
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Workerdeclare fp128 @logl(fp128) #2
328*9880d681SAndroid Build Coastguard Worker
329*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_log2l:
330*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(log2l)
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_log2l() {
333*9880d681SAndroid Build Coastguard Workerentry:
334*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
335*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @log2l(fp128 %0) nounwind
336*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
337*9880d681SAndroid Build Coastguard Worker}
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Workerdeclare fp128 @log2l(fp128) #2
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_log10l:
342*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(log10l)
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_log10l() {
345*9880d681SAndroid Build Coastguard Workerentry:
346*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
347*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @log10l(fp128 %0) nounwind
348*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Workerdeclare fp128 @log10l(fp128) #2
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_nearbyintl:
354*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(nearbyintl)
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_nearbyintl() {
357*9880d681SAndroid Build Coastguard Workerentry:
358*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
359*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @nearbyintl(fp128 %0) nounwind readnone
360*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
361*9880d681SAndroid Build Coastguard Worker}
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Workerdeclare fp128 @nearbyintl(fp128) #1
364*9880d681SAndroid Build Coastguard Worker
365*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_floorl:
366*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(floorl)
367*9880d681SAndroid Build Coastguard Worker
368*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_floorl() {
369*9880d681SAndroid Build Coastguard Workerentry:
370*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
371*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @floorl(fp128 %0) nounwind readnone
372*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
373*9880d681SAndroid Build Coastguard Worker}
374*9880d681SAndroid Build Coastguard Worker
375*9880d681SAndroid Build Coastguard Workerdeclare fp128 @floorl(fp128) #1
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_sqrtl:
378*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(sqrtl)
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_sqrtl() {
381*9880d681SAndroid Build Coastguard Workerentry:
382*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
383*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @sqrtl(fp128 %0) nounwind
384*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
385*9880d681SAndroid Build Coastguard Worker}
386*9880d681SAndroid Build Coastguard Worker
387*9880d681SAndroid Build Coastguard Workerdeclare fp128 @sqrtl(fp128) #2
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall1_rintl:
390*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(rintl)
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall1_rintl() {
393*9880d681SAndroid Build Coastguard Workerentry:
394*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
395*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @rintl(fp128 %0) nounwind readnone
396*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
397*9880d681SAndroid Build Coastguard Worker}
398*9880d681SAndroid Build Coastguard Worker
399*9880d681SAndroid Build Coastguard Workerdeclare fp128 @rintl(fp128) #1
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall_powil:
402*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__powitf2)
403*9880d681SAndroid Build Coastguard Worker
404*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall_powil(fp128 %a, i32 %b) {
405*9880d681SAndroid Build Coastguard Workerentry:
406*9880d681SAndroid Build Coastguard Worker  %0 = tail call fp128 @llvm.powi.f128(fp128 %a, i32 %b)
407*9880d681SAndroid Build Coastguard Worker  ret fp128 %0
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.powi.f128(fp128, i32) #3
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; ALL-LABEL:     libcall2_copysignl:
413*9880d681SAndroid Build Coastguard Worker; ALL-DAG: daddiu $[[R2:[0-9]+]], $zero, 1
414*9880d681SAndroid Build Coastguard Worker; ALL-DAG: dsll   $[[R3:[0-9]+]], $[[R2]], 63
415*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld     $[[R0:[0-9]+]], %got_disp(gld1)
416*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld     $[[R1:[0-9]+]], 8($[[R0]])
417*9880d681SAndroid Build Coastguard Worker; ALL-DAG: and    $[[R4:[0-9]+]], $[[R1]], $[[R3]]
418*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld     $[[R5:[0-9]+]], %got_disp(gld0)
419*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld     $[[R6:[0-9]+]], 8($[[R5]])
420*9880d681SAndroid Build Coastguard Worker; ALL-DAG: daddiu $[[R7:[0-9]+]], $[[R3]], -1
421*9880d681SAndroid Build Coastguard Worker; ALL-DAG: and    $[[R8:[0-9]+]], $[[R6]], $[[R7]]
422*9880d681SAndroid Build Coastguard Worker; ALL-DAG: or     $4, $[[R8]], $[[R4]]
423*9880d681SAndroid Build Coastguard Worker; ALL-DAG: ld     $2, 0($[[R5]])
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall2_copysignl() {
426*9880d681SAndroid Build Coastguard Workerentry:
427*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
428*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
429*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @copysignl(fp128 %0, fp128 %1) nounwind readnone
430*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerdeclare fp128 @copysignl(fp128, fp128) #1
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall2_powl:
436*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(powl)
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall2_powl() {
439*9880d681SAndroid Build Coastguard Workerentry:
440*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
441*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
442*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @powl(fp128 %0, fp128 %1) nounwind
443*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
444*9880d681SAndroid Build Coastguard Worker}
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Workerdeclare fp128 @powl(fp128, fp128) #2
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall2_fmodl:
449*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(fmodl)
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall2_fmodl() {
452*9880d681SAndroid Build Coastguard Workerentry:
453*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
454*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld1, align 16
455*9880d681SAndroid Build Coastguard Worker  %call = tail call fp128 @fmodl(fp128 %0, fp128 %1) nounwind
456*9880d681SAndroid Build Coastguard Worker  ret fp128 %call
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Workerdeclare fp128 @fmodl(fp128, fp128) #2
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: libcall3_fmal:
462*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(fmal)
463*9880d681SAndroid Build Coastguard Worker
464*9880d681SAndroid Build Coastguard Workerdefine fp128 @libcall3_fmal() {
465*9880d681SAndroid Build Coastguard Workerentry:
466*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld0, align 16
467*9880d681SAndroid Build Coastguard Worker  %1 = load fp128, fp128* @gld2, align 16
468*9880d681SAndroid Build Coastguard Worker  %2 = load fp128, fp128* @gld1, align 16
469*9880d681SAndroid Build Coastguard Worker  %3 = tail call fp128 @llvm.fma.f128(fp128 %0, fp128 %2, fp128 %1)
470*9880d681SAndroid Build Coastguard Worker  ret fp128 %3
471*9880d681SAndroid Build Coastguard Worker}
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fma.f128(fp128, fp128, fp128) #4
474*9880d681SAndroid Build Coastguard Worker
475*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_lt:
476*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__lttf2)
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_lt(fp128 %a, fp128 %b) {
479*9880d681SAndroid Build Coastguard Workerentry:
480*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt fp128 %a, %b
481*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
482*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_le:
486*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__letf2)
487*9880d681SAndroid Build Coastguard Worker
488*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_le(fp128 %a, fp128 %b) {
489*9880d681SAndroid Build Coastguard Workerentry:
490*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole fp128 %a, %b
491*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
492*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
493*9880d681SAndroid Build Coastguard Worker}
494*9880d681SAndroid Build Coastguard Worker
495*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_gt:
496*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__gttf2)
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_gt(fp128 %a, fp128 %b) {
499*9880d681SAndroid Build Coastguard Workerentry:
500*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt fp128 %a, %b
501*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
502*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
503*9880d681SAndroid Build Coastguard Worker}
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_ge:
506*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__getf2)
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_ge(fp128 %a, fp128 %b) {
509*9880d681SAndroid Build Coastguard Workerentry:
510*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oge fp128 %a, %b
511*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
512*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
513*9880d681SAndroid Build Coastguard Worker}
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_eq:
516*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__eqtf2)
517*9880d681SAndroid Build Coastguard Worker
518*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_eq(fp128 %a, fp128 %b) {
519*9880d681SAndroid Build Coastguard Workerentry:
520*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq fp128 %a, %b
521*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
522*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
523*9880d681SAndroid Build Coastguard Worker}
524*9880d681SAndroid Build Coastguard Worker
525*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: cmp_ne:
526*9880d681SAndroid Build Coastguard Worker; ALL: ld $25, %call16(__netf2)
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerdefine i32 @cmp_ne(fp128 %a, fp128 %b) {
529*9880d681SAndroid Build Coastguard Workerentry:
530*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp une fp128 %a, %b
531*9880d681SAndroid Build Coastguard Worker  %conv = zext i1 %cmp to i32
532*9880d681SAndroid Build Coastguard Worker  ret i32 %conv
533*9880d681SAndroid Build Coastguard Worker}
534*9880d681SAndroid Build Coastguard Worker
535*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_LD_LD:
536*9880d681SAndroid Build Coastguard Worker; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1)
537*9880d681SAndroid Build Coastguard Worker; ALL: ld $2, 0($[[R0]])
538*9880d681SAndroid Build Coastguard Worker; ALL: ld $4, 8($[[R0]])
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Workerdefine fp128 @load_LD_LD() {
541*9880d681SAndroid Build Coastguard Workerentry:
542*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld1, align 16
543*9880d681SAndroid Build Coastguard Worker  ret fp128 %0
544*9880d681SAndroid Build Coastguard Worker}
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_LD_float:
547*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gf1)
548*9880d681SAndroid Build Coastguard Worker; ALL:   lw   $4, 0($[[R0]])
549*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $25, %call16(__extendsftf2)
550*9880d681SAndroid Build Coastguard Worker; PRER6: jalr $25
551*9880d681SAndroid Build Coastguard Worker; R6:    jalrc $25
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerdefine fp128 @load_LD_float() {
554*9880d681SAndroid Build Coastguard Workerentry:
555*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* @gf1, align 4
556*9880d681SAndroid Build Coastguard Worker  %conv = fpext float %0 to fp128
557*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
558*9880d681SAndroid Build Coastguard Worker}
559*9880d681SAndroid Build Coastguard Worker
560*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: load_LD_double:
561*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gd1)
562*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $4, 0($[[R0]])
563*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $25, %call16(__extenddftf2)
564*9880d681SAndroid Build Coastguard Worker; PRER6: jalr $25
565*9880d681SAndroid Build Coastguard Worker; R6:    jalrc $25
566*9880d681SAndroid Build Coastguard Worker
567*9880d681SAndroid Build Coastguard Workerdefine fp128 @load_LD_double() {
568*9880d681SAndroid Build Coastguard Workerentry:
569*9880d681SAndroid Build Coastguard Worker  %0 = load double, double* @gd1, align 8
570*9880d681SAndroid Build Coastguard Worker  %conv = fpext double %0 to fp128
571*9880d681SAndroid Build Coastguard Worker  ret fp128 %conv
572*9880d681SAndroid Build Coastguard Worker}
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_LD_LD:
575*9880d681SAndroid Build Coastguard Worker; ALL: ld $[[R0:[0-9]+]], %got_disp(gld1)
576*9880d681SAndroid Build Coastguard Worker; ALL: ld $[[R1:[0-9]+]], 0($[[R0]])
577*9880d681SAndroid Build Coastguard Worker; ALL: ld $[[R2:[0-9]+]], 8($[[R0]])
578*9880d681SAndroid Build Coastguard Worker; ALL: ld $[[R3:[0-9]+]], %got_disp(gld0)
579*9880d681SAndroid Build Coastguard Worker; ALL: sd $[[R2]], 8($[[R3]])
580*9880d681SAndroid Build Coastguard Worker; ALL: sd $[[R1]], 0($[[R3]])
581*9880d681SAndroid Build Coastguard Worker
582*9880d681SAndroid Build Coastguard Workerdefine void @store_LD_LD() {
583*9880d681SAndroid Build Coastguard Workerentry:
584*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld1, align 16
585*9880d681SAndroid Build Coastguard Worker  store fp128 %0, fp128* @gld0, align 16
586*9880d681SAndroid Build Coastguard Worker  ret void
587*9880d681SAndroid Build Coastguard Worker}
588*9880d681SAndroid Build Coastguard Worker
589*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_LD_float:
590*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gld1)
591*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $4, 0($[[R0]])
592*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $5, 8($[[R0]])
593*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $25, %call16(__trunctfsf2)
594*9880d681SAndroid Build Coastguard Worker; PRER6: jalr $25
595*9880d681SAndroid Build Coastguard Worker; R6:    jalrc $25
596*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R1:[0-9]+]], %got_disp(gf1)
597*9880d681SAndroid Build Coastguard Worker; ALL:   sw   $2, 0($[[R1]])
598*9880d681SAndroid Build Coastguard Worker
599*9880d681SAndroid Build Coastguard Workerdefine void @store_LD_float() {
600*9880d681SAndroid Build Coastguard Workerentry:
601*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld1, align 16
602*9880d681SAndroid Build Coastguard Worker  %conv = fptrunc fp128 %0 to float
603*9880d681SAndroid Build Coastguard Worker  store float %conv, float* @gf1, align 4
604*9880d681SAndroid Build Coastguard Worker  ret void
605*9880d681SAndroid Build Coastguard Worker}
606*9880d681SAndroid Build Coastguard Worker
607*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: store_LD_double:
608*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R0:[0-9]+]], %got_disp(gld1)
609*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $4, 0($[[R0]])
610*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $5, 8($[[R0]])
611*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $25, %call16(__trunctfdf2)
612*9880d681SAndroid Build Coastguard Worker; PRER6: jalr $25
613*9880d681SAndroid Build Coastguard Worker; R6:    jalrc $25
614*9880d681SAndroid Build Coastguard Worker; ALL:   ld   $[[R1:[0-9]+]], %got_disp(gd1)
615*9880d681SAndroid Build Coastguard Worker; ALL:   sd   $2, 0($[[R1]])
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Workerdefine void @store_LD_double() {
618*9880d681SAndroid Build Coastguard Workerentry:
619*9880d681SAndroid Build Coastguard Worker  %0 = load fp128, fp128* @gld1, align 16
620*9880d681SAndroid Build Coastguard Worker  %conv = fptrunc fp128 %0 to double
621*9880d681SAndroid Build Coastguard Worker  store double %conv, double* @gd1, align 8
622*9880d681SAndroid Build Coastguard Worker  ret void
623*9880d681SAndroid Build Coastguard Worker}
624*9880d681SAndroid Build Coastguard Worker
625*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: select_LD:
626*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      movn $8, $6, $4
627*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      movn $9, $7, $4
628*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      move $2, $8
629*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      move $4, $9
630*9880d681SAndroid Build Coastguard Worker
631*9880d681SAndroid Build Coastguard Worker; FIXME: This sll works around an implementation detail in the code generator
632*9880d681SAndroid Build Coastguard Worker;        (setcc's result is i32 so bits 32-63 are undefined). It's not really
633*9880d681SAndroid Build Coastguard Worker;        needed.
634*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: sll $[[CC:[0-9]+]], $4, 0
635*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: seleqz $[[EQ1:[0-9]+]], $8, $[[CC]]
636*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: selnez $[[NE1:[0-9]+]], $6, $[[CC]]
637*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: or $2, $[[NE1]], $[[EQ1]]
638*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: seleqz $[[EQ2:[0-9]+]], $9, $[[CC]]
639*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: selnez $[[NE2:[0-9]+]], $7, $[[CC]]
640*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT-DAG: or $4, $[[NE2]], $[[EQ2]]
641*9880d681SAndroid Build Coastguard Worker
642*9880d681SAndroid Build Coastguard Workerdefine fp128 @select_LD(i32 signext %a, i64, fp128 %b, fp128 %c) {
643*9880d681SAndroid Build Coastguard Workerentry:
644*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %a, 0
645*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, fp128 %b, fp128 %c
646*9880d681SAndroid Build Coastguard Worker  ret fp128 %cond
647*9880d681SAndroid Build Coastguard Worker}
648*9880d681SAndroid Build Coastguard Worker
649*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: selectCC_LD:
650*9880d681SAndroid Build Coastguard Worker; ALL:           move $[[R0:[0-9]+]], $11
651*9880d681SAndroid Build Coastguard Worker; ALL:           move $[[R1:[0-9]+]], $10
652*9880d681SAndroid Build Coastguard Worker; ALL:           move $[[R2:[0-9]+]], $9
653*9880d681SAndroid Build Coastguard Worker; ALL:           move $[[R3:[0-9]+]], $8
654*9880d681SAndroid Build Coastguard Worker; ALL:           ld   $25, %call16(__gttf2)($gp)
655*9880d681SAndroid Build Coastguard Worker; PRER6:         jalr $25
656*9880d681SAndroid Build Coastguard Worker; R6:            jalrc $25
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      slti $[[CC:[0-9]+]], $2, 1
659*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      movz $[[R1]], $[[R3]], $[[CC]]
660*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      movz $[[R0]], $[[R2]], $[[CC]]
661*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      move $2, $[[R1]]
662*9880d681SAndroid Build Coastguard Worker; C_CC_FMT:      move $4, $[[R0]]
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    slt $[[CC:[0-9]+]], $zero, $2
665*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    seleqz $[[EQ1:[0-9]+]], $[[R1]], $[[CC]]
666*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    selnez $[[NE1:[0-9]+]], $[[R3]], $[[CC]]
667*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    or $2, $[[NE1]], $[[EQ1]]
668*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    seleqz $[[EQ2:[0-9]+]], $[[R0]], $[[CC]]
669*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    selnez $[[NE2:[0-9]+]], $[[R2]], $[[CC]]
670*9880d681SAndroid Build Coastguard Worker; CMP_CC_FMT:    or $4, $[[NE2]], $[[EQ2]]
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Workerdefine fp128 @selectCC_LD(fp128 %a, fp128 %b, fp128 %c, fp128 %d) {
673*9880d681SAndroid Build Coastguard Workerentry:
674*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt fp128 %a, %b
675*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, fp128 %c, fp128 %d
676*9880d681SAndroid Build Coastguard Worker  ret fp128 %cond
677*9880d681SAndroid Build Coastguard Worker}
678