diff options
author | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-04-22 12:02:36 +0000 |
---|---|---|
committer | Sanjiv Gupta <sanjiv.gupta@microchip.com> | 2009-04-22 12:02:36 +0000 |
commit | dd92dba64425707dec7a541120112c1f911f1ed2 (patch) | |
tree | 5c31891ea666bb5a0cca6b571696d54222bad9a2 /lib | |
parent | 4a0adb768696705ad103fc80ceff3594fdb11b3b (diff) | |
download | external_llvm-dd92dba64425707dec7a541120112c1f911f1ed2.zip external_llvm-dd92dba64425707dec7a541120112c1f911f1ed2.tar.gz external_llvm-dd92dba64425707dec7a541120112c1f911f1ed2.tar.bz2 |
Make the function begin label start after ther data pointer.
The address of data frame for function can be obtained by subtracting 2 from the function begin label.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69801 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/PIC16/PIC16AsmPrinter.cpp | 2 | ||||
-rw-r--r-- | lib/Target/PIC16/PIC16ISelLowering.cpp | 16 | ||||
-rw-r--r-- | lib/Target/PIC16/PIC16InstrInfo.td | 3 |
3 files changed, 12 insertions, 9 deletions
diff --git a/lib/Target/PIC16/PIC16AsmPrinter.cpp b/lib/Target/PIC16/PIC16AsmPrinter.cpp index a126816..e16e9ad 100644 --- a/lib/Target/PIC16/PIC16AsmPrinter.cpp +++ b/lib/Target/PIC16/PIC16AsmPrinter.cpp @@ -116,9 +116,9 @@ bool PIC16AsmPrinter::runOnMachineFunction(MachineFunction &MF) { SwitchToSection (fCodeSection); // Emit the frame address of the function at the beginning of code. - O << CurrentFnName << ":\n"; O << " retlw low(" << FunctionLabelBegin<< CurrentFnName << ".frame)\n"; O << " retlw high(" << FunctionLabelBegin<< CurrentFnName << ".frame)\n"; + O << CurrentFnName << ":\n"; // Print out code for the function. diff --git a/lib/Target/PIC16/PIC16ISelLowering.cpp b/lib/Target/PIC16/PIC16ISelLowering.cpp index dec92ad..605fbe9 100644 --- a/lib/Target/PIC16/PIC16ISelLowering.cpp +++ b/lib/Target/PIC16/PIC16ISelLowering.cpp @@ -1155,10 +1155,12 @@ GetDataAddress(DebugLoc dl, SDValue Callee, SDValue &Chain, SDValue Lo = Callee.getOperand(0); SDValue Hi = Callee.getOperand(1); + SDValue Data_Lo, Data_Hi; SDVTList Tys = DAG.getVTList(MVT::i8, MVT::Other, MVT::Flag); Hi = DAG.getNode(PIC16ISD::MTPCLATH, dl, MVT::i8, Hi); - // Use the Lo part as is and make CALLW - Callee = DAG.getNode(PIC16ISD::PIC16Connect, dl, MVT::i8, Lo, Hi); + // Subtract 2 from Lo to get the Lower part of DataAddress. + Data_Lo = DAG.getNode(ISD::SUB, dl, MVT::i8, Lo, DAG.getConstant(2, MVT::i8)); + Callee = DAG.getNode(PIC16ISD::PIC16Connect, dl, MVT::i8, Data_Lo, Hi); SDValue Call = DAG.getNode(PIC16ISD::CALLW, dl, Tys, Chain, Callee, OperFlag); Chain = getChain(Call); @@ -1176,10 +1178,10 @@ GetDataAddress(DebugLoc dl, SDValue Callee, SDValue &Chain, Chain = getChain(SeqStart); OperFlag = getOutFlag(SeqStart); // To manage the data dependency - // Add 1 to Lo part for the second code word. - Lo = DAG.getNode(ISD::ADD, dl, MVT::i8, Lo, DAG.getConstant(1, MVT::i8)); + // Subtract 1 to Lo part for the second code word. + Data_Lo = DAG.getNode(ISD::SUB, dl, MVT::i8, Lo, DAG.getConstant(1, MVT::i8)); // Use new Lo to make another CALLW - Callee = DAG.getNode(PIC16ISD::PIC16Connect, dl, MVT::i8, Lo, Hi); + Callee = DAG.getNode(PIC16ISD::PIC16Connect, dl, MVT::i8, Data_Lo, Hi); Call = DAG.getNode(PIC16ISD::CALLW, dl, Tys, Chain, Callee, OperFlag); Chain = getChain(Call); OperFlag = getOutFlag(Call); @@ -1266,8 +1268,8 @@ SDValue PIC16TargetLowering::LowerCALL(SDValue Op, SelectionDAG &DAG) { SDValue CodeAddr_Lo = Callee.getOperand(0); SDValue CodeAddr_Hi = Callee.getOperand(1); - CodeAddr_Lo = DAG.getNode(ISD::ADD, dl, MVT::i8, CodeAddr_Lo, - DAG.getConstant(2, MVT::i8)); + /*CodeAddr_Lo = DAG.getNode(ISD::ADD, dl, MVT::i8, CodeAddr_Lo, + DAG.getConstant(2, MVT::i8));*/ // move Hi part in PCLATH CodeAddr_Hi = DAG.getNode(PIC16ISD::MTPCLATH, dl, MVT::i8, CodeAddr_Hi); diff --git a/lib/Target/PIC16/PIC16InstrInfo.td b/lib/Target/PIC16/PIC16InstrInfo.td index 8f90259..09872b3 100644 --- a/lib/Target/PIC16/PIC16InstrInfo.td +++ b/lib/Target/PIC16/PIC16InstrInfo.td @@ -428,7 +428,8 @@ def sublw_cc : SUBLW<0, PIC16Subcc>; let isCall = 1, Defs = [W, FSR0, FSR1] in { def CALL: LiteralFormat<0x1, (outs), (ins i8imm:$func), - "call ${func} + 2", + //"call ${func} + 2", + "call ${func}", [(PIC16call diraddr:$func)]>; } |