Revert of Do not embed constant functions in StoreTransition stub. (patchset #3 id:40001 of https://codereview.chromium.org/769733003/)

Reason for revert:
GC stress failure: http://build.chromium.org/p/client.v8/builders/V8%20Mac%20GC%20Stress%20-%201/builds/1038

Original issue's description:
> Do not embed constant functions in StoreTransition stub.
>
> BUG=v8:3629
> LOG=N

TBR=ishell@google.com,ishell@chromium.org,ulan@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=v8:3629

Review URL: https://codereview.chromium.org/785253002

Cr-Commit-Position: refs/heads/master@{#25728}
This commit is contained in:
yangguo 2014-12-09 08:09:39 -08:00 committed by Commit bot
parent 03ba4becbf
commit d9de2aaa17
9 changed files with 21 additions and 76 deletions

View File

@ -336,18 +336,11 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ ldr(scratch,
FieldMemOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ cmp(value_reg, scratch);
__ Move(scratch1(), handle(constant, isolate()));
__ cmp(value_reg, scratch1());
__ b(ne, miss_label);
}

View File

@ -380,18 +380,11 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ Ldr(scratch,
FieldMemOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ Cmp(value_reg, scratch);
__ LoadObject(scratch1(), handle(constant, isolate()));
__ Cmp(value_reg, scratch1());
__ B(ne, miss_label);
}

View File

@ -340,10 +340,9 @@ Handle<Code> NamedStoreHandlerCompiler::CompileStoreTransition(
// Call to respective StoreTransitionStub.
if (details.type() == CONSTANT) {
GenerateConstantCheck(descriptors->GetValue(descriptor), value(), &miss);
GenerateRestoreMap(transition, scratch2(), &miss);
DCHECK(descriptors->GetValue(descriptor)->IsJSFunction());
Register map_reg = StoreTransitionDescriptor::MapRegister();
GenerateConstantCheck(map_reg, descriptor, value(), scratch2(), &miss);
GenerateRestoreName(name);
StoreTransitionStub stub(isolate());
GenerateTailCall(masm(), stub.GetCode());

View File

@ -234,8 +234,7 @@ class NamedStoreHandlerCompiler : public PropertyHandlerCompiler {
void GenerateRestoreMap(Handle<Map> transition, Register scratch,
Label* miss);
void GenerateConstantCheck(Register map_reg, int descriptor,
Register value_reg, Register scratch,
void GenerateConstantCheck(Object* constant, Register value_reg,
Label* miss_label);
void GenerateFieldTypeChecks(HeapType* field_type, Register value_reg,

View File

@ -343,18 +343,10 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ mov(scratch,
FieldOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ cmp(value_reg, scratch);
__ CmpObject(value_reg, handle(constant, isolate()));
__ j(not_equal, miss_label);
}

View File

@ -332,18 +332,11 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ lw(scratch,
FieldMemOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ Branch(miss_label, ne, value_reg, Operand(scratch));
__ li(scratch1(), handle(constant, isolate()));
__ Branch(miss_label, ne, value_reg, Operand(scratch1()));
}

View File

@ -333,18 +333,11 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ ld(scratch,
FieldMemOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ Branch(miss_label, ne, value_reg, Operand(scratch));
__ li(scratch1(), handle(constant, isolate()));
__ Branch(miss_label, ne, value_reg, Operand(scratch1()));
}

View File

@ -335,19 +335,10 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ movp(scratch,
FieldOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ cmpp(value_reg, scratch);
__ Cmp(value_reg, handle(constant, isolate()));
__ j(not_equal, miss_label);
}

View File

@ -343,18 +343,10 @@ void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle<Map> transition,
}
void NamedStoreHandlerCompiler::GenerateConstantCheck(Register map_reg,
int descriptor,
void NamedStoreHandlerCompiler::GenerateConstantCheck(Object* constant,
Register value_reg,
Register scratch,
Label* miss_label) {
DCHECK(!map_reg.is(scratch));
DCHECK(!map_reg.is(value_reg));
DCHECK(!value_reg.is(scratch));
__ LoadInstanceDescriptors(map_reg, scratch);
__ mov(scratch,
FieldOperand(scratch, DescriptorArray::GetValueOffset(descriptor)));
__ cmp(value_reg, scratch);
__ CmpObject(value_reg, handle(constant, isolate()));
__ j(not_equal, miss_label);
}