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