Commit d9de2aaa authored by yangguo's avatar yangguo Committed by Commit bot

Revert of Do not embed constant functions in StoreTransition stub. (patchset...

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}
parent 03ba4bec
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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());
......
......@@ -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,
......
......@@ -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);
}
......
......@@ -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()));
}
......
......@@ -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()));
}
......
......@@ -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);
}
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment