mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +00:00
on ppc64, float arguments take 8-byte stack slots not 4-byte stack slots.
Also, valist should create a pointer RC reg class value, not a GPRC value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31840 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ff790894bd
commit
b1eb987ccd
@ -1155,13 +1155,13 @@ static SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG,
|
||||
case MVT::f32:
|
||||
case MVT::f64:
|
||||
// All FP arguments reserve stack space.
|
||||
ArgOffset += ObjSize;
|
||||
ArgOffset += isPPC64 ? 8 : ObjSize;
|
||||
|
||||
// Every 4 bytes of argument space consumes one of the GPRs available for
|
||||
// argument passing.
|
||||
if (GPR_idx != Num_GPR_Regs) {
|
||||
++GPR_idx;
|
||||
if (ObjSize == 8 && GPR_idx != Num_GPR_Regs)
|
||||
if (ObjSize == 8 && GPR_idx != Num_GPR_Regs && !isPPC64)
|
||||
++GPR_idx;
|
||||
}
|
||||
if (FPR_idx != Num_FPR_Regs) {
|
||||
@ -1226,7 +1226,12 @@ static SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG,
|
||||
// result of va_next.
|
||||
SmallVector<SDOperand, 8> MemOps;
|
||||
for (; GPR_idx != Num_GPR_Regs; ++GPR_idx) {
|
||||
unsigned VReg = RegMap->createVirtualRegister(&PPC::GPRCRegClass);
|
||||
unsigned VReg;
|
||||
if (isPPC64)
|
||||
VReg = RegMap->createVirtualRegister(&PPC::G8RCRegClass);
|
||||
else
|
||||
VReg = RegMap->createVirtualRegister(&PPC::GPRCRegClass);
|
||||
|
||||
MF.addLiveIn(GPR[GPR_idx], VReg);
|
||||
SDOperand Val = DAG.getCopyFromReg(Root, VReg, PtrVT);
|
||||
SDOperand Store = DAG.getStore(Val.getValue(1), Val, FIN, NULL, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user