diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-07-19 07:02:10 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-07-19 07:02:10 +0000 | 
| commit | 93c91e39b29142dec1d03a30df9f6e757f56c193 (patch) | |
| tree | 33a9b014a327e64450b3c9ed46d8c5bdb78ad345 /lib/Target/Sparc/SparcISelLowering.cpp | |
| parent | ca089b24d48ef6fa8da2d0bb8c25bb802c4a95c0 (diff) | |
Notes
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);  | 
