mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-07 20:40:28 +00:00
[mips] Access $at only if necessary.
Summary: This patch doesn't really change the logic behind expandMemInst but it allows us to assemble .S files that use .set noat with some macros. For example: .set noat lw $k0, offset($k1) Can expand to: lui $k0, %hi(offset) addu $k0, $k0, $k1 lw $k0, %lo(offset)($k0) with no need to access $at. Reviewers: dsanders, vmedic Reviewed By: dsanders, vmedic Differential Revision: http://reviews.llvm.org/D4159 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211165 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c52345c0fc
commit
7047ad9a08
@ -1125,8 +1125,6 @@ void MipsAsmParser::expandMemInst(MCInst &Inst, SMLoc IDLoc,
|
||||
unsigned ImmOffset, HiOffset, LoOffset;
|
||||
const MCExpr *ExprOffset;
|
||||
unsigned TmpRegNum;
|
||||
unsigned AtRegNum = getReg(
|
||||
(isGP64()) ? Mips::GPR64RegClassID : Mips::GPR32RegClassID, getATReg());
|
||||
// 1st operand is either the source or destination register.
|
||||
assert(Inst.getOperand(0).isReg() && "expected register operand kind");
|
||||
unsigned RegOpNum = Inst.getOperand(0).getReg();
|
||||
@ -1149,7 +1147,12 @@ void MipsAsmParser::expandMemInst(MCInst &Inst, SMLoc IDLoc,
|
||||
// 1st instruction in expansion is LUi. For load instruction we can use
|
||||
// the dst register as a temporary if base and dst are different,
|
||||
// but for stores we must use $at.
|
||||
TmpRegNum = (isLoad && (BaseRegNum != RegOpNum)) ? RegOpNum : AtRegNum;
|
||||
if (isLoad && (BaseRegNum != RegOpNum))
|
||||
TmpRegNum = RegOpNum;
|
||||
else
|
||||
TmpRegNum = getReg(
|
||||
(isGP64()) ? Mips::GPR64RegClassID : Mips::GPR32RegClassID, getATReg());
|
||||
|
||||
TempInst.setOpcode(Mips::LUi);
|
||||
TempInst.addOperand(MCOperand::CreateReg(TmpRegNum));
|
||||
if (isImmOpnd)
|
||||
|
@ -44,7 +44,9 @@
|
||||
la $a0, 20($a1)
|
||||
la $7,65538($8)
|
||||
|
||||
.set noat
|
||||
lw $t2, symbol($a0)
|
||||
.set at
|
||||
sw $t2, symbol($t1)
|
||||
|
||||
lw $t2, 655483($a0)
|
||||
|
Loading…
Reference in New Issue
Block a user