diff options
Diffstat (limited to 'llvm/lib/Target/Sparc')
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcISelLowering.cpp | 37 | ||||
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcSubtarget.cpp | 40 | ||||
| -rw-r--r-- | llvm/lib/Target/Sparc/SparcSubtarget.h | 2 |
3 files changed, 43 insertions, 36 deletions
diff --git a/llvm/lib/Target/Sparc/SparcISelLowering.cpp b/llvm/lib/Target/Sparc/SparcISelLowering.cpp index dc1196127e3d..a4a9eafd52ff 100644 --- a/llvm/lib/Target/Sparc/SparcISelLowering.cpp +++ b/llvm/lib/Target/Sparc/SparcISelLowering.cpp @@ -1905,42 +1905,7 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM, setOperationAction(ISD::FP_EXTEND, MVT::f128, Custom); setOperationAction(ISD::FP_ROUND, MVT::f64, Custom); - setOperationAction(ISD::FP_ROUND, MVT::f32, Custom); - - // Setup Runtime library names. - if (Subtarget->is64Bit() && !Subtarget->useSoftFloat()) { - setLibcallImpl(RTLIB::ADD_F128, RTLIB::impl__Qp_add); - setLibcallImpl(RTLIB::SUB_F128, RTLIB::impl__Qp_sub); - setLibcallImpl(RTLIB::MUL_F128, RTLIB::impl__Qp_mul); - setLibcallImpl(RTLIB::DIV_F128, RTLIB::impl__Qp_div); - setLibcallImpl(RTLIB::SQRT_F128, RTLIB::impl__Qp_sqrt); - setLibcallImpl(RTLIB::FPTOSINT_F128_I32, RTLIB::impl__Qp_qtoi); - setLibcallImpl(RTLIB::FPTOUINT_F128_I32, RTLIB::impl__Qp_qtoui); - setLibcallImpl(RTLIB::SINTTOFP_I32_F128, RTLIB::impl__Qp_itoq); - setLibcallImpl(RTLIB::UINTTOFP_I32_F128, RTLIB::impl__Qp_uitoq); - setLibcallImpl(RTLIB::FPTOSINT_F128_I64, RTLIB::impl__Qp_qtox); - setLibcallImpl(RTLIB::FPTOUINT_F128_I64, RTLIB::impl__Qp_qtoux); - setLibcallImpl(RTLIB::SINTTOFP_I64_F128, RTLIB::impl__Qp_xtoq); - setLibcallImpl(RTLIB::UINTTOFP_I64_F128, RTLIB::impl__Qp_uxtoq); - setLibcallImpl(RTLIB::FPEXT_F32_F128, RTLIB::impl__Qp_stoq); - setLibcallImpl(RTLIB::FPEXT_F64_F128, RTLIB::impl__Qp_dtoq); - setLibcallImpl(RTLIB::FPROUND_F128_F32, RTLIB::impl__Qp_qtos); - setLibcallImpl(RTLIB::FPROUND_F128_F64, RTLIB::impl__Qp_qtod); - } else if (!Subtarget->useSoftFloat()) { - setLibcallImpl(RTLIB::ADD_F128, RTLIB::impl__Q_add); - setLibcallImpl(RTLIB::SUB_F128, RTLIB::impl__Q_sub); - setLibcallImpl(RTLIB::MUL_F128, RTLIB::impl__Q_mul); - setLibcallImpl(RTLIB::DIV_F128, RTLIB::impl__Q_div); - setLibcallImpl(RTLIB::SQRT_F128, RTLIB::impl__Q_sqrt); - setLibcallImpl(RTLIB::FPTOSINT_F128_I32, RTLIB::impl__Q_qtoi); - setLibcallImpl(RTLIB::FPTOUINT_F128_I32, RTLIB::impl__Q_qtou); - setLibcallImpl(RTLIB::SINTTOFP_I32_F128, RTLIB::impl__Q_itoq); - setLibcallImpl(RTLIB::UINTTOFP_I32_F128, RTLIB::impl__Q_utoq); - setLibcallImpl(RTLIB::FPEXT_F32_F128, RTLIB::impl__Q_stoq); - setLibcallImpl(RTLIB::FPEXT_F64_F128, RTLIB::impl__Q_dtoq); - setLibcallImpl(RTLIB::FPROUND_F128_F32, RTLIB::impl__Q_qtos); - setLibcallImpl(RTLIB::FPROUND_F128_F64, RTLIB::impl__Q_qtod); - } + setOperationAction(ISD::FP_ROUND, MVT::f32, Custom); } if (Subtarget->fixAllFDIVSQRT()) { 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()) { diff --git a/llvm/lib/Target/Sparc/SparcSubtarget.h b/llvm/lib/Target/Sparc/SparcSubtarget.h index f575f6d7da37..02d56eb8f300 100644 --- a/llvm/lib/Target/Sparc/SparcSubtarget.h +++ b/llvm/lib/Target/Sparc/SparcSubtarget.h @@ -63,6 +63,8 @@ public: const SelectionDAGTargetInfo *getSelectionDAGInfo() const override; + void initLibcallLoweringInfo(LibcallLoweringInfo &Info) const override; + bool enableMachineScheduler() const override; #define GET_SUBTARGETINFO_MACRO(ATTRIBUTE, DEFAULT, GETTER) \ |
