Index: src/mips/assembler-mips.cc |
diff --git a/src/mips/assembler-mips.cc b/src/mips/assembler-mips.cc |
index 865e64c87d26fabb81a7511d774d1fb9b8440c60..516d64df3d0f156e27e9db8b5bf7b8a91a14fa20 100644 |
--- a/src/mips/assembler-mips.cc |
+++ b/src/mips/assembler-mips.cc |
@@ -1779,9 +1779,14 @@ void Assembler::lsa(Register rd, Register rt, Register rs, uint8_t sa) { |
// Helper for base-reg + offset, when offset is larger than int16. |
void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { |
DCHECK(!src.rm().is(at)); |
- lui(at, (src.offset_ >> kLuiShift) & kImm16Mask); |
- ori(at, at, src.offset_ & kImm16Mask); // Load 32-bit offset. |
- addu(at, at, src.rm()); // Add base register. |
+ if (IsMipsArchVariant(kMips32r6)) { |
+ aui(at, src.rm(), (src.offset_ >> kLuiShift) & kImm16Mask); |
+ addiu(at, at, src.offset_ & kImm16Mask); |
+ } else { |
+ lui(at, (src.offset_ >> kLuiShift) & kImm16Mask); |
+ ori(at, at, src.offset_ & kImm16Mask); // Load 32-bit offset. |
+ addu(at, at, src.rm()); // Add base register. |
+ } |
} |
// Helper for base-reg + upper part of offset, when offset is larger than int16. |
@@ -1797,8 +1802,13 @@ int32_t Assembler::LoadRegPlusUpperOffsetPartToAt(const MemOperand& src) { |
if (src.offset_ & kNegOffset) { |
hi += 1; |
} |
- lui(at, hi); |
- addu(at, at, src.rm()); |
+ |
+ if (IsMipsArchVariant(kMips32r6)) { |
+ aui(at, src.rm(), hi); |
+ } else { |
+ lui(at, hi); |
+ addu(at, at, src.rm()); |
+ } |
return (src.offset_ & kImm16Mask); |
} |