xref: /llvm-project/llvm/test/CodeGen/RISCV/GlobalISel/fp128.ll (revision 43ede4689892a716fc9ec1c9ae4096621f3b0f57)
13e0e1c13SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
23e0e1c13SCraig Topper; RUN: llc -mtriple=riscv64 -global-isel < %s \
33e0e1c13SCraig Topper; RUN:   | FileCheck -check-prefixes=CHECK,RV64I %s
43e0e1c13SCraig Topper; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d < %s \
53e0e1c13SCraig Topper; RUN:   | FileCheck -check-prefixes=CHECK,RV64D %s
63e0e1c13SCraig Topper
73e0e1c13SCraig Topper; FIXME: Support RV32.
83e0e1c13SCraig Topper
93e0e1c13SCraig Topperdefine fp128 @fadd(fp128 %x, fp128 %y) nounwind {
103e0e1c13SCraig Topper; CHECK-LABEL: fadd:
113e0e1c13SCraig Topper; CHECK:       # %bb.0:
123e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
133e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
143e0e1c13SCraig Topper; CHECK-NEXT:    call __addtf3
153e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
163e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
173e0e1c13SCraig Topper; CHECK-NEXT:    ret
183e0e1c13SCraig Topper %a = fadd fp128 %x, %y
193e0e1c13SCraig Topper  ret fp128 %a
203e0e1c13SCraig Topper}
213e0e1c13SCraig Topper
223e0e1c13SCraig Topperdefine fp128 @fsub(fp128 %x, fp128 %y) nounwind {
233e0e1c13SCraig Topper; CHECK-LABEL: fsub:
243e0e1c13SCraig Topper; CHECK:       # %bb.0:
253e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
263e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
273e0e1c13SCraig Topper; CHECK-NEXT:    call __subtf3
283e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
293e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
303e0e1c13SCraig Topper; CHECK-NEXT:    ret
313e0e1c13SCraig Topper  %a = fsub fp128 %x, %y
323e0e1c13SCraig Topper  ret fp128 %a
333e0e1c13SCraig Topper}
343e0e1c13SCraig Topper
353e0e1c13SCraig Topperdefine fp128 @fmul(fp128 %x, fp128 %y) nounwind {
363e0e1c13SCraig Topper; CHECK-LABEL: fmul:
373e0e1c13SCraig Topper; CHECK:       # %bb.0:
383e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
393e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
403e0e1c13SCraig Topper; CHECK-NEXT:    call __multf3
413e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
423e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
433e0e1c13SCraig Topper; CHECK-NEXT:    ret
443e0e1c13SCraig Topper  %a = fmul fp128 %x, %y
453e0e1c13SCraig Topper  ret fp128 %a
463e0e1c13SCraig Topper}
473e0e1c13SCraig Topper
483e0e1c13SCraig Topperdefine fp128 @fdiv(fp128 %x, fp128 %y) nounwind {
493e0e1c13SCraig Topper; CHECK-LABEL: fdiv:
503e0e1c13SCraig Topper; CHECK:       # %bb.0:
513e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
523e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
533e0e1c13SCraig Topper; CHECK-NEXT:    call __divtf3
543e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
553e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
563e0e1c13SCraig Topper; CHECK-NEXT:    ret
573e0e1c13SCraig Topper  %a = fdiv fp128 %x, %y
583e0e1c13SCraig Topper  ret fp128 %a
593e0e1c13SCraig Topper}
603e0e1c13SCraig Topper
613e0e1c13SCraig Topperdefine fp128 @frem(fp128 %x, fp128 %y) nounwind {
623e0e1c13SCraig Topper; CHECK-LABEL: frem:
633e0e1c13SCraig Topper; CHECK:       # %bb.0:
643e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
653e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
663e0e1c13SCraig Topper; CHECK-NEXT:    call fmodl
673e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
683e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
693e0e1c13SCraig Topper; CHECK-NEXT:    ret
703e0e1c13SCraig Topper  %a = frem fp128 %x, %y
713e0e1c13SCraig Topper  ret fp128 %a
723e0e1c13SCraig Topper}
733e0e1c13SCraig Topper
743e0e1c13SCraig Topperdefine fp128 @fma(fp128 %x, fp128 %y, fp128 %z) nounwind {
753e0e1c13SCraig Topper; CHECK-LABEL: fma:
763e0e1c13SCraig Topper; CHECK:       # %bb.0:
773e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
783e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
793e0e1c13SCraig Topper; CHECK-NEXT:    call fmal
803e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
813e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
823e0e1c13SCraig Topper; CHECK-NEXT:    ret
833e0e1c13SCraig Topper  %a = call fp128 @llvm.fma.f128(fp128 %x, fp128 %y, fp128 %z)
843e0e1c13SCraig Topper  ret fp128 %a
853e0e1c13SCraig Topper}
863e0e1c13SCraig Topper
873e0e1c13SCraig Topperdefine fp128 @fneg(fp128 %x) {
883e0e1c13SCraig Topper; CHECK-LABEL: fneg:
893e0e1c13SCraig Topper; CHECK:       # %bb.0:
903e0e1c13SCraig Topper; CHECK-NEXT:    li a2, -1
913e0e1c13SCraig Topper; CHECK-NEXT:    slli a2, a2, 63
923e0e1c13SCraig Topper; CHECK-NEXT:    xor a1, a1, a2
933e0e1c13SCraig Topper; CHECK-NEXT:    ret
943e0e1c13SCraig Topper  %a = fneg fp128 %x
953e0e1c13SCraig Topper  ret fp128 %a
963e0e1c13SCraig Topper}
973e0e1c13SCraig Topper
983e0e1c13SCraig Topperdefine fp128 @fabs(fp128 %x) {
993e0e1c13SCraig Topper; CHECK-LABEL: fabs:
1003e0e1c13SCraig Topper; CHECK:       # %bb.0:
101d78fe84dSCraig Topper; CHECK-NEXT:    slli a1, a1, 1
102d78fe84dSCraig Topper; CHECK-NEXT:    srli a1, a1, 1
1033e0e1c13SCraig Topper; CHECK-NEXT:    ret
1043e0e1c13SCraig Topper  %a = call fp128 @llvm.fabs.f128(fp128 %x)
1053e0e1c13SCraig Topper  ret fp128 %a
1063e0e1c13SCraig Topper}
1073e0e1c13SCraig Topper
1083e0e1c13SCraig Topperdefine fp128 @fcopysign(fp128 %x, fp128 %y) {
1093e0e1c13SCraig Topper; CHECK-LABEL: fcopysign:
1103e0e1c13SCraig Topper; CHECK:       # %bb.0:
111d78fe84dSCraig Topper; CHECK-NEXT:    slli a1, a1, 1
112537e0e1fSLuke Quinn; CHECK-NEXT:    srli a3, a3, 63
113d78fe84dSCraig Topper; CHECK-NEXT:    srli a1, a1, 1
114537e0e1fSLuke Quinn; CHECK-NEXT:    slli a3, a3, 63
115537e0e1fSLuke Quinn; CHECK-NEXT:    or a1, a1, a3
1163e0e1c13SCraig Topper; CHECK-NEXT:    ret
1173e0e1c13SCraig Topper  %a = call fp128 @llvm.copysign.f128(fp128 %x, fp128 %y)
1183e0e1c13SCraig Topper  ret fp128 %a
1193e0e1c13SCraig Topper}
1203e0e1c13SCraig Topper
1213e0e1c13SCraig Topperdefine i1 @fcmp(fp128 %x, fp128 %y) nounwind {
1223e0e1c13SCraig Topper; CHECK-LABEL: fcmp:
1233e0e1c13SCraig Topper; CHECK:       # %bb.0:
1243e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
1253e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1263e0e1c13SCraig Topper; CHECK-NEXT:    call __eqtf2
12711587290SCraig Topper; CHECK-NEXT:    sext.w a0, a0
1283e0e1c13SCraig Topper; CHECK-NEXT:    seqz a0, a0
1293e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1303e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
1313e0e1c13SCraig Topper; CHECK-NEXT:    ret
1323e0e1c13SCraig Topper  %a = fcmp oeq fp128 %x, %y
1333e0e1c13SCraig Topper  ret i1 %a
1343e0e1c13SCraig Topper}
1353e0e1c13SCraig Topper
1363e0e1c13SCraig Topperdefine fp128 @constant(fp128 %x) nounwind {
1373e0e1c13SCraig Topper; CHECK-LABEL: constant:
1383e0e1c13SCraig Topper; CHECK:       # %bb.0:
1393e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
1403e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1413e0e1c13SCraig Topper; CHECK-NEXT:    lui a2, %hi(.LCPI10_0)
1423e0e1c13SCraig Topper; CHECK-NEXT:    addi a3, a2, %lo(.LCPI10_0)
1433e0e1c13SCraig Topper; CHECK-NEXT:    ld a2, 0(a3)
1443e0e1c13SCraig Topper; CHECK-NEXT:    ld a3, 8(a3)
1453e0e1c13SCraig Topper; CHECK-NEXT:    call __addtf3
1463e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1473e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
1483e0e1c13SCraig Topper; CHECK-NEXT:    ret
1493e0e1c13SCraig Topper  %a = fadd fp128 %x, 0xL00000000000000007FFF000000000000
1503e0e1c13SCraig Topper  ret fp128 %a
1513e0e1c13SCraig Topper}
1523e0e1c13SCraig Topper
1533e0e1c13SCraig Topperdefine fp128 @fpext_f32(float %x, float %y) nounwind {
1543e0e1c13SCraig Topper; RV64I-LABEL: fpext_f32:
1553e0e1c13SCraig Topper; RV64I:       # %bb.0:
1563e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
1573e0e1c13SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1583e0e1c13SCraig Topper; RV64I-NEXT:    call __addsf3
1593e0e1c13SCraig Topper; RV64I-NEXT:    call __extendsftf2
1603e0e1c13SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1613e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
1623e0e1c13SCraig Topper; RV64I-NEXT:    ret
1633e0e1c13SCraig Topper;
1643e0e1c13SCraig Topper; RV64D-LABEL: fpext_f32:
1653e0e1c13SCraig Topper; RV64D:       # %bb.0:
1663e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, -16
1673e0e1c13SCraig Topper; RV64D-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1683e0e1c13SCraig Topper; RV64D-NEXT:    fadd.s fa0, fa0, fa1
1693e0e1c13SCraig Topper; RV64D-NEXT:    call __extendsftf2
1703e0e1c13SCraig Topper; RV64D-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1713e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, 16
1723e0e1c13SCraig Topper; RV64D-NEXT:    ret
1733e0e1c13SCraig Topper  %a = fadd float %x, %y
1743e0e1c13SCraig Topper  %b = fpext float %a to fp128
1753e0e1c13SCraig Topper  ret fp128 %b
1763e0e1c13SCraig Topper}
1773e0e1c13SCraig Topper
1783e0e1c13SCraig Topperdefine fp128 @fpext_f64(double %x, double %y) nounwind {
1793e0e1c13SCraig Topper; RV64I-LABEL: fpext_f64:
1803e0e1c13SCraig Topper; RV64I:       # %bb.0:
1813e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
1823e0e1c13SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1833e0e1c13SCraig Topper; RV64I-NEXT:    call __adddf3
1843e0e1c13SCraig Topper; RV64I-NEXT:    call __extenddftf2
1853e0e1c13SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1863e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
1873e0e1c13SCraig Topper; RV64I-NEXT:    ret
1883e0e1c13SCraig Topper;
1893e0e1c13SCraig Topper; RV64D-LABEL: fpext_f64:
1903e0e1c13SCraig Topper; RV64D:       # %bb.0:
1913e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, -16
1923e0e1c13SCraig Topper; RV64D-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1933e0e1c13SCraig Topper; RV64D-NEXT:    fadd.d fa0, fa0, fa1
1943e0e1c13SCraig Topper; RV64D-NEXT:    call __extenddftf2
1953e0e1c13SCraig Topper; RV64D-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1963e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, 16
1973e0e1c13SCraig Topper; RV64D-NEXT:    ret
1983e0e1c13SCraig Topper  %a = fadd double %x, %y
1993e0e1c13SCraig Topper  %b = fpext double %a to fp128
2003e0e1c13SCraig Topper  ret fp128 %b
2013e0e1c13SCraig Topper}
2023e0e1c13SCraig Topper
2033e0e1c13SCraig Topperdefine float @fptrunc_f32(fp128 %x, float %y) nounwind {
2043e0e1c13SCraig Topper; RV64I-LABEL: fptrunc_f32:
2053e0e1c13SCraig Topper; RV64I:       # %bb.0:
2063e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
2073e0e1c13SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2083e0e1c13SCraig Topper; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
2093e0e1c13SCraig Topper; RV64I-NEXT:    mv s0, a2
2103e0e1c13SCraig Topper; RV64I-NEXT:    call __trunctfsf2
2113e0e1c13SCraig Topper; RV64I-NEXT:    mv a1, s0
2123e0e1c13SCraig Topper; RV64I-NEXT:    call __addsf3
2133e0e1c13SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2143e0e1c13SCraig Topper; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
2153e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
2163e0e1c13SCraig Topper; RV64I-NEXT:    ret
2173e0e1c13SCraig Topper;
2183e0e1c13SCraig Topper; RV64D-LABEL: fptrunc_f32:
2193e0e1c13SCraig Topper; RV64D:       # %bb.0:
2203e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, -16
2213e0e1c13SCraig Topper; RV64D-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2223e0e1c13SCraig Topper; RV64D-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2233e0e1c13SCraig Topper; RV64D-NEXT:    fmv.s fs0, fa0
2243e0e1c13SCraig Topper; RV64D-NEXT:    call __trunctfsf2
2253e0e1c13SCraig Topper; RV64D-NEXT:    fadd.s fa0, fa0, fs0
2263e0e1c13SCraig Topper; RV64D-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2273e0e1c13SCraig Topper; RV64D-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2283e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, 16
2293e0e1c13SCraig Topper; RV64D-NEXT:    ret
2303e0e1c13SCraig Topper  %a = fptrunc fp128 %x to float
2313e0e1c13SCraig Topper  %b = fadd float %a, %y
2323e0e1c13SCraig Topper  ret float %b
2333e0e1c13SCraig Topper}
2343e0e1c13SCraig Topper
2353e0e1c13SCraig Topperdefine double @fptrunc_f64(fp128 %x, double %y) nounwind {
2363e0e1c13SCraig Topper; RV64I-LABEL: fptrunc_f64:
2373e0e1c13SCraig Topper; RV64I:       # %bb.0:
2383e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, -16
2393e0e1c13SCraig Topper; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2403e0e1c13SCraig Topper; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill
2413e0e1c13SCraig Topper; RV64I-NEXT:    mv s0, a2
2423e0e1c13SCraig Topper; RV64I-NEXT:    call __trunctfdf2
2433e0e1c13SCraig Topper; RV64I-NEXT:    mv a1, s0
2443e0e1c13SCraig Topper; RV64I-NEXT:    call __adddf3
2453e0e1c13SCraig Topper; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2463e0e1c13SCraig Topper; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload
2473e0e1c13SCraig Topper; RV64I-NEXT:    addi sp, sp, 16
2483e0e1c13SCraig Topper; RV64I-NEXT:    ret
2493e0e1c13SCraig Topper;
2503e0e1c13SCraig Topper; RV64D-LABEL: fptrunc_f64:
2513e0e1c13SCraig Topper; RV64D:       # %bb.0:
2523e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, -16
2533e0e1c13SCraig Topper; RV64D-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2543e0e1c13SCraig Topper; RV64D-NEXT:    fsd fs0, 0(sp) # 8-byte Folded Spill
2553e0e1c13SCraig Topper; RV64D-NEXT:    fmv.d fs0, fa0
2563e0e1c13SCraig Topper; RV64D-NEXT:    call __trunctfdf2
2573e0e1c13SCraig Topper; RV64D-NEXT:    fadd.d fa0, fa0, fs0
2583e0e1c13SCraig Topper; RV64D-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2593e0e1c13SCraig Topper; RV64D-NEXT:    fld fs0, 0(sp) # 8-byte Folded Reload
2603e0e1c13SCraig Topper; RV64D-NEXT:    addi sp, sp, 16
2613e0e1c13SCraig Topper; RV64D-NEXT:    ret
2623e0e1c13SCraig Topper  %a = fptrunc fp128 %x to double
2633e0e1c13SCraig Topper  %b = fadd double %a, %y
2643e0e1c13SCraig Topper  ret double %b
2653e0e1c13SCraig Topper}
2663e0e1c13SCraig Topper
2673e0e1c13SCraig Topperdefine i8 @fptosi_i8(fp128 %x) nounwind {
2683e0e1c13SCraig Topper; CHECK-LABEL: fptosi_i8:
2693e0e1c13SCraig Topper; CHECK:       # %bb.0:
2703e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
2713e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2723e0e1c13SCraig Topper; CHECK-NEXT:    call __fixtfsi
2733e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2743e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
2753e0e1c13SCraig Topper; CHECK-NEXT:    ret
2763e0e1c13SCraig Topper  %a = fptosi fp128 %x to i8
2773e0e1c13SCraig Topper  ret i8 %a
2783e0e1c13SCraig Topper}
2793e0e1c13SCraig Topper
2803e0e1c13SCraig Topperdefine i16 @fptosi_i16(fp128 %x) nounwind {
2813e0e1c13SCraig Topper; CHECK-LABEL: fptosi_i16:
2823e0e1c13SCraig Topper; CHECK:       # %bb.0:
2833e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
2843e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2853e0e1c13SCraig Topper; CHECK-NEXT:    call __fixtfsi
2863e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
2873e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
2883e0e1c13SCraig Topper; CHECK-NEXT:    ret
2893e0e1c13SCraig Topper  %a = fptosi fp128 %x to i16
2903e0e1c13SCraig Topper  ret i16 %a
2913e0e1c13SCraig Topper}
2923e0e1c13SCraig Topper
2933e0e1c13SCraig Topperdefine i32 @fptosi_i32(fp128 %x) nounwind {
2943e0e1c13SCraig Topper; CHECK-LABEL: fptosi_i32:
2953e0e1c13SCraig Topper; CHECK:       # %bb.0:
2963e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
2973e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
2983e0e1c13SCraig Topper; CHECK-NEXT:    call __fixtfsi
2993e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3003e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3013e0e1c13SCraig Topper; CHECK-NEXT:    ret
3023e0e1c13SCraig Topper  %a = fptosi fp128 %x to i32
3033e0e1c13SCraig Topper  ret i32 %a
3043e0e1c13SCraig Topper}
3053e0e1c13SCraig Topper
3063e0e1c13SCraig Topperdefine i64 @fptosi_i64(fp128 %x) nounwind {
3073e0e1c13SCraig Topper; CHECK-LABEL: fptosi_i64:
3083e0e1c13SCraig Topper; CHECK:       # %bb.0:
3093e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3103e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3113e0e1c13SCraig Topper; CHECK-NEXT:    call __fixtfdi
3123e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3133e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3143e0e1c13SCraig Topper; CHECK-NEXT:    ret
3153e0e1c13SCraig Topper  %a = fptosi fp128 %x to i64
3163e0e1c13SCraig Topper  ret i64 %a
3173e0e1c13SCraig Topper}
3183e0e1c13SCraig Topper
3193e0e1c13SCraig Topperdefine i128 @fptosi_i128(fp128 %x) nounwind {
3203e0e1c13SCraig Topper; CHECK-LABEL: fptosi_i128:
3213e0e1c13SCraig Topper; CHECK:       # %bb.0:
3223e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3233e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3243e0e1c13SCraig Topper; CHECK-NEXT:    call __fixtfti
3253e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3263e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3273e0e1c13SCraig Topper; CHECK-NEXT:    ret
3283e0e1c13SCraig Topper  %a = fptosi fp128 %x to i128
3293e0e1c13SCraig Topper  ret i128 %a
3303e0e1c13SCraig Topper}
3313e0e1c13SCraig Topper
3323e0e1c13SCraig Topperdefine i8 @fptoui_i8(fp128 %x) nounwind {
3333e0e1c13SCraig Topper; CHECK-LABEL: fptoui_i8:
3343e0e1c13SCraig Topper; CHECK:       # %bb.0:
3353e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3363e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3373e0e1c13SCraig Topper; CHECK-NEXT:    call __fixunstfsi
3383e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3393e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3403e0e1c13SCraig Topper; CHECK-NEXT:    ret
3413e0e1c13SCraig Topper  %a = fptoui fp128 %x to i8
3423e0e1c13SCraig Topper  ret i8 %a
3433e0e1c13SCraig Topper}
3443e0e1c13SCraig Topper
3453e0e1c13SCraig Topperdefine i16 @fptoui_i16(fp128 %x) nounwind {
3463e0e1c13SCraig Topper; CHECK-LABEL: fptoui_i16:
3473e0e1c13SCraig Topper; CHECK:       # %bb.0:
3483e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3493e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3503e0e1c13SCraig Topper; CHECK-NEXT:    call __fixunstfsi
3513e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3523e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3533e0e1c13SCraig Topper; CHECK-NEXT:    ret
3543e0e1c13SCraig Topper  %a = fptoui fp128 %x to i16
3553e0e1c13SCraig Topper  ret i16 %a
3563e0e1c13SCraig Topper}
3573e0e1c13SCraig Topper
3583e0e1c13SCraig Topperdefine i32 @fptoui_i32(fp128 %x) nounwind {
3593e0e1c13SCraig Topper; CHECK-LABEL: fptoui_i32:
3603e0e1c13SCraig Topper; CHECK:       # %bb.0:
3613e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3623e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3633e0e1c13SCraig Topper; CHECK-NEXT:    call __fixunstfsi
3643e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3653e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3663e0e1c13SCraig Topper; CHECK-NEXT:    ret
3673e0e1c13SCraig Topper  %a = fptoui fp128 %x to i32
3683e0e1c13SCraig Topper  ret i32 %a
3693e0e1c13SCraig Topper}
3703e0e1c13SCraig Topper
3713e0e1c13SCraig Topperdefine i64 @fptoui_i64(fp128 %x) nounwind {
3723e0e1c13SCraig Topper; CHECK-LABEL: fptoui_i64:
3733e0e1c13SCraig Topper; CHECK:       # %bb.0:
3743e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3753e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3763e0e1c13SCraig Topper; CHECK-NEXT:    call __fixunstfdi
3773e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3783e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3793e0e1c13SCraig Topper; CHECK-NEXT:    ret
3803e0e1c13SCraig Topper  %a = fptoui fp128 %x to i64
3813e0e1c13SCraig Topper  ret i64 %a
3823e0e1c13SCraig Topper}
3833e0e1c13SCraig Topper
3843e0e1c13SCraig Topperdefine i128 @fptoui_i128(fp128 %x) nounwind {
3853e0e1c13SCraig Topper; CHECK-LABEL: fptoui_i128:
3863e0e1c13SCraig Topper; CHECK:       # %bb.0:
3873e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
3883e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3893e0e1c13SCraig Topper; CHECK-NEXT:    call __fixunstfti
3903e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3913e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
3923e0e1c13SCraig Topper; CHECK-NEXT:    ret
3933e0e1c13SCraig Topper  %a = fptoui fp128 %x to i128
3943e0e1c13SCraig Topper  ret i128 %a
3953e0e1c13SCraig Topper}
3963e0e1c13SCraig Topper
3973e0e1c13SCraig Topperdefine fp128 @sitofp_i8(i8 %x) nounwind {
3983e0e1c13SCraig Topper; CHECK-LABEL: sitofp_i8:
3993e0e1c13SCraig Topper; CHECK:       # %bb.0:
4003e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4013e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4023e0e1c13SCraig Topper; CHECK-NEXT:    slli a0, a0, 56
4033e0e1c13SCraig Topper; CHECK-NEXT:    srai a0, a0, 56
4043e0e1c13SCraig Topper; CHECK-NEXT:    call __floatsitf
4053e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4063e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4073e0e1c13SCraig Topper; CHECK-NEXT:    ret
4083e0e1c13SCraig Topper  %a = sitofp i8 %x to fp128
4093e0e1c13SCraig Topper  ret fp128 %a
4103e0e1c13SCraig Topper}
4113e0e1c13SCraig Topper
4123e0e1c13SCraig Topperdefine fp128 @sitofp_i16(i16 %x) nounwind {
4133e0e1c13SCraig Topper; CHECK-LABEL: sitofp_i16:
4143e0e1c13SCraig Topper; CHECK:       # %bb.0:
4153e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4163e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4173e0e1c13SCraig Topper; CHECK-NEXT:    slli a0, a0, 48
4183e0e1c13SCraig Topper; CHECK-NEXT:    srai a0, a0, 48
4193e0e1c13SCraig Topper; CHECK-NEXT:    call __floatsitf
4203e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4213e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4223e0e1c13SCraig Topper; CHECK-NEXT:    ret
4233e0e1c13SCraig Topper  %a = sitofp i16 %x to fp128
4243e0e1c13SCraig Topper  ret fp128 %a
4253e0e1c13SCraig Topper}
4263e0e1c13SCraig Topper
4273e0e1c13SCraig Topperdefine fp128 @sitofp_i32(i32 %x) nounwind {
4283e0e1c13SCraig Topper; CHECK-LABEL: sitofp_i32:
4293e0e1c13SCraig Topper; CHECK:       # %bb.0:
4303e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4313e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4323e0e1c13SCraig Topper; CHECK-NEXT:    sext.w a0, a0
4333e0e1c13SCraig Topper; CHECK-NEXT:    call __floatsitf
4343e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4353e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4363e0e1c13SCraig Topper; CHECK-NEXT:    ret
4373e0e1c13SCraig Topper  %a = sitofp i32 %x to fp128
4383e0e1c13SCraig Topper  ret fp128 %a
4393e0e1c13SCraig Topper}
4403e0e1c13SCraig Topper
4413e0e1c13SCraig Topperdefine fp128 @sitofp_i64(i64 %x) nounwind {
4423e0e1c13SCraig Topper; CHECK-LABEL: sitofp_i64:
4433e0e1c13SCraig Topper; CHECK:       # %bb.0:
4443e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4453e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4463e0e1c13SCraig Topper; CHECK-NEXT:    call __floatditf
4473e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4483e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4493e0e1c13SCraig Topper; CHECK-NEXT:    ret
4503e0e1c13SCraig Topper  %a = sitofp i64 %x to fp128
4513e0e1c13SCraig Topper  ret fp128 %a
4523e0e1c13SCraig Topper}
4533e0e1c13SCraig Topper
4543e0e1c13SCraig Topperdefine fp128 @sitofp_i128(i128 %x) nounwind {
4553e0e1c13SCraig Topper; CHECK-LABEL: sitofp_i128:
4563e0e1c13SCraig Topper; CHECK:       # %bb.0:
4573e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4583e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4593e0e1c13SCraig Topper; CHECK-NEXT:    call __floattitf
4603e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4613e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4623e0e1c13SCraig Topper; CHECK-NEXT:    ret
4633e0e1c13SCraig Topper  %a = sitofp i128 %x to fp128
4643e0e1c13SCraig Topper  ret fp128 %a
4653e0e1c13SCraig Topper}
4663e0e1c13SCraig Topper
4673e0e1c13SCraig Topperdefine fp128 @uitofp_i8(i8 %x) nounwind {
4683e0e1c13SCraig Topper; CHECK-LABEL: uitofp_i8:
4693e0e1c13SCraig Topper; CHECK:       # %bb.0:
4703e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4713e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4723e0e1c13SCraig Topper; CHECK-NEXT:    andi a0, a0, 255
4733e0e1c13SCraig Topper; CHECK-NEXT:    call __floatunsitf
4743e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4753e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4763e0e1c13SCraig Topper; CHECK-NEXT:    ret
4773e0e1c13SCraig Topper  %a = uitofp i8 %x to fp128
4783e0e1c13SCraig Topper  ret fp128 %a
4793e0e1c13SCraig Topper}
4803e0e1c13SCraig Topper
4813e0e1c13SCraig Topperdefine fp128 @uitofp_i16(i16 %x) nounwind {
4823e0e1c13SCraig Topper; CHECK-LABEL: uitofp_i16:
4833e0e1c13SCraig Topper; CHECK:       # %bb.0:
4843e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
4853e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
486d78fe84dSCraig Topper; CHECK-NEXT:    slli a0, a0, 48
487d78fe84dSCraig Topper; CHECK-NEXT:    srli a0, a0, 48
4883e0e1c13SCraig Topper; CHECK-NEXT:    call __floatunsitf
4893e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4903e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
4913e0e1c13SCraig Topper; CHECK-NEXT:    ret
4923e0e1c13SCraig Topper  %a = uitofp i16 %x to fp128
4933e0e1c13SCraig Topper  ret fp128 %a
4943e0e1c13SCraig Topper}
4953e0e1c13SCraig Topper
4963e0e1c13SCraig Topperdefine fp128 @uitofp_i32(i32 %x) nounwind {
4973e0e1c13SCraig Topper; CHECK-LABEL: uitofp_i32:
4983e0e1c13SCraig Topper; CHECK:       # %bb.0:
4993e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
5003e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5013e0e1c13SCraig Topper; CHECK-NEXT:    sext.w a0, a0
5023e0e1c13SCraig Topper; CHECK-NEXT:    call __floatunsitf
5033e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5043e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
5053e0e1c13SCraig Topper; CHECK-NEXT:    ret
5063e0e1c13SCraig Topper  %a = uitofp i32 %x to fp128
5073e0e1c13SCraig Topper  ret fp128 %a
5083e0e1c13SCraig Topper}
5093e0e1c13SCraig Topper
5103e0e1c13SCraig Topperdefine fp128 @uitofp_i64(i64 %x) nounwind {
5113e0e1c13SCraig Topper; CHECK-LABEL: uitofp_i64:
5123e0e1c13SCraig Topper; CHECK:       # %bb.0:
5133e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
5143e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5153e0e1c13SCraig Topper; CHECK-NEXT:    call __floatunditf
5163e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5173e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
5183e0e1c13SCraig Topper; CHECK-NEXT:    ret
5193e0e1c13SCraig Topper  %a = uitofp i64 %x to fp128
5203e0e1c13SCraig Topper  ret fp128 %a
5213e0e1c13SCraig Topper}
5223e0e1c13SCraig Topper
5233e0e1c13SCraig Topperdefine fp128 @uitofp_i128(i128 %x) nounwind {
5243e0e1c13SCraig Topper; CHECK-LABEL: uitofp_i128:
5253e0e1c13SCraig Topper; CHECK:       # %bb.0:
5263e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
5273e0e1c13SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
5283e0e1c13SCraig Topper; CHECK-NEXT:    call __floatuntitf
5293e0e1c13SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5303e0e1c13SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
5313e0e1c13SCraig Topper; CHECK-NEXT:    ret
5323e0e1c13SCraig Topper  %a = uitofp i128 %x to fp128
5333e0e1c13SCraig Topper  ret fp128 %a
5343e0e1c13SCraig Topper}
535*43ede468SCraig Topper
536*43ede468SCraig Topperdefine fp128 @sqrt(fp128 %a) nounwind {
537*43ede468SCraig Topper; CHECK-LABEL: sqrt:
538*43ede468SCraig Topper; CHECK:       # %bb.0:
539*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
540*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
541*43ede468SCraig Topper; CHECK-NEXT:    call sqrtl
542*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
543*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
544*43ede468SCraig Topper; CHECK-NEXT:    ret
545*43ede468SCraig Topper  %1 = call fp128 @llvm.sqrt.f128(fp128 %a)
546*43ede468SCraig Topper  ret fp128 %1
547*43ede468SCraig Topper}
548*43ede468SCraig Topper
549*43ede468SCraig Topperdefine fp128 @powi(fp128 %a, i32 %b) nounwind {
550*43ede468SCraig Topper; CHECK-LABEL: powi:
551*43ede468SCraig Topper; CHECK:       # %bb.0:
552*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
553*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
554*43ede468SCraig Topper; CHECK-NEXT:    sext.w a2, a2
555*43ede468SCraig Topper; CHECK-NEXT:    call __powitf2
556*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
557*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
558*43ede468SCraig Topper; CHECK-NEXT:    ret
559*43ede468SCraig Topper  %1 = call fp128 @llvm.powi.f128.i32(fp128 %a, i32 %b)
560*43ede468SCraig Topper  ret fp128 %1
561*43ede468SCraig Topper}
562*43ede468SCraig Topper
563*43ede468SCraig Topperdefine fp128 @sin(fp128 %a) nounwind {
564*43ede468SCraig Topper; CHECK-LABEL: sin:
565*43ede468SCraig Topper; CHECK:       # %bb.0:
566*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
567*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
568*43ede468SCraig Topper; CHECK-NEXT:    call sinl
569*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
570*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
571*43ede468SCraig Topper; CHECK-NEXT:    ret
572*43ede468SCraig Topper  %1 = call fp128 @llvm.sin.f128(fp128 %a)
573*43ede468SCraig Topper  ret fp128 %1
574*43ede468SCraig Topper}
575*43ede468SCraig Topper
576*43ede468SCraig Topperdefine fp128 @cos(fp128 %a) nounwind {
577*43ede468SCraig Topper; CHECK-LABEL: cos:
578*43ede468SCraig Topper; CHECK:       # %bb.0:
579*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
580*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
581*43ede468SCraig Topper; CHECK-NEXT:    call cosl
582*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
583*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
584*43ede468SCraig Topper; CHECK-NEXT:    ret
585*43ede468SCraig Topper  %1 = call fp128 @llvm.cos.f128(fp128 %a)
586*43ede468SCraig Topper  ret fp128 %1
587*43ede468SCraig Topper}
588*43ede468SCraig Topper
589*43ede468SCraig Topperdefine fp128 @pow(fp128 %a, fp128 %b) nounwind {
590*43ede468SCraig Topper; CHECK-LABEL: pow:
591*43ede468SCraig Topper; CHECK:       # %bb.0:
592*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
593*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
594*43ede468SCraig Topper; CHECK-NEXT:    call powl
595*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
596*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
597*43ede468SCraig Topper; CHECK-NEXT:    ret
598*43ede468SCraig Topper  %1 = call fp128 @llvm.pow.f128(fp128 %a, fp128 %b)
599*43ede468SCraig Topper  ret fp128 %1
600*43ede468SCraig Topper}
601*43ede468SCraig Topper
602*43ede468SCraig Topperdefine fp128 @exp(fp128 %a) nounwind {
603*43ede468SCraig Topper; CHECK-LABEL: exp:
604*43ede468SCraig Topper; CHECK:       # %bb.0:
605*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
606*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
607*43ede468SCraig Topper; CHECK-NEXT:    call expl
608*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
609*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
610*43ede468SCraig Topper; CHECK-NEXT:    ret
611*43ede468SCraig Topper  %1 = call fp128 @llvm.exp.f128(fp128 %a)
612*43ede468SCraig Topper  ret fp128 %1
613*43ede468SCraig Topper}
614*43ede468SCraig Topper
615*43ede468SCraig Topperdefine fp128 @exp2(fp128 %a) nounwind {
616*43ede468SCraig Topper; CHECK-LABEL: exp2:
617*43ede468SCraig Topper; CHECK:       # %bb.0:
618*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
619*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
620*43ede468SCraig Topper; CHECK-NEXT:    call exp2l
621*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
622*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
623*43ede468SCraig Topper; CHECK-NEXT:    ret
624*43ede468SCraig Topper  %1 = call fp128 @llvm.exp2.f128(fp128 %a)
625*43ede468SCraig Topper  ret fp128 %1
626*43ede468SCraig Topper}
627*43ede468SCraig Topper
628*43ede468SCraig Topperdefine fp128 @exp10(fp128 %a) nounwind {
629*43ede468SCraig Topper; CHECK-LABEL: exp10:
630*43ede468SCraig Topper; CHECK:       # %bb.0:
631*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
632*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
633*43ede468SCraig Topper; CHECK-NEXT:    call exp10l
634*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
635*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
636*43ede468SCraig Topper; CHECK-NEXT:    ret
637*43ede468SCraig Topper  %1 = call fp128 @llvm.exp10.f128(fp128 %a)
638*43ede468SCraig Topper  ret fp128 %1
639*43ede468SCraig Topper}
640*43ede468SCraig Topper
641*43ede468SCraig Topperdefine fp128 @log(fp128 %a) nounwind {
642*43ede468SCraig Topper; CHECK-LABEL: log:
643*43ede468SCraig Topper; CHECK:       # %bb.0:
644*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
645*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
646*43ede468SCraig Topper; CHECK-NEXT:    call logl
647*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
648*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
649*43ede468SCraig Topper; CHECK-NEXT:    ret
650*43ede468SCraig Topper  %1 = call fp128 @llvm.log.f128(fp128 %a)
651*43ede468SCraig Topper  ret fp128 %1
652*43ede468SCraig Topper}
653*43ede468SCraig Topper
654*43ede468SCraig Topperdefine fp128 @log10(fp128 %a) nounwind {
655*43ede468SCraig Topper; CHECK-LABEL: log10:
656*43ede468SCraig Topper; CHECK:       # %bb.0:
657*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
658*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
659*43ede468SCraig Topper; CHECK-NEXT:    call log10l
660*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
661*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
662*43ede468SCraig Topper; CHECK-NEXT:    ret
663*43ede468SCraig Topper  %1 = call fp128 @llvm.log10.f128(fp128 %a)
664*43ede468SCraig Topper  ret fp128 %1
665*43ede468SCraig Topper}
666*43ede468SCraig Topper
667*43ede468SCraig Topperdefine fp128 @log2(fp128 %a) nounwind {
668*43ede468SCraig Topper; CHECK-LABEL: log2:
669*43ede468SCraig Topper; CHECK:       # %bb.0:
670*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
671*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
672*43ede468SCraig Topper; CHECK-NEXT:    call log2l
673*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
674*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
675*43ede468SCraig Topper; CHECK-NEXT:    ret
676*43ede468SCraig Topper  %1 = call fp128 @llvm.log2.f128(fp128 %a)
677*43ede468SCraig Topper  ret fp128 %1
678*43ede468SCraig Topper}
679*43ede468SCraig Topper
680*43ede468SCraig Topperdefine fp128 @minnum(fp128 %a, fp128 %b) nounwind {
681*43ede468SCraig Topper; CHECK-LABEL: minnum:
682*43ede468SCraig Topper; CHECK:       # %bb.0:
683*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
684*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
685*43ede468SCraig Topper; CHECK-NEXT:    call fminl
686*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
687*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
688*43ede468SCraig Topper; CHECK-NEXT:    ret
689*43ede468SCraig Topper  %1 = call fp128 @llvm.minnum.f128(fp128 %a, fp128 %b)
690*43ede468SCraig Topper  ret fp128 %1
691*43ede468SCraig Topper}
692*43ede468SCraig Topper
693*43ede468SCraig Topperdefine fp128 @maxnum(fp128 %a, fp128 %b) nounwind {
694*43ede468SCraig Topper; CHECK-LABEL: maxnum:
695*43ede468SCraig Topper; CHECK:       # %bb.0:
696*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
697*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
698*43ede468SCraig Topper; CHECK-NEXT:    call fmaxl
699*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
700*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
701*43ede468SCraig Topper; CHECK-NEXT:    ret
702*43ede468SCraig Topper  %1 = call fp128 @llvm.maxnum.f128(fp128 %a, fp128 %b)
703*43ede468SCraig Topper  ret fp128 %1
704*43ede468SCraig Topper}
705*43ede468SCraig Topper
706*43ede468SCraig Topperdefine fp128 @floor(fp128 %a) nounwind {
707*43ede468SCraig Topper; CHECK-LABEL: floor:
708*43ede468SCraig Topper; CHECK:       # %bb.0:
709*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
710*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
711*43ede468SCraig Topper; CHECK-NEXT:    call floorl
712*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
713*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
714*43ede468SCraig Topper; CHECK-NEXT:    ret
715*43ede468SCraig Topper  %1 = call fp128 @llvm.floor.f128(fp128 %a)
716*43ede468SCraig Topper  ret fp128 %1
717*43ede468SCraig Topper}
718*43ede468SCraig Topper
719*43ede468SCraig Topperdefine fp128 @ceil(fp128 %a) nounwind {
720*43ede468SCraig Topper; CHECK-LABEL: ceil:
721*43ede468SCraig Topper; CHECK:       # %bb.0:
722*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
723*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
724*43ede468SCraig Topper; CHECK-NEXT:    call ceill
725*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
726*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
727*43ede468SCraig Topper; CHECK-NEXT:    ret
728*43ede468SCraig Topper  %1 = call fp128 @llvm.ceil.f128(fp128 %a)
729*43ede468SCraig Topper  ret fp128 %1
730*43ede468SCraig Topper}
731*43ede468SCraig Topper
732*43ede468SCraig Topperdefine fp128 @trunc(fp128 %a) nounwind {
733*43ede468SCraig Topper; CHECK-LABEL: trunc:
734*43ede468SCraig Topper; CHECK:       # %bb.0:
735*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
736*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
737*43ede468SCraig Topper; CHECK-NEXT:    call truncl
738*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
739*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
740*43ede468SCraig Topper; CHECK-NEXT:    ret
741*43ede468SCraig Topper  %1 = call fp128 @llvm.trunc.f128(fp128 %a)
742*43ede468SCraig Topper  ret fp128 %1
743*43ede468SCraig Topper}
744*43ede468SCraig Topper
745*43ede468SCraig Topperdefine fp128 @rint(fp128 %a) nounwind {
746*43ede468SCraig Topper; CHECK-LABEL: rint:
747*43ede468SCraig Topper; CHECK:       # %bb.0:
748*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
749*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
750*43ede468SCraig Topper; CHECK-NEXT:    call rintl
751*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
752*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
753*43ede468SCraig Topper; CHECK-NEXT:    ret
754*43ede468SCraig Topper  %1 = call fp128 @llvm.rint.f128(fp128 %a)
755*43ede468SCraig Topper  ret fp128 %1
756*43ede468SCraig Topper}
757*43ede468SCraig Topper
758*43ede468SCraig Topperdefine fp128 @nearbyint(fp128 %a) nounwind {
759*43ede468SCraig Topper; CHECK-LABEL: nearbyint:
760*43ede468SCraig Topper; CHECK:       # %bb.0:
761*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
762*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
763*43ede468SCraig Topper; CHECK-NEXT:    call nearbyintl
764*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
765*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
766*43ede468SCraig Topper; CHECK-NEXT:    ret
767*43ede468SCraig Topper  %1 = call fp128 @llvm.nearbyint.f128(fp128 %a)
768*43ede468SCraig Topper  ret fp128 %1
769*43ede468SCraig Topper}
770*43ede468SCraig Topper
771*43ede468SCraig Topperdefine fp128 @round(fp128 %a) nounwind {
772*43ede468SCraig Topper; CHECK-LABEL: round:
773*43ede468SCraig Topper; CHECK:       # %bb.0:
774*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
775*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
776*43ede468SCraig Topper; CHECK-NEXT:    call roundl
777*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
778*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
779*43ede468SCraig Topper; CHECK-NEXT:    ret
780*43ede468SCraig Topper  %1 = call fp128 @llvm.round.f128(fp128 %a)
781*43ede468SCraig Topper  ret fp128 %1
782*43ede468SCraig Topper}
783*43ede468SCraig Topper
784*43ede468SCraig Topperdefine fp128 @roundeven(fp128 %a) nounwind {
785*43ede468SCraig Topper; CHECK-LABEL: roundeven:
786*43ede468SCraig Topper; CHECK:       # %bb.0:
787*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
788*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
789*43ede468SCraig Topper; CHECK-NEXT:    call roundevenl
790*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
791*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
792*43ede468SCraig Topper; CHECK-NEXT:    ret
793*43ede468SCraig Topper  %1 = call fp128 @llvm.roundeven.f128(fp128 %a)
794*43ede468SCraig Topper  ret fp128 %1
795*43ede468SCraig Topper}
796*43ede468SCraig Topper
797*43ede468SCraig Topperdefine fp128 @tan(fp128 %a) nounwind {
798*43ede468SCraig Topper; CHECK-LABEL: tan:
799*43ede468SCraig Topper; CHECK:       # %bb.0:
800*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
801*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
802*43ede468SCraig Topper; CHECK-NEXT:    call tanl
803*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
804*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
805*43ede468SCraig Topper; CHECK-NEXT:    ret
806*43ede468SCraig Topper  %1 = call fp128 @llvm.tan.f128(fp128 %a)
807*43ede468SCraig Topper  ret fp128 %1
808*43ede468SCraig Topper}
809*43ede468SCraig Topper
810*43ede468SCraig Topperdefine fp128 @ldexp_fp128(fp128 %x, i32 %y) nounwind {
811*43ede468SCraig Topper; CHECK-LABEL: ldexp_fp128:
812*43ede468SCraig Topper; CHECK:       # %bb.0:
813*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
814*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
815*43ede468SCraig Topper; CHECK-NEXT:    sext.w a2, a2
816*43ede468SCraig Topper; CHECK-NEXT:    call ldexpl
817*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
818*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
819*43ede468SCraig Topper; CHECK-NEXT:    ret
820*43ede468SCraig Topper  %z = call fp128 @llvm.ldexp.f128.i32(fp128 %x, i32 %y)
821*43ede468SCraig Topper  ret fp128 %z
822*43ede468SCraig Topper}
823*43ede468SCraig Topper
824*43ede468SCraig Topperdefine fp128 @asin(fp128 %a) nounwind {
825*43ede468SCraig Topper; CHECK-LABEL: asin:
826*43ede468SCraig Topper; CHECK:       # %bb.0:
827*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
828*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
829*43ede468SCraig Topper; CHECK-NEXT:    call asinl
830*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
831*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
832*43ede468SCraig Topper; CHECK-NEXT:    ret
833*43ede468SCraig Topper  %1 = call fp128 @llvm.asin.f128(fp128 %a)
834*43ede468SCraig Topper  ret fp128 %1
835*43ede468SCraig Topper}
836*43ede468SCraig Topper
837*43ede468SCraig Topperdefine fp128 @acos(fp128 %a) nounwind {
838*43ede468SCraig Topper; CHECK-LABEL: acos:
839*43ede468SCraig Topper; CHECK:       # %bb.0:
840*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
841*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
842*43ede468SCraig Topper; CHECK-NEXT:    call acosl
843*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
844*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
845*43ede468SCraig Topper; CHECK-NEXT:    ret
846*43ede468SCraig Topper  %1 = call fp128 @llvm.acos.f128(fp128 %a)
847*43ede468SCraig Topper  ret fp128 %1
848*43ede468SCraig Topper}
849*43ede468SCraig Topper
850*43ede468SCraig Topperdefine fp128 @atan(fp128 %a) nounwind {
851*43ede468SCraig Topper; CHECK-LABEL: atan:
852*43ede468SCraig Topper; CHECK:       # %bb.0:
853*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
854*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
855*43ede468SCraig Topper; CHECK-NEXT:    call atanl
856*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
857*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
858*43ede468SCraig Topper; CHECK-NEXT:    ret
859*43ede468SCraig Topper  %1 = call fp128 @llvm.atan.f128(fp128 %a)
860*43ede468SCraig Topper  ret fp128 %1
861*43ede468SCraig Topper}
862*43ede468SCraig Topper
863*43ede468SCraig Topperdefine fp128 @atan2(fp128 %a, fp128 %b) nounwind {
864*43ede468SCraig Topper; CHECK-LABEL: atan2:
865*43ede468SCraig Topper; CHECK:       # %bb.0:
866*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
867*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
868*43ede468SCraig Topper; CHECK-NEXT:    call atan2l
869*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
870*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
871*43ede468SCraig Topper; CHECK-NEXT:    ret
872*43ede468SCraig Topper  %1 = call fp128 @llvm.atan2.f128(fp128 %a, fp128 %b)
873*43ede468SCraig Topper  ret fp128 %1
874*43ede468SCraig Topper}
875*43ede468SCraig Topper
876*43ede468SCraig Topperdefine fp128 @sinh(fp128 %a) nounwind {
877*43ede468SCraig Topper; CHECK-LABEL: sinh:
878*43ede468SCraig Topper; CHECK:       # %bb.0:
879*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
880*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
881*43ede468SCraig Topper; CHECK-NEXT:    call sinhl
882*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
883*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
884*43ede468SCraig Topper; CHECK-NEXT:    ret
885*43ede468SCraig Topper  %1 = call fp128 @llvm.sinh.f128(fp128 %a)
886*43ede468SCraig Topper  ret fp128 %1
887*43ede468SCraig Topper}
888*43ede468SCraig Topper
889*43ede468SCraig Topperdefine fp128 @cosh(fp128 %a) nounwind {
890*43ede468SCraig Topper; CHECK-LABEL: cosh:
891*43ede468SCraig Topper; CHECK:       # %bb.0:
892*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
893*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
894*43ede468SCraig Topper; CHECK-NEXT:    call coshl
895*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
896*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
897*43ede468SCraig Topper; CHECK-NEXT:    ret
898*43ede468SCraig Topper  %1 = call fp128 @llvm.cosh.f128(fp128 %a)
899*43ede468SCraig Topper  ret fp128 %1
900*43ede468SCraig Topper}
901*43ede468SCraig Topper
902*43ede468SCraig Topperdefine fp128 @tanh(fp128 %a) nounwind {
903*43ede468SCraig Topper; CHECK-LABEL: tanh:
904*43ede468SCraig Topper; CHECK:       # %bb.0:
905*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, -16
906*43ede468SCraig Topper; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
907*43ede468SCraig Topper; CHECK-NEXT:    call tanhl
908*43ede468SCraig Topper; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
909*43ede468SCraig Topper; CHECK-NEXT:    addi sp, sp, 16
910*43ede468SCraig Topper; CHECK-NEXT:    ret
911*43ede468SCraig Topper  %1 = call fp128 @llvm.tanh.f128(fp128 %a)
912*43ede468SCraig Topper  ret fp128 %1
913*43ede468SCraig Topper}
914