Eliminate unused function KeyedStoreIC::GenerateExtendStorage, and unused parameter from StubCompiler::GenerateStoreField.
Review URL: http://codereview.chromium.org/575022 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3824 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
c00dcbe5f2
commit
ad83e411e1
@ -788,23 +788,6 @@ void KeyedStoreIC::GenerateExternalArray(MacroAssembler* masm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ---------- S t a t e --------------
|
|
||||||
// -- r0 : value
|
|
||||||
// -- lr : return address
|
|
||||||
// -- sp[0] : key
|
|
||||||
// -- sp[1] : receiver
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
|
|
||||||
__ ldm(ia, sp, r2.bit() | r3.bit());
|
|
||||||
__ stm(db_w, sp, r0.bit() | r2.bit() | r3.bit());
|
|
||||||
|
|
||||||
// Perform tail call to the entry.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
// -- r0 : value
|
// -- r0 : value
|
||||||
@ -825,23 +808,6 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
// -- r0 : value
|
|
||||||
// -- r2 : name
|
|
||||||
// -- lr : return address
|
|
||||||
// -- [sp] : receiver
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
__ ldr(r3, MemOperand(sp)); // copy receiver
|
|
||||||
__ stm(db_w, sp, r0.bit() | r2.bit() | r3.bit());
|
|
||||||
|
|
||||||
// Perform tail call to the entry.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
// -- r0 : value
|
// -- r0 : value
|
||||||
|
@ -261,7 +261,6 @@ void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm,
|
|||||||
// After executing generated code, the receiver_reg and name_reg
|
// After executing generated code, the receiver_reg and name_reg
|
||||||
// may be clobbered.
|
// may be clobbered.
|
||||||
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
||||||
Builtins::Name storage_extend,
|
|
||||||
JSObject* object,
|
JSObject* object,
|
||||||
int index,
|
int index,
|
||||||
Map* transition,
|
Map* transition,
|
||||||
@ -294,11 +293,12 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
|||||||
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
||||||
// The properties must be extended before we can store the value.
|
// The properties must be extended before we can store the value.
|
||||||
// We jump to a runtime call that extends the properties array.
|
// We jump to a runtime call that extends the properties array.
|
||||||
|
__ push(receiver_reg);
|
||||||
__ mov(r2, Operand(Handle<Map>(transition)));
|
__ mov(r2, Operand(Handle<Map>(transition)));
|
||||||
// Please note, if we implement keyed store for arm we need
|
__ stm(db_w, sp, r2.bit() | r0.bit());
|
||||||
// to call the Builtins::KeyedStoreIC_ExtendStorage.
|
__ TailCallRuntime(
|
||||||
Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_ExtendStorage));
|
ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage)),
|
||||||
__ Jump(ic, RelocInfo::CODE_TARGET);
|
3, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1215,7 +1215,6 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
|
|
||||||
// name register might be clobbered.
|
// name register might be clobbered.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::StoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
@ -1719,7 +1718,6 @@ Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
__ ldr(r3, MemOperand(sp));
|
__ ldr(r3, MemOperand(sp));
|
||||||
// r1 is used as scratch register, r3 and r2 might be clobbered.
|
// r1 is used as scratch register, r3 and r2 might be clobbered.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::StoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
|
@ -668,10 +668,6 @@ static void Generate_StoreIC_Miss(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void Generate_StoreIC_ExtendStorage(MacroAssembler* masm) {
|
|
||||||
StoreIC::GenerateExtendStorage(masm);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Generate_StoreIC_Megamorphic(MacroAssembler* masm) {
|
static void Generate_StoreIC_Megamorphic(MacroAssembler* masm) {
|
||||||
StoreIC::GenerateMegamorphic(masm);
|
StoreIC::GenerateMegamorphic(masm);
|
||||||
}
|
}
|
||||||
@ -720,11 +716,6 @@ static void Generate_KeyedStoreIC_ExternalFloatArray(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void Generate_KeyedStoreIC_ExtendStorage(MacroAssembler* masm) {
|
|
||||||
KeyedStoreIC::GenerateExtendStorage(masm);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void Generate_KeyedStoreIC_Miss(MacroAssembler* masm) {
|
static void Generate_KeyedStoreIC_Miss(MacroAssembler* masm) {
|
||||||
KeyedStoreIC::GenerateMiss(masm);
|
KeyedStoreIC::GenerateMiss(masm);
|
||||||
}
|
}
|
||||||
|
@ -69,9 +69,6 @@ enum BuiltinExtraArguments {
|
|||||||
V(StoreIC_Miss, BUILTIN, UNINITIALIZED) \
|
V(StoreIC_Miss, BUILTIN, UNINITIALIZED) \
|
||||||
V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED) \
|
V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED) \
|
||||||
\
|
\
|
||||||
V(StoreIC_ExtendStorage, BUILTIN, UNINITIALIZED) \
|
|
||||||
V(KeyedStoreIC_ExtendStorage, BUILTIN, UNINITIALIZED) \
|
|
||||||
\
|
|
||||||
V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED) \
|
V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED) \
|
||||||
V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC) \
|
V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC) \
|
||||||
V(LoadIC_Normal, LOAD_IC, MONOMORPHIC) \
|
V(LoadIC_Normal, LOAD_IC, MONOMORPHIC) \
|
||||||
|
@ -1385,26 +1385,6 @@ void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
// -- eax : value
|
|
||||||
// -- ecx : transition map
|
|
||||||
// -- edx : receiver
|
|
||||||
// -- esp[0] : return address
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
__ pop(ebx);
|
|
||||||
__ push(edx); // receiver
|
|
||||||
__ push(ecx); // transition map
|
|
||||||
__ push(eax); // value
|
|
||||||
__ push(ebx); // return address
|
|
||||||
|
|
||||||
// Perform tail call to the entry.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
// -- eax : value
|
// -- eax : value
|
||||||
@ -1464,27 +1444,6 @@ void KeyedStoreIC::GenerateMiss(MacroAssembler* masm) {
|
|||||||
__ TailCallRuntime(ExternalReference(IC_Utility(kKeyedStoreIC_Miss)), 3, 1);
|
__ TailCallRuntime(ExternalReference(IC_Utility(kKeyedStoreIC_Miss)), 3, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
// -- eax : value
|
|
||||||
// -- ecx : transition map
|
|
||||||
// -- esp[0] : return address
|
|
||||||
// -- esp[4] : key
|
|
||||||
// -- esp[8] : receiver
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
__ pop(ebx);
|
|
||||||
__ push(Operand(esp, 1 * kPointerSize));
|
|
||||||
__ push(ecx);
|
|
||||||
__ push(eax);
|
|
||||||
__ push(ebx);
|
|
||||||
|
|
||||||
// Do tail-call to runtime routine.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef __
|
#undef __
|
||||||
|
|
||||||
|
|
||||||
|
@ -607,8 +607,9 @@ void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Both name_reg and receiver_reg are preserved on jumps to miss_label,
|
||||||
|
// but may be destroyed if store is successful.
|
||||||
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
||||||
Builtins::Name storage_extend,
|
|
||||||
JSObject* object,
|
JSObject* object,
|
||||||
int index,
|
int index,
|
||||||
Map* transition,
|
Map* transition,
|
||||||
@ -638,9 +639,13 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
|||||||
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
||||||
// The properties must be extended before we can store the value.
|
// The properties must be extended before we can store the value.
|
||||||
// We jump to a runtime call that extends the properties array.
|
// We jump to a runtime call that extends the properties array.
|
||||||
__ mov(ecx, Immediate(Handle<Map>(transition)));
|
__ pop(scratch); // Return address.
|
||||||
Handle<Code> ic(Builtins::builtin(storage_extend));
|
__ push(receiver_reg);
|
||||||
__ jmp(ic, RelocInfo::CODE_TARGET);
|
__ push(Immediate(Handle<Map>(transition)));
|
||||||
|
__ push(eax);
|
||||||
|
__ push(scratch);
|
||||||
|
__ TailCallRuntime(
|
||||||
|
ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage)), 3, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1251,7 +1256,6 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
|
|
||||||
// Generate store field code. Trashes the name register.
|
// Generate store field code. Trashes the name register.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::StoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
@ -1425,15 +1429,14 @@ Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
__ j(not_equal, &miss, not_taken);
|
__ j(not_equal, &miss, not_taken);
|
||||||
|
|
||||||
// Get the object from the stack.
|
// Get the object from the stack.
|
||||||
__ mov(ebx, Operand(esp, 2 * kPointerSize));
|
__ mov(edx, Operand(esp, 2 * kPointerSize));
|
||||||
|
|
||||||
// Generate store field code. Trashes the name register.
|
// Generate store field code. Trashes the name register.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::KeyedStoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
ebx, ecx, edx,
|
edx, ecx, ebx,
|
||||||
&miss);
|
&miss);
|
||||||
|
|
||||||
// Handle store cache miss.
|
// Handle store cache miss.
|
||||||
|
2
src/ic.h
2
src/ic.h
@ -352,7 +352,6 @@ class StoreIC: public IC {
|
|||||||
static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
|
static void GenerateInitialize(MacroAssembler* masm) { GenerateMiss(masm); }
|
||||||
static void GenerateMiss(MacroAssembler* masm);
|
static void GenerateMiss(MacroAssembler* masm);
|
||||||
static void GenerateMegamorphic(MacroAssembler* masm);
|
static void GenerateMegamorphic(MacroAssembler* masm);
|
||||||
static void GenerateExtendStorage(MacroAssembler* masm);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Update the inline cache and the global stub cache based on the
|
// Update the inline cache and the global stub cache based on the
|
||||||
@ -389,7 +388,6 @@ class KeyedStoreIC: public IC {
|
|||||||
static void GenerateMiss(MacroAssembler* masm);
|
static void GenerateMiss(MacroAssembler* masm);
|
||||||
static void GenerateRuntimeSetProperty(MacroAssembler* masm);
|
static void GenerateRuntimeSetProperty(MacroAssembler* masm);
|
||||||
static void GenerateGeneric(MacroAssembler* masm);
|
static void GenerateGeneric(MacroAssembler* masm);
|
||||||
static void GenerateExtendStorage(MacroAssembler* masm);
|
|
||||||
|
|
||||||
// Generators for external array types. See objects.h.
|
// Generators for external array types. See objects.h.
|
||||||
// These are similar to the generic IC; they optimize the case of
|
// These are similar to the generic IC; they optimize the case of
|
||||||
|
@ -369,7 +369,6 @@ class StubCompiler BASE_EMBEDDED {
|
|||||||
Label* miss_label);
|
Label* miss_label);
|
||||||
|
|
||||||
static void GenerateStoreField(MacroAssembler* masm,
|
static void GenerateStoreField(MacroAssembler* masm,
|
||||||
Builtins::Name storage_extend,
|
|
||||||
JSObject* object,
|
JSObject* object,
|
||||||
int index,
|
int index,
|
||||||
Map* transition,
|
Map* transition,
|
||||||
|
@ -611,27 +611,6 @@ void KeyedStoreIC::GenerateRuntimeSetProperty(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KeyedStoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
// -- rax : value
|
|
||||||
// -- rcx : transition map
|
|
||||||
// -- rsp[0] : return address
|
|
||||||
// -- rsp[8] : key
|
|
||||||
// -- rsp[16] : receiver
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
__ pop(rbx);
|
|
||||||
__ push(Operand(rsp, 1 * kPointerSize)); // receiver
|
|
||||||
__ push(rcx); // transition map
|
|
||||||
__ push(rax); // value
|
|
||||||
__ push(rbx); // return address
|
|
||||||
|
|
||||||
// Do tail-call to runtime routine.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) {
|
void KeyedStoreIC::GenerateGeneric(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
// -- rax : value
|
// -- rax : value
|
||||||
@ -1308,7 +1287,6 @@ void LoadIC::GenerateStringLength(MacroAssembler* masm) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool LoadIC::PatchInlinedLoad(Address address, Object* map, int offset) {
|
bool LoadIC::PatchInlinedLoad(Address address, Object* map, int offset) {
|
||||||
// The address of the instruction following the call.
|
// The address of the instruction following the call.
|
||||||
Address test_instruction_address =
|
Address test_instruction_address =
|
||||||
@ -1336,6 +1314,7 @@ bool LoadIC::PatchInlinedLoad(Address address, Object* map, int offset) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
// -- rax : value
|
// -- rax : value
|
||||||
@ -1354,24 +1333,6 @@ void StoreIC::GenerateMiss(MacroAssembler* masm) {
|
|||||||
__ TailCallRuntime(ExternalReference(IC_Utility(kStoreIC_Miss)), 3, 1);
|
__ TailCallRuntime(ExternalReference(IC_Utility(kStoreIC_Miss)), 3, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoreIC::GenerateExtendStorage(MacroAssembler* masm) {
|
|
||||||
// ----------- S t a t e -------------
|
|
||||||
// -- rax : value
|
|
||||||
// -- rcx : Map (target of map transition)
|
|
||||||
// -- rdx : receiver
|
|
||||||
// -- rsp[0] : return address
|
|
||||||
// -----------------------------------
|
|
||||||
|
|
||||||
__ pop(rbx);
|
|
||||||
__ push(rdx); // receiver
|
|
||||||
__ push(rcx); // transition map
|
|
||||||
__ push(rax); // value
|
|
||||||
__ push(rbx); // return address
|
|
||||||
|
|
||||||
// Perform tail call to the entry.
|
|
||||||
__ TailCallRuntime(
|
|
||||||
ExternalReference(IC_Utility(kSharedStoreIC_ExtendStorage)), 3, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) {
|
||||||
// ----------- S t a t e -------------
|
// ----------- S t a t e -------------
|
||||||
|
@ -201,8 +201,9 @@ void StubCache::GenerateProbe(MacroAssembler* masm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Both name_reg and receiver_reg are preserved on jumps to miss_label,
|
||||||
|
// but may be destroyed if store is successful.
|
||||||
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
||||||
Builtins::Name storage_extend,
|
|
||||||
JSObject* object,
|
JSObject* object,
|
||||||
int index,
|
int index,
|
||||||
Map* transition,
|
Map* transition,
|
||||||
@ -231,9 +232,13 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm,
|
|||||||
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
if ((transition != NULL) && (object->map()->unused_property_fields() == 0)) {
|
||||||
// The properties must be extended before we can store the value.
|
// The properties must be extended before we can store the value.
|
||||||
// We jump to a runtime call that extends the properties array.
|
// We jump to a runtime call that extends the properties array.
|
||||||
__ Move(rcx, Handle<Map>(transition));
|
__ pop(scratch); // Return address.
|
||||||
Handle<Code> ic(Builtins::builtin(storage_extend));
|
__ push(receiver_reg);
|
||||||
__ Jump(ic, RelocInfo::CODE_TARGET);
|
__ Push(Handle<Map>(transition));
|
||||||
|
__ push(rax);
|
||||||
|
__ push(scratch);
|
||||||
|
__ TailCallRuntime(
|
||||||
|
ExternalReference(IC_Utility(IC::kSharedStoreIC_ExtendStorage)), 3, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1399,9 +1404,8 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
Label miss;
|
Label miss;
|
||||||
|
|
||||||
// Generate store field code. Trashes the name register.
|
// Generate store field code. Preserves receiver and name on jump to miss.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::StoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
@ -1410,7 +1414,6 @@ Object* StoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
|
|
||||||
// Handle store cache miss.
|
// Handle store cache miss.
|
||||||
__ bind(&miss);
|
__ bind(&miss);
|
||||||
__ Move(rcx, Handle<String>(name)); // restore name
|
|
||||||
Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
|
Handle<Code> ic(Builtins::builtin(Builtins::StoreIC_Miss));
|
||||||
__ Jump(ic, RelocInfo::CODE_TARGET);
|
__ Jump(ic, RelocInfo::CODE_TARGET);
|
||||||
|
|
||||||
@ -1552,16 +1555,15 @@ Object* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
|
|||||||
__ Cmp(rcx, Handle<String>(name));
|
__ Cmp(rcx, Handle<String>(name));
|
||||||
__ j(not_equal, &miss);
|
__ j(not_equal, &miss);
|
||||||
|
|
||||||
// Get the object from the stack.
|
// Get the receiver from the stack.
|
||||||
__ movq(rbx, Operand(rsp, 2 * kPointerSize));
|
__ movq(rdx, Operand(rsp, 2 * kPointerSize));
|
||||||
|
|
||||||
// Generate store field code. Trashes the name register.
|
// Generate store field code. Preserves receiver and name on jump to miss.
|
||||||
GenerateStoreField(masm(),
|
GenerateStoreField(masm(),
|
||||||
Builtins::KeyedStoreIC_ExtendStorage,
|
|
||||||
object,
|
object,
|
||||||
index,
|
index,
|
||||||
transition,
|
transition,
|
||||||
rbx, rcx, rdx,
|
rdx, rcx, rbx,
|
||||||
&miss);
|
&miss);
|
||||||
|
|
||||||
// Handle store cache miss.
|
// Handle store cache miss.
|
||||||
|
Loading…
Reference in New Issue
Block a user