diff options
Diffstat (limited to 'lib/Target/Sparc/SparcISelLowering.cpp')
| -rw-r--r-- | lib/Target/Sparc/SparcISelLowering.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp index 9e7e3c6b705a9..6767a59a97571 100644 --- a/lib/Target/Sparc/SparcISelLowering.cpp +++ b/lib/Target/Sparc/SparcISelLowering.cpp @@ -1689,6 +1689,19 @@ SparcTargetLowering::SparcTargetLowering(const TargetMachine &TM,    setOperationAction(ISD::MULHS,     MVT::i32, Expand);    setOperationAction(ISD::MUL,       MVT::i32, Expand); +  if (Subtarget->useSoftMulDiv()) { +    // .umul works for both signed and unsigned +    setOperationAction(ISD::SMUL_LOHI, MVT::i32, Expand); +    setOperationAction(ISD::UMUL_LOHI, MVT::i32, Expand); +    setLibcallName(RTLIB::MUL_I32, ".umul"); + +    setOperationAction(ISD::SDIV, MVT::i32, Expand); +    setLibcallName(RTLIB::SDIV_I32, ".div"); + +    setOperationAction(ISD::UDIV, MVT::i32, Expand); +    setLibcallName(RTLIB::UDIV_I32, ".udiv"); +  } +    if (Subtarget->is64Bit()) {      setOperationAction(ISD::UMUL_LOHI, MVT::i64, Expand);      setOperationAction(ISD::SMUL_LOHI, MVT::i64, Expand); | 
