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:
parent
03ba4becbf
commit
d9de2aaa17
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user