Index: src/mips/macro-assembler-mips.cc |
=================================================================== |
--- src/mips/macro-assembler-mips.cc (revision 10481) |
+++ src/mips/macro-assembler-mips.cc (working copy) |
@@ -4700,7 +4700,35 @@ |
FlushICache(li_location, 2); |
} |
+void MacroAssembler::GetRelocatedValue(Register li_location, |
+ Register value, |
+ Register scratch) { |
+ lw(value, MemOperand(li_location)); |
+ if (emit_debug_code()) { |
+ And(value, value, kOpcodeMask); |
+ Check(eq, "The instruction should be a lui.", |
+ value, Operand(LUI)); |
+ lw(value, MemOperand(li_location)); |
+ } |
+ // value now holds a lui instruction. Extract the immediate. |
+ sll(value, value, kImm16Bits); |
+ |
+ lw(scratch, MemOperand(li_location, kInstrSize)); |
+ if (emit_debug_code()) { |
+ And(scratch, scratch, kOpcodeMask); |
+ Check(eq, "The instruction should be an ori.", |
+ scratch, Operand(ORI)); |
+ lw(scratch, MemOperand(li_location, kInstrSize)); |
+ } |
+ // "scratch" now holds an ori instruction. Extract the immediate. |
+ andi(scratch, scratch, kImm16Mask); |
+ |
+ // Merge the results. |
+ or_(value, value, scratch); |
+} |
+ |
+ |
void MacroAssembler::CheckPageFlag( |
Register object, |
Register scratch, |