diff options
author | Christian Pirker <cpirker@a-bix.com> | 2014-03-26 14:51:22 +0000 |
---|---|---|
committer | Christian Pirker <cpirker@a-bix.com> | 2014-03-26 14:51:22 +0000 |
commit | 3aa0e6a1f92a366a3213b6e8fb9665ec5739c1b3 (patch) | |
tree | 375b4f1a9264949c5902a19cbb44533e42fa2723 /llvm/lib | |
parent | 1ff5f29fb55672a660045ed23289a12ca8167a8f (diff) | |
download | bcm5719-llvm-3aa0e6a1f92a366a3213b6e8fb9665ec5739c1b3.tar.gz bcm5719-llvm-3aa0e6a1f92a366a3213b6e8fb9665ec5739c1b3.zip |
AArch64_BE function argument passing for ARM ABI
llvm-svn: 204814
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index cf2e46dbe39..86fa341bc27 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -1324,8 +1324,11 @@ AArch64TargetLowering::LowerFormalArguments(SDValue Chain, int Size = Flags.getByValSize(); unsigned NumRegs = (Size + 7) / 8; + uint32_t BEAlign = 0; + if (Size < 8 && !getSubtarget()->isLittle()) + BEAlign = 8-Size; unsigned FrameIdx = MFI->CreateFixedObject(8 * NumRegs, - VA.getLocMemOffset(), + VA.getLocMemOffset() + BEAlign, false); SDValue FrameIdxN = DAG.getFrameIndex(FrameIdx, PtrTy); InVals.push_back(FrameIdxN); @@ -1634,7 +1637,13 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI, // loaded before this eventual operation. Otherwise they'll be clobbered. Chain = addTokenForArgument(Chain, DAG, MF.getFrameInfo(), FI); } else { - SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset()); + uint32_t OpSize = Flags.isByVal() ? Flags.getByValSize()*8 : + VA.getLocVT().getSizeInBits(); + OpSize = (OpSize + 7) / 8; + uint32_t BEAlign = 0; + if (OpSize < 8 && !getSubtarget()->isLittle()) + BEAlign = 8-OpSize; + SDValue PtrOff = DAG.getIntPtrConstant(VA.getLocMemOffset() + BEAlign); DstAddr = DAG.getNode(ISD::ADD, dl, getPointerTy(), StackPtr, PtrOff); DstInfo = MachinePointerInfo::getStack(VA.getLocMemOffset()); |