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