mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 16:24:23 +00:00
Add 64-bit versions of LEA_ADDiu and DynAlloc. Modify LowerDYNAMIC_STACKALLOC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144370 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1295,6 +1295,7 @@ LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const
|
||||
{
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>();
|
||||
unsigned SP = IsN64 ? Mips::SP_64 : Mips::SP;
|
||||
|
||||
assert(getTargetMachine().getFrameLowering()->getStackAlignment() >=
|
||||
cast<ConstantSDNode>(Op.getOperand(2).getNode())->getZExtValue() &&
|
||||
@ -1306,20 +1307,19 @@ LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const
|
||||
DebugLoc dl = Op.getDebugLoc();
|
||||
|
||||
// Get a reference from Mips stack pointer
|
||||
SDValue StackPointer = DAG.getCopyFromReg(Chain, dl, Mips::SP, MVT::i32);
|
||||
SDValue StackPointer = DAG.getCopyFromReg(Chain, dl, SP, getPointerTy());
|
||||
|
||||
// Subtract the dynamic size from the actual stack size to
|
||||
// obtain the new stack size.
|
||||
SDValue Sub = DAG.getNode(ISD::SUB, dl, MVT::i32, StackPointer, Size);
|
||||
SDValue Sub = DAG.getNode(ISD::SUB, dl, getPointerTy(), StackPointer, Size);
|
||||
|
||||
// The Sub result contains the new stack start address, so it
|
||||
// must be placed in the stack pointer register.
|
||||
Chain = DAG.getCopyToReg(StackPointer.getValue(1), dl, Mips::SP, Sub,
|
||||
SDValue());
|
||||
Chain = DAG.getCopyToReg(StackPointer.getValue(1), dl, SP, Sub, SDValue());
|
||||
|
||||
// This node always has two return values: a new stack pointer
|
||||
// value and a chain
|
||||
SDVTList VTLs = DAG.getVTList(MVT::i32, MVT::Other);
|
||||
SDVTList VTLs = DAG.getVTList(getPointerTy(), MVT::Other);
|
||||
SDValue Ptr = DAG.getFrameIndex(MipsFI->getDynAllocFI(), getPointerTy());
|
||||
SDValue Ops[] = { Chain, Ptr, Chain.getValue(1) };
|
||||
|
||||
|
Reference in New Issue
Block a user