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:
whesse@chromium.org 2010-02-09 15:18:37 +00:00
parent c00dcbe5f2
commit ad83e411e1
10 changed files with 31 additions and 157 deletions

View File

@ -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

View File

@ -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,

View File

@ -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);
} }

View File

@ -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) \

View File

@ -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 __

View File

@ -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.

View File

@ -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

View File

@ -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,

View File

@ -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 -------------

View File

@ -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.