mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
Silly Sparc is big endian. If we have to load args out of incoming stack slots
that are smaller than an int, make sure to adjust the frame pointer to take this into consideration. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25351 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bf2d595dca
commit
99cf50937d
@ -241,6 +241,10 @@ SparcV8TargetLowering::LowerArguments(Function &F, SelectionDAG &DAG) {
|
||||
unsigned LoadOp =
|
||||
I->getType()->isSigned() ? ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
|
||||
// Sparc is big endian, so add an offset based on the ObjectVT.
|
||||
unsigned Offset = 4-std::max(1U, MVT::getSizeInBits(ObjectVT)/8);
|
||||
FIPtr = DAG.getNode(ISD::ADD, MVT::i32, FIPtr,
|
||||
DAG.getConstant(Offset, MVT::i32));
|
||||
Load = DAG.getExtLoad(LoadOp, MVT::i32, Root, FIPtr,
|
||||
DAG.getSrcValue(0), ObjectVT);
|
||||
Load = DAG.getNode(ISD::TRUNCATE, ObjectVT, Load);
|
||||
|
@ -241,6 +241,10 @@ SparcV8TargetLowering::LowerArguments(Function &F, SelectionDAG &DAG) {
|
||||
unsigned LoadOp =
|
||||
I->getType()->isSigned() ? ISD::SEXTLOAD : ISD::ZEXTLOAD;
|
||||
|
||||
// Sparc is big endian, so add an offset based on the ObjectVT.
|
||||
unsigned Offset = 4-std::max(1U, MVT::getSizeInBits(ObjectVT)/8);
|
||||
FIPtr = DAG.getNode(ISD::ADD, MVT::i32, FIPtr,
|
||||
DAG.getConstant(Offset, MVT::i32));
|
||||
Load = DAG.getExtLoad(LoadOp, MVT::i32, Root, FIPtr,
|
||||
DAG.getSrcValue(0), ObjectVT);
|
||||
Load = DAG.getNode(ISD::TRUNCATE, ObjectVT, Load);
|
||||
|
Loading…
Reference in New Issue
Block a user