summaryrefslogtreecommitdiff
path: root/llvm/lib/Target/Sparc/SparcSubtarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcSubtarget.cpp')
-rw-r--r--llvm/lib/Target/Sparc/SparcSubtarget.cpp40
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()) {