Index: src/arm/code-stubs-arm.cc |
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc |
index fa8f80759f941ea06ac5a432f6c3ffcc5f88efea..fbde24dafaa44e04492e7c92b62b3da58b07481b 100644 |
--- a/src/arm/code-stubs-arm.cc |
+++ b/src/arm/code-stubs-arm.cc |
@@ -1683,7 +1683,7 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) { |
// * function: r1 or at sp. |
// |
// An inlined call site may have been generated before calling this stub. |
-// In this case the offset to the inline site to patch is passed in r5. |
+// In this case the offset to the inline sites to patch are passed in r5 and r6. |
// (See LCodeGen::DoInstanceOfKnownGlobal) |
void InstanceofStub::Generate(MacroAssembler* masm) { |
// Call site inlining and patching implies arguments in registers. |
@@ -1696,11 +1696,8 @@ void InstanceofStub::Generate(MacroAssembler* masm) { |
Register map = r3; // Map of the object. |
const Register function = r1; // Function (rhs). |
const Register prototype = r4; // Prototype of the function. |
- const Register inline_site = r9; |
const Register scratch = r2; |
- const int32_t kDeltaToLoadBoolResult = 4 * kPointerSize; |
- |
Label slow, loop, is_instance, is_not_instance, not_js_object; |
if (!HasArgsInRegisters()) { |
@@ -1742,14 +1739,14 @@ void InstanceofStub::Generate(MacroAssembler* masm) { |
ASSERT(HasArgsInRegisters()); |
// Patch the (relocated) inlined map check. |
- // The offset was stored in r5 |
+ // The map_load_offset was stored in r5 |
// (See LCodeGen::DoDeferredLInstanceOfKnownGlobal). |
- const Register offset = r5; |
- __ sub(inline_site, lr, offset); |
+ const Register map_load_offset = r5; |
+ __ sub(r9, lr, map_load_offset); |
// Get the map location in r5 and patch it. |
- __ GetRelocatedValueLocation(inline_site, offset); |
- __ ldr(offset, MemOperand(offset)); |
- __ str(map, FieldMemOperand(offset, Cell::kValueOffset)); |
+ __ GetRelocatedValueLocation(r9, map_load_offset, scratch); |
+ __ ldr(map_load_offset, MemOperand(map_load_offset)); |
+ __ str(map, FieldMemOperand(map_load_offset, Cell::kValueOffset)); |
} |
// Register mapping: r3 is object map and r4 is function prototype. |
@@ -1778,9 +1775,12 @@ void InstanceofStub::Generate(MacroAssembler* masm) { |
} else { |
// Patch the call site to return true. |
__ LoadRoot(r0, Heap::kTrueValueRootIndex); |
- __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult)); |
+ // The bool_load_offset was stored in r6 |
+ // (See LCodeGen::DoDeferredLInstanceOfKnownGlobal). |
+ const Register bool_load_offset = r6; |
+ __ sub(r9, lr, bool_load_offset); |
// Get the boolean result location in scratch and patch it. |
- __ GetRelocatedValueLocation(inline_site, scratch); |
+ __ GetRelocatedValueLocation(r9, scratch, scratch2); |
__ str(r0, MemOperand(scratch)); |
if (!ReturnTrueFalseObject()) { |
@@ -1796,9 +1796,13 @@ void InstanceofStub::Generate(MacroAssembler* masm) { |
} else { |
// Patch the call site to return false. |
__ LoadRoot(r0, Heap::kFalseValueRootIndex); |
- __ add(inline_site, inline_site, Operand(kDeltaToLoadBoolResult)); |
+ // The bool_load_offset was stored in r6 |
+ // (See LCodeGen::DoDeferredLInstanceOfKnownGlobal). |
+ const Register bool_load_offset = r6; |
+ __ sub(r9, lr, bool_load_offset); |
+ ; |
// Get the boolean result location in scratch and patch it. |
- __ GetRelocatedValueLocation(inline_site, scratch); |
+ __ GetRelocatedValueLocation(r9, scratch, scratch2); |
__ str(r0, MemOperand(scratch)); |
if (!ReturnTrueFalseObject()) { |