Delete useless CompileStoreGlobal
StoreGlobal stubs are generated by Hydrogen now BUG= R=verwaest@chromium.org Review URL: https://chromiumcodereview.appspot.com/23881004 Patch from Weiliang Lin <weiliang.lin2@gmail.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16653 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
64bb1800a5
commit
dcad4b8d08
@ -6424,8 +6424,6 @@ static const AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
|
||||
// Also used in StoreIC::GenerateNormal via GenerateDictionaryStore.
|
||||
// Also used in KeyedStoreIC::GenerateGeneric.
|
||||
{ REG(r3), REG(r4), REG(r5), EMIT_REMEMBERED_SET },
|
||||
// Used in CompileStoreGlobal.
|
||||
{ REG(r4), REG(r1), REG(r2), OMIT_REMEMBERED_SET },
|
||||
// Used in StoreStubCompiler::CompileStoreField via GenerateStoreField.
|
||||
{ REG(r1), REG(r2), REG(r3), EMIT_REMEMBERED_SET },
|
||||
{ REG(r3), REG(r2), REG(r1), EMIT_REMEMBERED_SET },
|
||||
|
@ -2912,47 +2912,6 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> StoreStubCompiler::CompileStoreGlobal(
|
||||
Handle<GlobalObject> object,
|
||||
Handle<PropertyCell> cell,
|
||||
Handle<Name> name) {
|
||||
Label miss;
|
||||
|
||||
// Check that the map of the global has not changed.
|
||||
__ ldr(scratch1(), FieldMemOperand(receiver(), HeapObject::kMapOffset));
|
||||
__ cmp(scratch1(), Operand(Handle<Map>(object->map())));
|
||||
__ b(ne, &miss);
|
||||
|
||||
// Check that the value in the cell is not the hole. If it is, this
|
||||
// cell could have been deleted and reintroducing the global needs
|
||||
// to update the property details in the property dictionary of the
|
||||
// global object. We bail out to the runtime system to do that.
|
||||
__ mov(scratch1(), Operand(cell));
|
||||
__ LoadRoot(scratch2(), Heap::kTheHoleValueRootIndex);
|
||||
__ ldr(scratch3(), FieldMemOperand(scratch1(), Cell::kValueOffset));
|
||||
__ cmp(scratch3(), scratch2());
|
||||
__ b(eq, &miss);
|
||||
|
||||
// Store the value in the cell.
|
||||
__ str(value(), FieldMemOperand(scratch1(), Cell::kValueOffset));
|
||||
// Cells are always rescanned, so no write barrier here.
|
||||
|
||||
Counters* counters = isolate()->counters();
|
||||
__ IncrementCounter(
|
||||
counters->named_store_global_inline(), 1, scratch1(), scratch2());
|
||||
__ Ret();
|
||||
|
||||
// Handle store cache miss.
|
||||
__ bind(&miss);
|
||||
__ IncrementCounter(
|
||||
counters->named_store_global_inline_miss(), 1, scratch1(), scratch2());
|
||||
TailCallBuiltin(masm(), MissBuiltin(kind()));
|
||||
|
||||
// Return the generated code.
|
||||
return GetICCode(kind(), Code::NORMAL, name);
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> LoadStubCompiler::CompileLoadNonexistent(
|
||||
Handle<JSObject> object,
|
||||
Handle<JSObject> last,
|
||||
|
@ -6812,8 +6812,6 @@ static const AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
|
||||
// Used in CompileArrayPushCall.
|
||||
{ REG(ebx), REG(ecx), REG(edx), EMIT_REMEMBERED_SET },
|
||||
{ REG(ebx), REG(edi), REG(edx), OMIT_REMEMBERED_SET },
|
||||
// Used in CompileStoreGlobal and CallFunctionStub.
|
||||
{ REG(ebx), REG(ecx), REG(edx), OMIT_REMEMBERED_SET },
|
||||
// Used in StoreStubCompiler::CompileStoreField and
|
||||
// KeyedStoreStubCompiler::CompileStoreField via GenerateStoreField.
|
||||
{ REG(edx), REG(ecx), REG(ebx), EMIT_REMEMBERED_SET },
|
||||
|
@ -3004,48 +3004,6 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> StoreStubCompiler::CompileStoreGlobal(
|
||||
Handle<GlobalObject> object,
|
||||
Handle<PropertyCell> cell,
|
||||
Handle<Name> name) {
|
||||
Label miss;
|
||||
|
||||
// Check that the map of the global has not changed.
|
||||
__ cmp(FieldOperand(receiver(), HeapObject::kMapOffset),
|
||||
Immediate(Handle<Map>(object->map())));
|
||||
__ j(not_equal, &miss);
|
||||
|
||||
// Compute the cell operand to use.
|
||||
__ mov(scratch1(), Immediate(cell));
|
||||
Operand cell_operand =
|
||||
FieldOperand(scratch1(), PropertyCell::kValueOffset);
|
||||
|
||||
// Check that the value in the cell is not the hole. If it is, this
|
||||
// cell could have been deleted and reintroducing the global needs
|
||||
// to update the property details in the property dictionary of the
|
||||
// global object. We bail out to the runtime system to do that.
|
||||
__ cmp(cell_operand, factory()->the_hole_value());
|
||||
__ j(equal, &miss);
|
||||
|
||||
// Store the value in the cell.
|
||||
__ mov(cell_operand, value());
|
||||
// No write barrier here, because cells are always rescanned.
|
||||
|
||||
// Return the value (register eax).
|
||||
Counters* counters = isolate()->counters();
|
||||
__ IncrementCounter(counters->named_store_global_inline(), 1);
|
||||
__ ret(0);
|
||||
|
||||
// Handle store cache miss.
|
||||
__ bind(&miss);
|
||||
__ IncrementCounter(counters->named_store_global_inline_miss(), 1);
|
||||
TailCallBuiltin(masm(), MissBuiltin(kind()));
|
||||
|
||||
// Return the generated code.
|
||||
return GetICCode(kind(), Code::NORMAL, name);
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic(
|
||||
MapHandleList* receiver_maps,
|
||||
CodeHandleList* handler_stubs,
|
||||
|
@ -6554,8 +6554,6 @@ static const AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
|
||||
// Also used in StoreIC::GenerateNormal via GenerateDictionaryStore.
|
||||
// Also used in KeyedStoreIC::GenerateGeneric.
|
||||
{ REG(a3), REG(t0), REG(t1), EMIT_REMEMBERED_SET },
|
||||
// Used in CompileStoreGlobal.
|
||||
{ REG(t0), REG(a1), REG(a2), OMIT_REMEMBERED_SET },
|
||||
// Used in StoreStubCompiler::CompileStoreField via GenerateStoreField.
|
||||
{ REG(a1), REG(a2), REG(a3), EMIT_REMEMBERED_SET },
|
||||
{ REG(a3), REG(a2), REG(a1), EMIT_REMEMBERED_SET },
|
||||
|
@ -2935,46 +2935,6 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> StoreStubCompiler::CompileStoreGlobal(
|
||||
Handle<GlobalObject> object,
|
||||
Handle<PropertyCell> cell,
|
||||
Handle<Name> name) {
|
||||
Label miss;
|
||||
|
||||
// Check that the map of the global has not changed.
|
||||
__ lw(scratch1(), FieldMemOperand(receiver(), HeapObject::kMapOffset));
|
||||
__ Branch(&miss, ne, scratch1(), Operand(Handle<Map>(object->map())));
|
||||
|
||||
// Check that the value in the cell is not the hole. If it is, this
|
||||
// cell could have been deleted and reintroducing the global needs
|
||||
// to update the property details in the property dictionary of the
|
||||
// global object. We bail out to the runtime system to do that.
|
||||
__ li(scratch1(), Operand(cell));
|
||||
__ LoadRoot(scratch2(), Heap::kTheHoleValueRootIndex);
|
||||
__ lw(scratch3(), FieldMemOperand(scratch1(), Cell::kValueOffset));
|
||||
__ Branch(&miss, eq, scratch3(), Operand(scratch2()));
|
||||
|
||||
// Store the value in the cell.
|
||||
__ sw(value(), FieldMemOperand(scratch1(), Cell::kValueOffset));
|
||||
__ mov(v0, a0); // Stored value must be returned in v0.
|
||||
// Cells are always rescanned, so no write barrier here.
|
||||
|
||||
Counters* counters = isolate()->counters();
|
||||
__ IncrementCounter(
|
||||
counters->named_store_global_inline(), 1, scratch1(), scratch2());
|
||||
__ Ret();
|
||||
|
||||
// Handle store cache miss.
|
||||
__ bind(&miss);
|
||||
__ IncrementCounter(
|
||||
counters->named_store_global_inline_miss(), 1, scratch1(), scratch2());
|
||||
TailCallBuiltin(masm(), MissBuiltin(kind()));
|
||||
|
||||
// Return the generated code.
|
||||
return GetICCode(kind(), Code::NORMAL, name);
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> LoadStubCompiler::CompileLoadNonexistent(
|
||||
Handle<JSObject> object,
|
||||
Handle<JSObject> last,
|
||||
|
@ -982,10 +982,6 @@ class StoreStubCompiler: public BaseStoreStubCompiler {
|
||||
Handle<Code> CompileStoreInterceptor(Handle<JSObject> object,
|
||||
Handle<Name> name);
|
||||
|
||||
Handle<Code> CompileStoreGlobal(Handle<GlobalObject> object,
|
||||
Handle<PropertyCell> holder,
|
||||
Handle<Name> name);
|
||||
|
||||
private:
|
||||
static Register* registers();
|
||||
virtual Code::Kind kind() { return Code::STORE_IC; }
|
||||
|
@ -5899,8 +5899,6 @@ struct AheadOfTimeWriteBarrierStubList kAheadOfTime[] = {
|
||||
{ REG(rbx), REG(rax), REG(rdi), EMIT_REMEMBERED_SET },
|
||||
// Used in CompileArrayPushCall.
|
||||
{ REG(rbx), REG(rcx), REG(rdx), EMIT_REMEMBERED_SET },
|
||||
// Used in CompileStoreGlobal.
|
||||
{ REG(rbx), REG(rcx), REG(rdx), OMIT_REMEMBERED_SET },
|
||||
// Used in StoreStubCompiler::CompileStoreField and
|
||||
// KeyedStoreStubCompiler::CompileStoreField via GenerateStoreField.
|
||||
{ REG(rdx), REG(rcx), REG(rbx), EMIT_REMEMBERED_SET },
|
||||
|
@ -2897,48 +2897,6 @@ Handle<Code> StoreStubCompiler::CompileStoreInterceptor(
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> StoreStubCompiler::CompileStoreGlobal(
|
||||
Handle<GlobalObject> object,
|
||||
Handle<PropertyCell> cell,
|
||||
Handle<Name> name) {
|
||||
Label miss;
|
||||
|
||||
// Check that the map of the global has not changed.
|
||||
__ Cmp(FieldOperand(receiver(), HeapObject::kMapOffset),
|
||||
Handle<Map>(object->map()));
|
||||
__ j(not_equal, &miss);
|
||||
|
||||
// Compute the cell operand to use.
|
||||
__ Move(scratch1(), cell);
|
||||
Operand cell_operand =
|
||||
FieldOperand(scratch1(), PropertyCell::kValueOffset);
|
||||
|
||||
// Check that the value in the cell is not the hole. If it is, this
|
||||
// cell could have been deleted and reintroducing the global needs
|
||||
// to update the property details in the property dictionary of the
|
||||
// global object. We bail out to the runtime system to do that.
|
||||
__ CompareRoot(cell_operand, Heap::kTheHoleValueRootIndex);
|
||||
__ j(equal, &miss);
|
||||
|
||||
// Store the value in the cell.
|
||||
__ movq(cell_operand, value());
|
||||
// Cells are always rescanned, so no write barrier here.
|
||||
|
||||
// Return the value (register rax).
|
||||
Counters* counters = isolate()->counters();
|
||||
__ IncrementCounter(counters->named_store_global_inline(), 1);
|
||||
__ ret(0);
|
||||
|
||||
// Handle store cache miss.
|
||||
__ bind(&miss);
|
||||
__ IncrementCounter(counters->named_store_global_inline_miss(), 1);
|
||||
TailCallBuiltin(masm(), MissBuiltin(kind()));
|
||||
|
||||
// Return the generated code.
|
||||
return GetICCode(kind(), Code::NORMAL, name);
|
||||
}
|
||||
|
||||
|
||||
Handle<Code> KeyedStoreStubCompiler::CompileStorePolymorphic(
|
||||
MapHandleList* receiver_maps,
|
||||
CodeHandleList* handler_stubs,
|
||||
|
Loading…
Reference in New Issue
Block a user