mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-14 04:57:33 +00:00
Fixed more problems caused by 78142.
Passing of indirect arguments starts after return value on the callee's frame. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3a5f0d444c
commit
a418628d30
@ -404,6 +404,7 @@ PIC16TargetLowering::MakePIC16Libcall(PIC16ISD::PIC16Libcall Call,
|
|||||||
Entry.isZExt = !isSigned;
|
Entry.isZExt = !isSigned;
|
||||||
Args.push_back(Entry);
|
Args.push_back(Entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue Callee = DAG.getExternalSymbol(getPIC16LibcallName(Call), EVT::i16);
|
SDValue Callee = DAG.getExternalSymbol(getPIC16LibcallName(Call), EVT::i16);
|
||||||
|
|
||||||
const Type *RetTy = RetVT.getTypeForEVT();
|
const Type *RetTy = RetVT.getTypeForEVT();
|
||||||
@ -1086,6 +1087,7 @@ SDValue PIC16TargetLowering::
|
|||||||
LowerIndirectCallArguments(SDValue Chain, SDValue InFlag,
|
LowerIndirectCallArguments(SDValue Chain, SDValue InFlag,
|
||||||
SDValue DataAddr_Lo, SDValue DataAddr_Hi,
|
SDValue DataAddr_Lo, SDValue DataAddr_Hi,
|
||||||
const SmallVectorImpl<ISD::OutputArg> &Outs,
|
const SmallVectorImpl<ISD::OutputArg> &Outs,
|
||||||
|
const SmallVectorImpl<ISD::InputArg> &Ins,
|
||||||
DebugLoc dl, SelectionDAG &DAG) {
|
DebugLoc dl, SelectionDAG &DAG) {
|
||||||
unsigned NumOps = Outs.size();
|
unsigned NumOps = Outs.size();
|
||||||
|
|
||||||
@ -1098,7 +1100,7 @@ LowerIndirectCallArguments(SDValue Chain, SDValue InFlag,
|
|||||||
SDValue Arg, StoreRet;
|
SDValue Arg, StoreRet;
|
||||||
|
|
||||||
// For PIC16 ABI the arguments come after the return value.
|
// For PIC16 ABI the arguments come after the return value.
|
||||||
unsigned RetVals = Outs.size();
|
unsigned RetVals = Ins.size();
|
||||||
for (unsigned i = 0, ArgOffset = RetVals; i < NumOps; i++) {
|
for (unsigned i = 0, ArgOffset = RetVals; i < NumOps; i++) {
|
||||||
// Get the arguments
|
// Get the arguments
|
||||||
Arg = Outs[i].Val;
|
Arg = Outs[i].Val;
|
||||||
@ -1430,7 +1432,7 @@ PIC16TargetLowering::LowerCall(SDValue Chain, SDValue Callee,
|
|||||||
OperFlag = getOutFlag(CallArgs);
|
OperFlag = getOutFlag(CallArgs);
|
||||||
} else {
|
} else {
|
||||||
CallArgs = LowerIndirectCallArguments(Chain, OperFlag, DataAddr_Lo,
|
CallArgs = LowerIndirectCallArguments(Chain, OperFlag, DataAddr_Lo,
|
||||||
DataAddr_Hi, Outs, dl, DAG);
|
DataAddr_Hi, Outs, Ins, dl, DAG);
|
||||||
Chain = getChain(CallArgs);
|
Chain = getChain(CallArgs);
|
||||||
OperFlag = getOutFlag(CallArgs);
|
OperFlag = getOutFlag(CallArgs);
|
||||||
}
|
}
|
||||||
|
@ -111,6 +111,7 @@ namespace llvm {
|
|||||||
LowerIndirectCallArguments(SDValue Chain, SDValue InFlag,
|
LowerIndirectCallArguments(SDValue Chain, SDValue InFlag,
|
||||||
SDValue DataAddr_Lo, SDValue DataAddr_Hi,
|
SDValue DataAddr_Lo, SDValue DataAddr_Hi,
|
||||||
const SmallVectorImpl<ISD::OutputArg> &Outs,
|
const SmallVectorImpl<ISD::OutputArg> &Outs,
|
||||||
|
const SmallVectorImpl<ISD::InputArg> &Ins,
|
||||||
DebugLoc dl, SelectionDAG &DAG);
|
DebugLoc dl, SelectionDAG &DAG);
|
||||||
|
|
||||||
SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG);
|
SDValue LowerBR_CC(SDValue Op, SelectionDAG &DAG);
|
||||||
|
Loading…
Reference in New Issue
Block a user