| Index: src/mips/macro-assembler-mips.cc | 
| diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc | 
| index 56930699e5d8628db22b23cf1f9ff41bb7998865..0fff77b7009e57bcefc6f811984d822fd444a2f3 100644 | 
| --- a/src/mips/macro-assembler-mips.cc | 
| +++ b/src/mips/macro-assembler-mips.cc | 
| @@ -4731,6 +4731,34 @@ void MacroAssembler::PatchRelocatedValue(Register li_location, | 
| 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, | 
|  |