diff options
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcSubtarget.cpp')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcSubtarget.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.cpp b/llvm/lib/Target/Sparc/SparcSubtarget.cpp index 005930834a0c..1d72d0bdada0 100644 --- a/llvm/lib/Target/Sparc/SparcSubtarget.cpp +++ b/llvm/lib/Target/Sparc/SparcSubtarget.cpp @@ -68,6 +68,46 @@ const SelectionDAGTargetInfo *SparcSubtarget::getSelectionDAGInfo() const { return TSInfo.get(); } +void SparcSubtarget::initLibcallLoweringInfo(LibcallLoweringInfo &Info) const { + if (hasHardQuad()) + return; + + // Setup Runtime library names. + if (is64Bit() && !useSoftFloat()) { + Info.setLibcallImpl(RTLIB::ADD_F128, RTLIB::impl__Qp_add); + Info.setLibcallImpl(RTLIB::SUB_F128, RTLIB::impl__Qp_sub); + Info.setLibcallImpl(RTLIB::MUL_F128, RTLIB::impl__Qp_mul); + Info.setLibcallImpl(RTLIB::DIV_F128, RTLIB::impl__Qp_div); + Info.setLibcallImpl(RTLIB::SQRT_F128, RTLIB::impl__Qp_sqrt); + Info.setLibcallImpl(RTLIB::FPTOSINT_F128_I32, RTLIB::impl__Qp_qtoi); + Info.setLibcallImpl(RTLIB::FPTOUINT_F128_I32, RTLIB::impl__Qp_qtoui); + Info.setLibcallImpl(RTLIB::SINTTOFP_I32_F128, RTLIB::impl__Qp_itoq); + Info.setLibcallImpl(RTLIB::UINTTOFP_I32_F128, RTLIB::impl__Qp_uitoq); + Info.setLibcallImpl(RTLIB::FPTOSINT_F128_I64, RTLIB::impl__Qp_qtox); + Info.setLibcallImpl(RTLIB::FPTOUINT_F128_I64, RTLIB::impl__Qp_qtoux); + Info.setLibcallImpl(RTLIB::SINTTOFP_I64_F128, RTLIB::impl__Qp_xtoq); + Info.setLibcallImpl(RTLIB::UINTTOFP_I64_F128, RTLIB::impl__Qp_uxtoq); + Info.setLibcallImpl(RTLIB::FPEXT_F32_F128, RTLIB::impl__Qp_stoq); + Info.setLibcallImpl(RTLIB::FPEXT_F64_F128, RTLIB::impl__Qp_dtoq); + Info.setLibcallImpl(RTLIB::FPROUND_F128_F32, RTLIB::impl__Qp_qtos); + Info.setLibcallImpl(RTLIB::FPROUND_F128_F64, RTLIB::impl__Qp_qtod); + } else if (!useSoftFloat()) { + Info.setLibcallImpl(RTLIB::ADD_F128, RTLIB::impl__Q_add); + Info.setLibcallImpl(RTLIB::SUB_F128, RTLIB::impl__Q_sub); + Info.setLibcallImpl(RTLIB::MUL_F128, RTLIB::impl__Q_mul); + Info.setLibcallImpl(RTLIB::DIV_F128, RTLIB::impl__Q_div); + Info.setLibcallImpl(RTLIB::SQRT_F128, RTLIB::impl__Q_sqrt); + Info.setLibcallImpl(RTLIB::FPTOSINT_F128_I32, RTLIB::impl__Q_qtoi); + Info.setLibcallImpl(RTLIB::FPTOUINT_F128_I32, RTLIB::impl__Q_qtou); + Info.setLibcallImpl(RTLIB::SINTTOFP_I32_F128, RTLIB::impl__Q_itoq); + Info.setLibcallImpl(RTLIB::UINTTOFP_I32_F128, RTLIB::impl__Q_utoq); + Info.setLibcallImpl(RTLIB::FPEXT_F32_F128, RTLIB::impl__Q_stoq); + Info.setLibcallImpl(RTLIB::FPEXT_F64_F128, RTLIB::impl__Q_dtoq); + Info.setLibcallImpl(RTLIB::FPROUND_F128_F32, RTLIB::impl__Q_qtos); + Info.setLibcallImpl(RTLIB::FPROUND_F128_F64, RTLIB::impl__Q_qtod); + } +} + int SparcSubtarget::getAdjustedFrameSize(int frameSize) const { if (is64Bit()) { |
