xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/select.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel   -mcpu=mips32   -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel   -mcpu=mips32r2 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32R2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel   -mcpu=mips32r6 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,32R6
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64   -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r2 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64R2
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r6 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,64R6
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker@d2 = external global double
9*9880d681SAndroid Build Coastguard Worker@d3 = external global double
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine i32 @i32_icmp_ne_i32_val(i32 signext %s, i32 signext %f0, i32 signext %f1) nounwind readnone {
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i32_icmp_ne_i32_val:
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; 32:            movn $5, $6, $4
16*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Worker; 32R2:          movn $5, $6, $4
19*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      seleqz $[[T0:[0-9]+]], $5, $4
22*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      selnez $[[T1:[0-9]+]], $6, $4
23*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[T1]], $[[T0]]
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker; 64:            movn $5, $6, $4
26*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; 64R2:          movn $5, $6, $4
29*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      seleqz $[[T0:[0-9]+]], $5, $4
32*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      selnez $[[T1:[0-9]+]], $6, $4
33*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[T1]], $[[T0]]
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %s, 0
36*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, i32 %f1, i32 %f0
37*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
38*9880d681SAndroid Build Coastguard Worker}
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdefine i64 @i32_icmp_ne_i64_val(i32 signext %s, i64 %f0, i64 %f1) nounwind readnone {
41*9880d681SAndroid Build Coastguard Workerentry:
42*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i32_icmp_ne_i64_val:
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[F1:[0-9]+]], 16($sp)
45*9880d681SAndroid Build Coastguard Worker; 32-DAG:        movn $6, $[[F1]], $4
46*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[F1H:[0-9]+]], 20($sp)
47*9880d681SAndroid Build Coastguard Worker; 32:            movn $7, $[[F1H]], $4
48*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $6
49*9880d681SAndroid Build Coastguard Worker; 32:            move $3, $7
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[F1:[0-9]+]], 16($sp)
52*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      movn $6, $[[F1]], $4
53*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[F1H:[0-9]+]], 20($sp)
54*9880d681SAndroid Build Coastguard Worker; 32R2:          movn $7, $[[F1H]], $4
55*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $6
56*9880d681SAndroid Build Coastguard Worker; 32R2:          move $3, $7
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[F1:[0-9]+]], 16($sp)
59*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      seleqz $[[T0:[0-9]+]], $6, $4
60*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      selnez $[[T1:[0-9]+]], $[[F1]], $4
61*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[T1]], $[[T0]]
62*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[F1H:[0-9]+]], 20($sp)
63*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      seleqz $[[T0:[0-9]+]], $7, $4
64*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      selnez $[[T1:[0-9]+]], $[[F1H]], $4
65*9880d681SAndroid Build Coastguard Worker; 32R6:          or $3, $[[T1]], $[[T0]]
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; 64:            movn $5, $6, $4
68*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; 64R2:          movn $5, $6, $4
71*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; FIXME: This sll works around an implementation detail in the code generator
74*9880d681SAndroid Build Coastguard Worker;        (setcc's result is i32 so bits 32-63 are undefined). It's not really
75*9880d681SAndroid Build Coastguard Worker;        needed.
76*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      sll $[[CC:[0-9]+]], $4, 0
77*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      seleqz $[[T0:[0-9]+]], $5, $[[CC]]
78*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      selnez $[[T1:[0-9]+]], $6, $[[CC]]
79*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[T1]], $[[T0]]
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %s, 0
82*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, i64 %f1, i64 %f0
83*9880d681SAndroid Build Coastguard Worker  ret i64 %cond
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdefine i64 @i64_icmp_ne_i64_val(i64 %s, i64 %f0, i64 %f1) nounwind readnone {
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i64_icmp_ne_i64_val:
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker; 32-DAG:        or $[[CC:[0-9]+]], $4
91*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[F1:[0-9]+]], 16($sp)
92*9880d681SAndroid Build Coastguard Worker; 32-DAG:        movn $6, $[[F1]], $[[CC]]
93*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[F1H:[0-9]+]], 20($sp)
94*9880d681SAndroid Build Coastguard Worker; 32:            movn $7, $[[F1H]], $[[CC]]
95*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $6
96*9880d681SAndroid Build Coastguard Worker; 32:            move $3, $7
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      or $[[CC:[0-9]+]], $4
99*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[F1:[0-9]+]], 16($sp)
100*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      movn $6, $[[F1]], $[[CC]]
101*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[F1H:[0-9]+]], 20($sp)
102*9880d681SAndroid Build Coastguard Worker; 32R2:          movn $7, $[[F1H]], $[[CC]]
103*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $6
104*9880d681SAndroid Build Coastguard Worker; 32R2:          move $3, $7
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[F1:[0-9]+]], 16($sp)
107*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      or $[[T2:[0-9]+]], $4, $5
108*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      seleqz $[[T0:[0-9]+]], $6, $[[T2]]
109*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      selnez $[[T1:[0-9]+]], $[[F1]], $[[T2]]
110*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[T1]], $[[T0]]
111*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[F1H:[0-9]+]], 20($sp)
112*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      seleqz $[[T0:[0-9]+]], $7, $[[T2]]
113*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      selnez $[[T1:[0-9]+]], $[[F1H]], $[[T2]]
114*9880d681SAndroid Build Coastguard Worker; 32R6:          or $3, $[[T1]], $[[T0]]
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker; 64:            movn $5, $6, $4
117*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker; 64R2:          movn $5, $6, $4
120*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      seleqz $[[T0:[0-9]+]], $5, $4
123*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      selnez $[[T1:[0-9]+]], $6, $4
124*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[T1]], $[[T0]]
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i64 %s, 0
127*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, i64 %f1, i64 %f0
128*9880d681SAndroid Build Coastguard Worker  ret i64 %cond
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Workerdefine float @i32_icmp_ne_f32_val(i32 signext %s, float %f0, float %f1) nounwind readnone {
132*9880d681SAndroid Build Coastguard Workerentry:
133*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i32_icmp_ne_f32_val:
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $5, $[[F0:f[0-9]+]]
136*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F1:f0]]
137*9880d681SAndroid Build Coastguard Worker; 32:            movn.s $[[F1]], $[[F0]], $4
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $5, $[[F0:f[0-9]+]]
140*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F1:f0]]
141*9880d681SAndroid Build Coastguard Worker; 32R2:          movn.s $[[F1]], $[[F0]], $4
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $5, $[[F0:f[0-9]+]]
144*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F1:f[0-9]+]]
145*9880d681SAndroid Build Coastguard Worker; 32R6:          sltu $[[T0:[0-9]+]], $zero, $4
146*9880d681SAndroid Build Coastguard Worker; 32R6:          mtc1 $[[T0]], $[[CC:f0]]
147*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.s $[[CC]], $[[F1]], $[[F0]]
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker; 64:            movn.s $f14, $f13, $4
150*9880d681SAndroid Build Coastguard Worker; 64:            mov.s $f0, $f14
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Worker; 64R2:          movn.s $f14, $f13, $4
153*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.s $f0, $f14
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; 64R6:          sltu $[[T0:[0-9]+]], $zero, $4
156*9880d681SAndroid Build Coastguard Worker; 64R6:          mtc1 $[[T0]], $[[CC:f0]]
157*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.s $[[CC]], $f14, $f13
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %s, 0
160*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, float %f0, float %f1
161*9880d681SAndroid Build Coastguard Worker  ret float %cond
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine double @i32_icmp_ne_f64_val(i32 signext %s, double %f0, double %f1) nounwind readnone {
165*9880d681SAndroid Build Coastguard Workerentry:
166*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: i32_icmp_ne_f64_val:
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F0:f[1-3]*[02468]+]]
169*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F0H:f[1-3]*[13579]+]]
170*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F1:f0]], 16($sp)
171*9880d681SAndroid Build Coastguard Worker; 32:            movn.d $[[F1]], $[[F0]], $4
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F0:f[0-9]+]]
174*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mthc1 $7, $[[F0]]
175*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F1:f0]], 16($sp)
176*9880d681SAndroid Build Coastguard Worker; 32R2:          movn.d $[[F1]], $[[F0]], $4
177*9880d681SAndroid Build Coastguard Worker
178*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F0:f[0-9]+]]
179*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mthc1 $7, $[[F0]]
180*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      sltu $[[T0:[0-9]+]], $zero, $4
181*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $[[T0]], $[[CC:f0]]
182*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F1:f[0-9]+]], 16($sp)
183*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.d $[[CC]], $[[F1]], $[[F0]]
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; 64:            movn.d $f14, $f13, $4
186*9880d681SAndroid Build Coastguard Worker; 64:            mov.d $f0, $f14
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker; 64R2:          movn.d $f14, $f13, $4
189*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.d $f0, $f14
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      sltu $[[T0:[0-9]+]], $zero, $4
192*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      mtc1 $[[T0]], $[[CC:f0]]
193*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.d $[[CC]], $f14, $f13
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker  %tobool = icmp ne i32 %s, 0
196*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %tobool, double %f0, double %f1
197*9880d681SAndroid Build Coastguard Worker  ret double %cond
198*9880d681SAndroid Build Coastguard Worker}
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Workerdefine float @f32_fcmp_oeq_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
201*9880d681SAndroid Build Coastguard Workerentry:
202*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_oeq_f32_val:
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
205*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
206*9880d681SAndroid Build Coastguard Worker; 32:            c.eq.s $[[F2]], $[[F3]]
207*9880d681SAndroid Build Coastguard Worker; 32:            movt.s $f14, $f12, $fcc0
208*9880d681SAndroid Build Coastguard Worker; 32:            mov.s $f0, $f14
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
211*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
212*9880d681SAndroid Build Coastguard Worker; 32R2:          c.eq.s $[[F2]], $[[F3]]
213*9880d681SAndroid Build Coastguard Worker; 32R2:          movt.s $f14, $f12, $fcc0
214*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.s $f0, $f14
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
217*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
218*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.eq.s $[[CC:f0]], $[[F2]], $[[F3]]
219*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.s $[[CC]], $f14, $f12
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker; 64:            c.eq.s $f14, $f15
222*9880d681SAndroid Build Coastguard Worker; 64:            movt.s $f13, $f12, $fcc0
223*9880d681SAndroid Build Coastguard Worker; 64:            mov.s $f0, $f13
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; 64R2:          c.eq.s $f14, $f15
226*9880d681SAndroid Build Coastguard Worker; 64R2:          movt.s $f13, $f12, $fcc0
227*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.s $f0, $f13
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.eq.s $[[CC:f0]], $f14, $f15
230*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.s $[[CC]], $f13, $f12
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq float %f2, %f3
233*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %f0, float %f1
234*9880d681SAndroid Build Coastguard Worker  ret float %cond
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerdefine float @f32_fcmp_olt_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
238*9880d681SAndroid Build Coastguard Workerentry:
239*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_olt_f32_val:
240*9880d681SAndroid Build Coastguard Worker
241*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
242*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
243*9880d681SAndroid Build Coastguard Worker; 32:            c.olt.s $[[F2]], $[[F3]]
244*9880d681SAndroid Build Coastguard Worker; 32:            movt.s $f14, $f12, $fcc0
245*9880d681SAndroid Build Coastguard Worker; 32:            mov.s $f0, $f14
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
248*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
249*9880d681SAndroid Build Coastguard Worker; 32R2:          c.olt.s $[[F2]], $[[F3]]
250*9880d681SAndroid Build Coastguard Worker; 32R2:          movt.s $f14, $f12, $fcc0
251*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.s $f0, $f14
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
254*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
255*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.s $[[CC:f0]], $[[F2]], $[[F3]]
256*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.s $[[CC]], $f14, $f12
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker; 64:            c.olt.s $f14, $f15
259*9880d681SAndroid Build Coastguard Worker; 64:            movt.s $f13, $f12, $fcc0
260*9880d681SAndroid Build Coastguard Worker; 64:            mov.s $f0, $f13
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker; 64R2:          c.olt.s $f14, $f15
263*9880d681SAndroid Build Coastguard Worker; 64R2:          movt.s $f13, $f12, $fcc0
264*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.s $f0, $f13
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.s $[[CC:f0]], $f14, $f15
267*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.s $[[CC]], $f13, $f12
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt float %f2, %f3
270*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %f0, float %f1
271*9880d681SAndroid Build Coastguard Worker  ret float %cond
272*9880d681SAndroid Build Coastguard Worker}
273*9880d681SAndroid Build Coastguard Worker
274*9880d681SAndroid Build Coastguard Workerdefine float @f32_fcmp_ogt_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
275*9880d681SAndroid Build Coastguard Workerentry:
276*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_ogt_f32_val:
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
279*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
280*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.s $[[F2]], $[[F3]]
281*9880d681SAndroid Build Coastguard Worker; 32:            movf.s $f14, $f12, $fcc0
282*9880d681SAndroid Build Coastguard Worker; 32:            mov.s $f0, $f14
283*9880d681SAndroid Build Coastguard Worker
284*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
285*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
286*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.s $[[F2]], $[[F3]]
287*9880d681SAndroid Build Coastguard Worker; 32R2:          movf.s $f14, $f12, $fcc0
288*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.s $f0, $f14
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
291*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
292*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.s $[[CC:f0]], $[[F3]], $[[F2]]
293*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.s $[[CC]], $f14, $f12
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.s $f14, $f15
296*9880d681SAndroid Build Coastguard Worker; 64:            movf.s $f13, $f12, $fcc0
297*9880d681SAndroid Build Coastguard Worker; 64:            mov.s $f0, $f13
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.s $f14, $f15
300*9880d681SAndroid Build Coastguard Worker; 64R2:          movf.s $f13, $f12, $fcc0
301*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.s $f0, $f13
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.s $[[CC:f0]], $f15, $f14
304*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.s $[[CC]], $f13, $f12
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt float %f2, %f3
307*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %f0, float %f1
308*9880d681SAndroid Build Coastguard Worker  ret float %cond
309*9880d681SAndroid Build Coastguard Worker}
310*9880d681SAndroid Build Coastguard Worker
311*9880d681SAndroid Build Coastguard Workerdefine double @f32_fcmp_ogt_f64_val(double %f0, double %f1, float %f2, float %f3) nounwind readnone {
312*9880d681SAndroid Build Coastguard Workerentry:
313*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_ogt_f64_val:
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lwc1 $[[F2:f[0-9]+]], 16($sp)
316*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lwc1 $[[F3:f[0-9]+]], 20($sp)
317*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.s $[[F2]], $[[F3]]
318*9880d681SAndroid Build Coastguard Worker; 32:            movf.d $f14, $f12, $fcc0
319*9880d681SAndroid Build Coastguard Worker; 32:            mov.d $f0, $f14
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lwc1 $[[F2:f[0-9]+]], 16($sp)
322*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lwc1 $[[F3:f[0-9]+]], 20($sp)
323*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.s $[[F2]], $[[F3]]
324*9880d681SAndroid Build Coastguard Worker; 32R2:          movf.d $f14, $f12, $fcc0
325*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.d $f0, $f14
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lwc1 $[[F2:f[0-9]+]], 16($sp)
328*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lwc1 $[[F3:f[0-9]+]], 20($sp)
329*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.s $[[CC:f0]], $[[F3]], $[[F2]]
330*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.d $[[CC]], $f14, $f12
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.s $f14, $f15
333*9880d681SAndroid Build Coastguard Worker; 64:            movf.d $f13, $f12, $fcc0
334*9880d681SAndroid Build Coastguard Worker; 64:            mov.d $f0, $f13
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.s $f14, $f15
337*9880d681SAndroid Build Coastguard Worker; 64R2:          movf.d $f13, $f12, $fcc0
338*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.d $f0, $f13
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.s $[[CC:f0]], $f15, $f14
341*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.d $[[CC]], $f13, $f12
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt float %f2, %f3
344*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %f0, double %f1
345*9880d681SAndroid Build Coastguard Worker  ret double %cond
346*9880d681SAndroid Build Coastguard Worker}
347*9880d681SAndroid Build Coastguard Worker
348*9880d681SAndroid Build Coastguard Workerdefine double @f64_fcmp_oeq_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
349*9880d681SAndroid Build Coastguard Workerentry:
350*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_oeq_f64_val:
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F2:f[0-9]+]], 16($sp)
353*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F3:f[0-9]+]], 24($sp)
354*9880d681SAndroid Build Coastguard Worker; 32:            c.eq.d $[[F2]], $[[F3]]
355*9880d681SAndroid Build Coastguard Worker; 32:            movt.d $f14, $f12, $fcc0
356*9880d681SAndroid Build Coastguard Worker; 32:            mov.d $f0, $f14
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
359*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
360*9880d681SAndroid Build Coastguard Worker; 32R2:          c.eq.d $[[F2]], $[[F3]]
361*9880d681SAndroid Build Coastguard Worker; 32R2:          movt.d $f14, $f12, $fcc0
362*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.d $f0, $f14
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
365*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
366*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.eq.d $[[CC:f0]], $[[F2]], $[[F3]]
367*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.d $[[CC]], $f14, $f12
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Worker; 64:            c.eq.d $f14, $f15
370*9880d681SAndroid Build Coastguard Worker; 64:            movt.d $f13, $f12, $fcc0
371*9880d681SAndroid Build Coastguard Worker; 64:            mov.d $f0, $f13
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker; 64R2:          c.eq.d $f14, $f15
374*9880d681SAndroid Build Coastguard Worker; 64R2:          movt.d $f13, $f12, $fcc0
375*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.d $f0, $f13
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.eq.d $[[CC:f0]], $f14, $f15
378*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.d $[[CC]], $f13, $f12
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq double %f2, %f3
381*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %f0, double %f1
382*9880d681SAndroid Build Coastguard Worker  ret double %cond
383*9880d681SAndroid Build Coastguard Worker}
384*9880d681SAndroid Build Coastguard Worker
385*9880d681SAndroid Build Coastguard Workerdefine double @f64_fcmp_olt_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
386*9880d681SAndroid Build Coastguard Workerentry:
387*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_olt_f64_val:
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F2:f[0-9]+]], 16($sp)
390*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F3:f[0-9]+]], 24($sp)
391*9880d681SAndroid Build Coastguard Worker; 32:            c.olt.d $[[F2]], $[[F3]]
392*9880d681SAndroid Build Coastguard Worker; 32:            movt.d $f14, $f12, $fcc0
393*9880d681SAndroid Build Coastguard Worker; 32:            mov.d $f0, $f14
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
396*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
397*9880d681SAndroid Build Coastguard Worker; 32R2:          c.olt.d $[[F2]], $[[F3]]
398*9880d681SAndroid Build Coastguard Worker; 32R2:          movt.d $f14, $f12, $fcc0
399*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.d $f0, $f14
400*9880d681SAndroid Build Coastguard Worker
401*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
402*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
403*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.d $[[CC:f0]], $[[F2]], $[[F3]]
404*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.d $[[CC]], $f14, $f12
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Worker; 64:            c.olt.d $f14, $f15
407*9880d681SAndroid Build Coastguard Worker; 64:            movt.d $f13, $f12, $fcc0
408*9880d681SAndroid Build Coastguard Worker; 64:            mov.d $f0, $f13
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Worker; 64R2:          c.olt.d $f14, $f15
411*9880d681SAndroid Build Coastguard Worker; 64R2:          movt.d $f13, $f12, $fcc0
412*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.d $f0, $f13
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.d $[[CC:f0]], $f14, $f15
415*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.d $[[CC]], $f13, $f12
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt double %f2, %f3
418*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %f0, double %f1
419*9880d681SAndroid Build Coastguard Worker  ret double %cond
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine double @f64_fcmp_ogt_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
423*9880d681SAndroid Build Coastguard Workerentry:
424*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_ogt_f64_val:
425*9880d681SAndroid Build Coastguard Worker
426*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F2:f[0-9]+]], 16($sp)
427*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F3:f[0-9]+]], 24($sp)
428*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.d $[[F2]], $[[F3]]
429*9880d681SAndroid Build Coastguard Worker; 32:            movf.d $f14, $f12, $fcc0
430*9880d681SAndroid Build Coastguard Worker; 32:            mov.d $f0, $f14
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
433*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
434*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.d $[[F2]], $[[F3]]
435*9880d681SAndroid Build Coastguard Worker; 32R2:          movf.d $f14, $f12, $fcc0
436*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.d $f0, $f14
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F2:f[0-9]+]], 16($sp)
439*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F3:f[0-9]+]], 24($sp)
440*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.d $[[CC:f0]], $[[F3]], $[[F2]]
441*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.d $[[CC]], $f14, $f12
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.d $f14, $f15
444*9880d681SAndroid Build Coastguard Worker; 64:            movf.d $f13, $f12, $fcc0
445*9880d681SAndroid Build Coastguard Worker; 64:            mov.d $f0, $f13
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.d $f14, $f15
448*9880d681SAndroid Build Coastguard Worker; 64R2:          movf.d $f13, $f12, $fcc0
449*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.d $f0, $f13
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.d $[[CC:f0]], $f15, $f14
452*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.d $[[CC]], $f13, $f12
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt double %f2, %f3
455*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, double %f0, double %f1
456*9880d681SAndroid Build Coastguard Worker  ret double %cond
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Workerdefine float @f64_fcmp_ogt_f32_val(float %f0, float %f1, double %f2, double %f3) nounwind readnone {
460*9880d681SAndroid Build Coastguard Workerentry:
461*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_ogt_f32_val:
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[1-3]*[02468]+]]
464*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F2H:f[1-3]*[13579]+]]
465*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[F3:f[0-9]+]], 16($sp)
466*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.d $[[F2]], $[[F3]]
467*9880d681SAndroid Build Coastguard Worker; 32:            movf.s $f14, $f12, $fcc0
468*9880d681SAndroid Build Coastguard Worker; 32:            mov.s $f0, $f14
469*9880d681SAndroid Build Coastguard Worker
470*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
471*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mthc1 $7, $[[F2]]
472*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[F3:f[0-9]+]], 16($sp)
473*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.d $[[F2]], $[[F3]]
474*9880d681SAndroid Build Coastguard Worker; 32R2:          movf.s $f14, $f12, $fcc0
475*9880d681SAndroid Build Coastguard Worker; 32R2:          mov.s $f0, $f14
476*9880d681SAndroid Build Coastguard Worker
477*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
478*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mthc1 $7, $[[F2]]
479*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[F3:f[0-9]+]], 16($sp)
480*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.d $[[CC:f0]], $[[F3]], $[[F2]]
481*9880d681SAndroid Build Coastguard Worker; 32R6:          sel.s $[[CC]], $f14, $f12
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.d $f14, $f15
484*9880d681SAndroid Build Coastguard Worker; 64:            movf.s $f13, $f12, $fcc0
485*9880d681SAndroid Build Coastguard Worker; 64:            mov.s $f0, $f13
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.d $f14, $f15
488*9880d681SAndroid Build Coastguard Worker; 64R2:          movf.s $f13, $f12, $fcc0
489*9880d681SAndroid Build Coastguard Worker; 64R2:          mov.s $f0, $f13
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.d $[[CC:f0]], $f15, $f14
492*9880d681SAndroid Build Coastguard Worker; 64R6:          sel.s $[[CC]], $f13, $f12
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt double %f2, %f3
495*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, float %f0, float %f1
496*9880d681SAndroid Build Coastguard Worker  ret float %cond
497*9880d681SAndroid Build Coastguard Worker}
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Workerdefine i32 @f32_fcmp_oeq_i32_val(i32 signext %f0, i32 signext %f1, float %f2, float %f3) nounwind readnone {
500*9880d681SAndroid Build Coastguard Workerentry:
501*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_oeq_i32_val:
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
504*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
505*9880d681SAndroid Build Coastguard Worker; 32:            c.eq.s $[[F2]], $[[F3]]
506*9880d681SAndroid Build Coastguard Worker; 32:            movt $5, $4, $fcc0
507*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
510*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
511*9880d681SAndroid Build Coastguard Worker; 32R2:          c.eq.s $[[F2]], $[[F3]]
512*9880d681SAndroid Build Coastguard Worker; 32R2:          movt $5, $4, $fcc0
513*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
516*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
517*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.eq.s $[[CC:f[0-9]+]], $[[F2]], $[[F3]]
518*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
519*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
520*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
521*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
522*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
523*9880d681SAndroid Build Coastguard Worker
524*9880d681SAndroid Build Coastguard Worker; 64:            c.eq.s $f14, $f15
525*9880d681SAndroid Build Coastguard Worker; 64:            movt $5, $4, $fcc0
526*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Worker; 64R2:          c.eq.s $f14, $f15
529*9880d681SAndroid Build Coastguard Worker; 64R2:          movt $5, $4, $fcc0
530*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
531*9880d681SAndroid Build Coastguard Worker
532*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.eq.s $[[CC:f[0-9]+]], $f14, $f15
533*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
534*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
535*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
536*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
537*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
538*9880d681SAndroid Build Coastguard Worker
539*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq float %f2, %f3
540*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
541*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
542*9880d681SAndroid Build Coastguard Worker}
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Workerdefine i32 @f32_fcmp_olt_i32_val(i32 signext %f0, i32 signext %f1, float %f2, float %f3) nounwind readnone {
545*9880d681SAndroid Build Coastguard Workerentry:
546*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_olt_i32_val:
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
549*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
550*9880d681SAndroid Build Coastguard Worker; 32:            c.olt.s $[[F2]], $[[F3]]
551*9880d681SAndroid Build Coastguard Worker; 32:            movt $5, $4, $fcc0
552*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
555*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
556*9880d681SAndroid Build Coastguard Worker; 32R2:          c.olt.s $[[F2]], $[[F3]]
557*9880d681SAndroid Build Coastguard Worker; 32R2:          movt $5, $4, $fcc0
558*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
559*9880d681SAndroid Build Coastguard Worker
560*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
561*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
562*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.s $[[CC:f[0-9]+]], $[[F2]], $[[F3]]
563*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
564*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
565*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
566*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
567*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Worker; 64:            c.olt.s $f14, $f15
570*9880d681SAndroid Build Coastguard Worker; 64:            movt $5, $4, $fcc0
571*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Worker; 64R2:          c.olt.s $f14, $f15
574*9880d681SAndroid Build Coastguard Worker; 64R2:          movt $5, $4, $fcc0
575*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.s $[[CC:f[0-9]+]], $f14, $f15
578*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
579*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
580*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
581*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
582*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
583*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt float %f2, %f3
584*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
585*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
586*9880d681SAndroid Build Coastguard Worker}
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Workerdefine i32 @f32_fcmp_ogt_i32_val(i32 signext %f0, i32 signext %f1, float %f2, float %f3) nounwind readnone {
589*9880d681SAndroid Build Coastguard Workerentry:
590*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f32_fcmp_ogt_i32_val:
591*9880d681SAndroid Build Coastguard Worker
592*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $6, $[[F2:f[0-9]+]]
593*9880d681SAndroid Build Coastguard Worker; 32-DAG:        mtc1 $7, $[[F3:f[0-9]+]]
594*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.s $[[F2]], $[[F3]]
595*9880d681SAndroid Build Coastguard Worker; 32:            movf $5, $4, $fcc0
596*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
599*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
600*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.s $[[F2]], $[[F3]]
601*9880d681SAndroid Build Coastguard Worker; 32R2:          movf $5, $4, $fcc0
602*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $6, $[[F2:f[0-9]+]]
605*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      mtc1 $7, $[[F3:f[0-9]+]]
606*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.s $[[CC:f[0-9]+]], $[[F3]], $[[F2]]
607*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
608*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
609*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
610*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
611*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.s $f14, $f15
614*9880d681SAndroid Build Coastguard Worker; 64:            movf $5, $4, $fcc0
615*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.s $f14, $f15
618*9880d681SAndroid Build Coastguard Worker; 64R2:          movf $5, $4, $fcc0
619*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.s $[[CC:f[0-9]+]], $f15, $f14
622*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
623*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
624*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
625*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
626*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt float %f2, %f3
629*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
630*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
631*9880d681SAndroid Build Coastguard Worker}
632*9880d681SAndroid Build Coastguard Worker
633*9880d681SAndroid Build Coastguard Workerdefine i32 @f64_fcmp_oeq_i32_val(i32 signext %f0, i32 signext %f1) nounwind readonly {
634*9880d681SAndroid Build Coastguard Workerentry:
635*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_oeq_i32_val:
636*9880d681SAndroid Build Coastguard Worker
637*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
638*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addu $[[GOT:[0-9]+]], $[[T0]], $25
639*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D2:[0-9]+]], %got(d2)($1)
640*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
641*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D3:[0-9]+]], %got(d3)($1)
642*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
643*9880d681SAndroid Build Coastguard Worker; 32:            c.eq.d $[[TMP]], $[[TMP1]]
644*9880d681SAndroid Build Coastguard Worker; 32:            movt $5, $4, $fcc0
645*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
646*9880d681SAndroid Build Coastguard Worker
647*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
648*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
649*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
650*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
651*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
652*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
653*9880d681SAndroid Build Coastguard Worker; 32R2:          c.eq.d $[[TMP]], $[[TMP1]]
654*9880d681SAndroid Build Coastguard Worker; 32R2:          movt $5, $4, $fcc0
655*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
658*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
659*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
660*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
661*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
662*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
663*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.eq.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
664*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
665*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
666*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
667*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
668*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
669*9880d681SAndroid Build Coastguard Worker
670*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
671*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddu $[[GOT:[0-9]+]], $[[T0]], $25
672*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D2:[0-9]+]], %got_disp(d2)($1)
673*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
674*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D3:[0-9]+]], %got_disp(d3)($1)
675*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
676*9880d681SAndroid Build Coastguard Worker; 64:            c.eq.d $[[TMP]], $[[TMP1]]
677*9880d681SAndroid Build Coastguard Worker; 64:            movt $5, $4, $fcc0
678*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
679*9880d681SAndroid Build Coastguard Worker
680*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
681*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
682*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
683*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
684*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
685*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
686*9880d681SAndroid Build Coastguard Worker; 64R2:          c.eq.d $[[TMP]], $[[TMP1]]
687*9880d681SAndroid Build Coastguard Worker; 64R2:          movt $5, $4, $fcc0
688*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
689*9880d681SAndroid Build Coastguard Worker
690*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
691*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
692*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
693*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
694*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
695*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
696*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.eq.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
697*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
698*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
699*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
700*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
701*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
702*9880d681SAndroid Build Coastguard Worker
703*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* @d2, align 8
704*9880d681SAndroid Build Coastguard Worker  %tmp1 = load double, double* @d3, align 8
705*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq double %tmp, %tmp1
706*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
707*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
708*9880d681SAndroid Build Coastguard Worker}
709*9880d681SAndroid Build Coastguard Worker
710*9880d681SAndroid Build Coastguard Workerdefine i32 @f64_fcmp_olt_i32_val(i32 signext %f0, i32 signext %f1) nounwind readonly {
711*9880d681SAndroid Build Coastguard Workerentry:
712*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_olt_i32_val:
713*9880d681SAndroid Build Coastguard Worker
714*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
715*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addu $[[GOT:[0-9]+]], $[[T0]], $25
716*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D2:[0-9]+]], %got(d2)($1)
717*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
718*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D3:[0-9]+]], %got(d3)($1)
719*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
720*9880d681SAndroid Build Coastguard Worker; 32:            c.olt.d $[[TMP]], $[[TMP1]]
721*9880d681SAndroid Build Coastguard Worker; 32:            movt $5, $4, $fcc0
722*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
723*9880d681SAndroid Build Coastguard Worker
724*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
725*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
726*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
727*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
728*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
729*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
730*9880d681SAndroid Build Coastguard Worker; 32R2:          c.olt.d $[[TMP]], $[[TMP1]]
731*9880d681SAndroid Build Coastguard Worker; 32R2:          movt $5, $4, $fcc0
732*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
733*9880d681SAndroid Build Coastguard Worker
734*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
735*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
736*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
737*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
738*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
739*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
740*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
741*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
742*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
743*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
744*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
745*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
748*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddu $[[GOT:[0-9]+]], $[[T0]], $25
749*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D2:[0-9]+]], %got_disp(d2)($1)
750*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
751*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D3:[0-9]+]], %got_disp(d3)($1)
752*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
753*9880d681SAndroid Build Coastguard Worker; 64:            c.olt.d $[[TMP]], $[[TMP1]]
754*9880d681SAndroid Build Coastguard Worker; 64:            movt $5, $4, $fcc0
755*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
756*9880d681SAndroid Build Coastguard Worker
757*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
758*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
759*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
760*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
761*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
762*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
763*9880d681SAndroid Build Coastguard Worker; 64R2:          c.olt.d $[[TMP]], $[[TMP1]]
764*9880d681SAndroid Build Coastguard Worker; 64R2:          movt $5, $4, $fcc0
765*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
766*9880d681SAndroid Build Coastguard Worker
767*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
768*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
769*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
770*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
771*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
772*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
773*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
774*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
775*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
776*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
777*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
778*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
779*9880d681SAndroid Build Coastguard Worker
780*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* @d2, align 8
781*9880d681SAndroid Build Coastguard Worker  %tmp1 = load double, double* @d3, align 8
782*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt double %tmp, %tmp1
783*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
784*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
785*9880d681SAndroid Build Coastguard Worker}
786*9880d681SAndroid Build Coastguard Worker
787*9880d681SAndroid Build Coastguard Workerdefine i32 @f64_fcmp_ogt_i32_val(i32 signext %f0, i32 signext %f1) nounwind readonly {
788*9880d681SAndroid Build Coastguard Workerentry:
789*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: f64_fcmp_ogt_i32_val:
790*9880d681SAndroid Build Coastguard Worker
791*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
792*9880d681SAndroid Build Coastguard Worker; 32-DAG:        addu $[[GOT:[0-9]+]], $[[T0]], $25
793*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D2:[0-9]+]], %got(d2)($1)
794*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
795*9880d681SAndroid Build Coastguard Worker; 32-DAG:        lw $[[D3:[0-9]+]], %got(d3)($1)
796*9880d681SAndroid Build Coastguard Worker; 32-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
797*9880d681SAndroid Build Coastguard Worker; 32:            c.ule.d $[[TMP]], $[[TMP1]]
798*9880d681SAndroid Build Coastguard Worker; 32:            movf $5, $4, $fcc0
799*9880d681SAndroid Build Coastguard Worker; 32:            move $2, $5
800*9880d681SAndroid Build Coastguard Worker
801*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
802*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
803*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
804*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
805*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
806*9880d681SAndroid Build Coastguard Worker; 32R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
807*9880d681SAndroid Build Coastguard Worker; 32R2:          c.ule.d $[[TMP]], $[[TMP1]]
808*9880d681SAndroid Build Coastguard Worker; 32R2:          movf $5, $4, $fcc0
809*9880d681SAndroid Build Coastguard Worker; 32R2:          move $2, $5
810*9880d681SAndroid Build Coastguard Worker
811*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
812*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      addu $[[GOT:[0-9]+]], $[[T0]], $25
813*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D2:[0-9]+]], %got(d2)($1)
814*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
815*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      lw $[[D3:[0-9]+]], %got(d3)($1)
816*9880d681SAndroid Build Coastguard Worker; 32R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
817*9880d681SAndroid Build Coastguard Worker; 32R6:          cmp.lt.d $[[CC:f[0-9]+]], $[[TMP1]], $[[TMP]]
818*9880d681SAndroid Build Coastguard Worker; 32R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
819*9880d681SAndroid Build Coastguard Worker; 32R6:          andi $[[CCGPR]], $[[CCGPR]], 1
820*9880d681SAndroid Build Coastguard Worker; 32R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
821*9880d681SAndroid Build Coastguard Worker; 32R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
822*9880d681SAndroid Build Coastguard Worker; 32R6:          or $2, $[[NE]], $[[EQ]]
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
825*9880d681SAndroid Build Coastguard Worker; 64-DAG:        daddu $[[GOT:[0-9]+]], $[[T0]], $25
826*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D2:[0-9]+]], %got_disp(d2)($1)
827*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
828*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ld $[[D3:[0-9]+]], %got_disp(d3)($1)
829*9880d681SAndroid Build Coastguard Worker; 64-DAG:        ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
830*9880d681SAndroid Build Coastguard Worker; 64:            c.ule.d $[[TMP]], $[[TMP1]]
831*9880d681SAndroid Build Coastguard Worker; 64:            movf $5, $4, $fcc0
832*9880d681SAndroid Build Coastguard Worker; 64:            move $2, $5
833*9880d681SAndroid Build Coastguard Worker
834*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
835*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
836*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
837*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
838*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
839*9880d681SAndroid Build Coastguard Worker; 64R2-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
840*9880d681SAndroid Build Coastguard Worker; 64R2:          c.ule.d $[[TMP]], $[[TMP1]]
841*9880d681SAndroid Build Coastguard Worker; 64R2:          movf $5, $4, $fcc0
842*9880d681SAndroid Build Coastguard Worker; 64R2:          move $2, $5
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
845*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      daddu $[[GOT:[0-9]+]], $[[T0]], $25
846*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D2:[0-9]+]], %got_disp(d2)($1)
847*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
848*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ld $[[D3:[0-9]+]], %got_disp(d3)($1)
849*9880d681SAndroid Build Coastguard Worker; 64R6-DAG:      ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
850*9880d681SAndroid Build Coastguard Worker; 64R6:          cmp.lt.d $[[CC:f[0-9]+]], $[[TMP1]], $[[TMP]]
851*9880d681SAndroid Build Coastguard Worker; 64R6:          mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
852*9880d681SAndroid Build Coastguard Worker; 64R6:          andi $[[CCGPR]], $[[CCGPR]], 1
853*9880d681SAndroid Build Coastguard Worker; 64R6:          seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
854*9880d681SAndroid Build Coastguard Worker; 64R6:          selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
855*9880d681SAndroid Build Coastguard Worker; 64R6:          or $2, $[[NE]], $[[EQ]]
856*9880d681SAndroid Build Coastguard Worker
857*9880d681SAndroid Build Coastguard Worker  %tmp = load double, double* @d2, align 8
858*9880d681SAndroid Build Coastguard Worker  %tmp1 = load double, double* @d3, align 8
859*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ogt double %tmp, %tmp1
860*9880d681SAndroid Build Coastguard Worker  %cond = select i1 %cmp, i32 %f0, i32 %f1
861*9880d681SAndroid Build Coastguard Worker  ret i32 %cond
862*9880d681SAndroid Build Coastguard Worker}
863