Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1337)

Unified Diff: src/ppc/code-stubs-ppc.cc

Issue 1213383003: PPC: Fix InstanceOfStub's inlined call site logic. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/ppc/lithium-codegen-ppc.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ppc/code-stubs-ppc.cc
diff --git a/src/ppc/code-stubs-ppc.cc b/src/ppc/code-stubs-ppc.cc
index 848fc2217254d4837676596972b27676701c7134..b852de9cf3692a5056205bd72c2dcb98656e4f06 100644
--- a/src/ppc/code-stubs-ppc.cc
+++ b/src/ppc/code-stubs-ppc.cc
@@ -1379,15 +1379,14 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
Register map = r6; // Map of the object.
const Register function = r4; // Function (rhs).
const Register prototype = r7; // Prototype of the function.
- const Register inline_site = r9;
+ // The map_check_delta was stored in r8
+ // The bool_load_delta was stored in r9
+ // (See LCodeGen::DoDeferredLInstanceOfKnownGlobal).
+ const Register map_check_delta = r8;
+ const Register bool_load_delta = r9;
+ const Register inline_site = r10;
const Register scratch = r5;
Register scratch3 = no_reg;
-
- // delta = mov + tagged LoadP + cmp + bne
- const int32_t kDeltaToLoadBoolResult =
- (Assembler::kMovInstructions + Assembler::kTaggedLoadInstructions + 2) *
- Assembler::kInstrSize;
-
Label slow, loop, is_instance, is_not_instance, not_js_object;
if (!HasArgsInRegisters()) {
@@ -1429,17 +1428,15 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
DCHECK(HasArgsInRegisters());
// Patch the (relocated) inlined map check.
- // The offset was stored in r8
- // (See LCodeGen::DoDeferredLInstanceOfKnownGlobal).
- const Register offset = r8;
+ const Register offset = map_check_delta;
__ mflr(inline_site);
__ sub(inline_site, inline_site, offset);
- // Get the map location in r8 and patch it.
+ // Get the map location in offset and patch it.
__ GetRelocatedValue(inline_site, offset, scratch);
__ StoreP(map, FieldMemOperand(offset, Cell::kValueOffset), r0);
- __ mr(r10, map);
- __ RecordWriteField(offset, Cell::kValueOffset, r10, function,
+ __ mr(r11, map);
+ __ RecordWriteField(offset, Cell::kValueOffset, r11, function,
kLRHasNotBeenSaved, kDontSaveFPRegs,
OMIT_REMEMBERED_SET, OMIT_SMI_CHECK);
}
@@ -1474,7 +1471,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
} else {
// Patch the call site to return true.
__ LoadRoot(r3, Heap::kTrueValueRootIndex);
- __ addi(inline_site, inline_site, Operand(kDeltaToLoadBoolResult));
+ __ add(inline_site, inline_site, bool_load_delta);
// Get the boolean result location in scratch and patch it.
__ SetRelocatedValue(inline_site, scratch, r3);
@@ -1494,7 +1491,7 @@ void InstanceofStub::Generate(MacroAssembler* masm) {
} else {
// Patch the call site to return false.
__ LoadRoot(r3, Heap::kFalseValueRootIndex);
- __ addi(inline_site, inline_site, Operand(kDeltaToLoadBoolResult));
+ __ add(inline_site, inline_site, bool_load_delta);
// Get the boolean result location in scratch and patch it.
__ SetRelocatedValue(inline_site, scratch, r3);
« no previous file with comments | « no previous file | src/ppc/lithium-codegen-ppc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698