From 618eda7a60bafff7741a988e27b98bf81d27cb89 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Sun, 14 Apr 2013 05:10:36 +0000 Subject: Add support for the abs64 SPARC v9 code model. For when 16 TB just isn't enough. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179474 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Sparc/SparcISelLowering.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib/Target/Sparc') diff --git a/lib/Target/Sparc/SparcISelLowering.cpp b/lib/Target/Sparc/SparcISelLowering.cpp index 33003684f0..198d194a3c 100644 --- a/lib/Target/Sparc/SparcISelLowering.cpp +++ b/lib/Target/Sparc/SparcISelLowering.cpp @@ -1410,14 +1410,23 @@ SDValue SparcTargetLowering::makeAddress(SDValue Op, SelectionDAG &DAG) const { default: llvm_unreachable("Unsupported absolute code model"); case CodeModel::Small: + // abs32. return makeHiLoPair(Op, SPII::MO_HI, SPII::MO_LO, DAG); case CodeModel::Medium: { + // abs44. SDValue H44 = makeHiLoPair(Op, SPII::MO_H44, SPII::MO_M44, DAG); H44 = DAG.getNode(ISD::SHL, DL, VT, H44, DAG.getIntPtrConstant(12)); SDValue L44 = withTargetFlags(Op, SPII::MO_L44, DAG); L44 = DAG.getNode(SPISD::Lo, DL, VT, L44); return DAG.getNode(ISD::ADD, DL, VT, H44, L44); } + case CodeModel::Large: { + // abs64. + SDValue Hi = makeHiLoPair(Op, SPII::MO_HH, SPII::MO_HM, DAG); + Hi = DAG.getNode(ISD::SHL, DL, VT, Hi, DAG.getIntPtrConstant(32)); + SDValue Lo = makeHiLoPair(Op, SPII::MO_HI, SPII::MO_LO, DAG); + return DAG.getNode(ISD::ADD, DL, VT, Hi, Lo); + } } } -- cgit v1.2.3-18-g5258