mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
Workaround of getCopyToRegs and getCopyFromRegs bugs for big-endian machines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37935 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
991262834d
commit
86da6600ae
@ -2984,8 +2984,10 @@ void SelectionDAGLowering::visitCall(CallInst &I) {
|
|||||||
/// If the Flag pointer is NULL, no flag is used.
|
/// If the Flag pointer is NULL, no flag is used.
|
||||||
SDOperand RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
|
SDOperand RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
|
||||||
SDOperand &Chain, SDOperand *Flag)const{
|
SDOperand &Chain, SDOperand *Flag)const{
|
||||||
// Get the list of registers.
|
// Get the list of registers, in the appropriate order.
|
||||||
std::vector<unsigned> R(Regs);
|
std::vector<unsigned> R(Regs);
|
||||||
|
if (!DAG.getTargetLoweringInfo().isLittleEndian())
|
||||||
|
std::reverse(R.begin(), R.end());
|
||||||
|
|
||||||
// Copy the legal parts from the registers.
|
// Copy the legal parts from the registers.
|
||||||
unsigned NumParts = Regs.size();
|
unsigned NumParts = Regs.size();
|
||||||
@ -3001,7 +3003,7 @@ SDOperand RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Assemble the legal parts into the final value.
|
// Assemble the legal parts into the final value.
|
||||||
return getCopyFromParts(DAG, &Parts[0], NumParts, RegVT, ValueVT, true);
|
return getCopyFromParts(DAG, &Parts[0], NumParts, RegVT, ValueVT, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getCopyToRegs - Emit a series of CopyToReg nodes that copies the
|
/// getCopyToRegs - Emit a series of CopyToReg nodes that copies the
|
||||||
@ -3010,13 +3012,15 @@ SDOperand RegsForValue::getCopyFromRegs(SelectionDAG &DAG,
|
|||||||
/// If the Flag pointer is NULL, no flag is used.
|
/// If the Flag pointer is NULL, no flag is used.
|
||||||
void RegsForValue::getCopyToRegs(SDOperand Val, SelectionDAG &DAG,
|
void RegsForValue::getCopyToRegs(SDOperand Val, SelectionDAG &DAG,
|
||||||
SDOperand &Chain, SDOperand *Flag) const {
|
SDOperand &Chain, SDOperand *Flag) const {
|
||||||
// Get the list of registers.
|
// Get the list of registers, in the appropriate order.
|
||||||
std::vector<unsigned> R(Regs);
|
std::vector<unsigned> R(Regs);
|
||||||
|
if (!DAG.getTargetLoweringInfo().isLittleEndian())
|
||||||
|
std::reverse(R.begin(), R.end());
|
||||||
|
|
||||||
// Get the list of the values's legal parts.
|
// Get the list of the values's legal parts.
|
||||||
unsigned NumParts = Regs.size();
|
unsigned NumParts = Regs.size();
|
||||||
SmallVector<SDOperand, 8> Parts(NumParts);
|
SmallVector<SDOperand, 8> Parts(NumParts);
|
||||||
getCopyToParts(DAG, Val, &Parts[0], NumParts, RegVT, true);
|
getCopyToParts(DAG, Val, &Parts[0], NumParts, RegVT, false);
|
||||||
|
|
||||||
// Copy the parts into the registers.
|
// Copy the parts into the registers.
|
||||||
for (unsigned i = 0; i != NumParts; ++i) {
|
for (unsigned i = 0; i != NumParts; ++i) {
|
||||||
|
Loading…
Reference in New Issue
Block a user