Chromium Code Reviews| Index: src/mips64/assembler-mips64.cc |
| diff --git a/src/mips64/assembler-mips64.cc b/src/mips64/assembler-mips64.cc |
| index 09a19169d677454b241592a05424405c46729680..dec3e231e519d28ce7c2e6ef9b851cea22c3d5dd 100644 |
| --- a/src/mips64/assembler-mips64.cc |
| +++ b/src/mips64/assembler-mips64.cc |
| @@ -1940,9 +1940,15 @@ void Assembler::dlsa(Register rd, Register rt, Register rs, uint8_t sa) { |
| void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { |
| DCHECK(!src.rm().is(at)); |
| DCHECK(is_int32(src.offset_)); |
| - lui(at, (src.offset_ >> kLuiShift) & kImm16Mask); |
| - ori(at, at, src.offset_ & kImm16Mask); // Load 32-bit offset. |
| - daddu(at, at, src.rm()); // Add base register. |
| + |
| + if (kArchVariant == kMips64r6) { |
| + daui(at, src.rm(), hi); |
|
ivica.bogosavljevic
2016/11/28 13:44:13
Does this compile? (hi is not defined anywhere)
Marija Antic
2016/11/29 12:17:03
Acknowledged.
|
| + daddiu(at, at, src.offset_ & kImm16Mask); |
| + } else { |
| + lui(at, (src.offset_ >> kLuiShift) & kImm16Mask); |
| + ori(at, at, src.offset_ & kImm16Mask); // Load 32-bit offset. |
| + daddu(at, at, src.rm()); // Add base register. |
| + } |
| } |
| // Helper for base-reg + upper part of offset, when offset is larger than int16. |
| @@ -1965,8 +1971,12 @@ int32_t Assembler::LoadRegPlusUpperOffsetPartToAt(const MemOperand& src) { |
| hi += 1; |
| } |
| - lui(at, hi); |
| - daddu(at, at, src.rm()); |
| + if (kArchVariant == kMips64r6) { |
| + daui(at, src.rm(), hi); |
| + } else { |
| + lui(at, hi); |
| + daddu(at, at, src.rm()); |
| + } |
| return (src.offset_ & kImm16Mask); |
| } |