From bbe1225bf408febe1c669616e3712e16ab299a35 Mon Sep 17 00:00:00 2001 From: Andrew Lenharth Date: Tue, 6 Dec 2005 23:27:39 +0000 Subject: [PATCH] fix divide and remainder git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24628 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Alpha/AlphaISelDAGToDAG.cpp | 24 +++++++++++------------- lib/Target/Alpha/AlphaInstrInfo.td | 3 +++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/Target/Alpha/AlphaISelDAGToDAG.cpp b/lib/Target/Alpha/AlphaISelDAGToDAG.cpp index 112671f668c..910c85eb561 100644 --- a/lib/Target/Alpha/AlphaISelDAGToDAG.cpp +++ b/lib/Target/Alpha/AlphaISelDAGToDAG.cpp @@ -339,19 +339,17 @@ SDOperand AlphaDAGToDAGISel::Select(SDOperand Op) { } SDOperand Tmp1 = Select(N->getOperand(0)), Tmp2 = Select(N->getOperand(1)), - Addr = CurDAG->getExternalSymbol(opstr, AlphaLowering.getPointerTy()); - SDOperand Tmp3 = Select(Addr); - SDOperand Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R24, - Tmp1, SDOperand()); - Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R25, - Tmp2, Chain.getValue(1)); - Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R27, - Tmp3, Chain.getValue(1)); - Chain = CurDAG->getTargetNode(Alpha::JSRs, MVT::i64, MVT::Flag, - CurDAG->getRegister(Alpha::R27, MVT::i64), - getI64Imm(0)); - return CurDAG->getCopyFromReg(Chain.getValue(1), Alpha::R27, MVT::i64, - Chain.getValue(1)); + Addr = Select(CurDAG->getExternalSymbol(opstr, + AlphaLowering.getPointerTy())); + SDOperand Chain; + Chain = CurDAG->getCopyToReg(CurDAG->getEntryNode(), Alpha::R24, Tmp1, + SDOperand(0,0)); + Chain = CurDAG->getCopyToReg(Chain, Alpha::R25, Tmp2, Chain.getValue(1)); + Chain = CurDAG->getCopyToReg(Chain, Alpha::R27, Addr, Chain.getValue(1)); + Chain = CurDAG->getTargetNode(Alpha::JSRsDAG, MVT::Other, MVT::Flag, + Chain, Chain.getValue(1)); + return CurDAG->getCopyFromReg(Chain, Alpha::R27, MVT::i64, + Chain.getValue(1)); } break; diff --git a/lib/Target/Alpha/AlphaInstrInfo.td b/lib/Target/Alpha/AlphaInstrInfo.td index 03ce44fed57..10dc6ea5d3c 100644 --- a/lib/Target/Alpha/AlphaInstrInfo.td +++ b/lib/Target/Alpha/AlphaInstrInfo.td @@ -429,6 +429,9 @@ let isCall = 1, let isCall = 1, Defs = [R24, R25, R27, R28], Uses = [R24, R25] in def JSRs : MbrForm< 0x1A, 0x01, (ops GPRC:$RD, GPRC:$RS, s14imm:$DISP), "jsr $RD,($RS),$DISP">; //Jump to div or rem +let isCall = 1, Defs = [R23, R24, R25, R27, R28], Uses = [R24, R25, R27] in + def JSRsDAG : MbrForm< 0x1A, 0x01, (ops ), "jsr $$23,($$27),0">; //Jump to div or rem + def JSR_COROUTINE : MbrForm< 0x1A, 0x03, (ops GPRC:$RD, GPRC:$RS, s14imm:$DISP), "jsr_coroutine $RD,($RS),$DISP">; //Jump to subroutine return def BR : BForm<0x30, "br $RA,$DISP">; //Branch