X87: Stop using HeapType in IC and Crankshaft.
port 119cb56617
(r26696).
original commit message:
Stop using HeapType in IC and Crankshaft
BUG=
R=weiliang.lin@intel.com
Review URL: https://codereview.chromium.org/958283002
Cr-Commit-Position: refs/heads/master@{#26903}
This commit is contained in:
parent
5d4c76eae7
commit
cd87f25a2e
@ -17,9 +17,8 @@ namespace internal {
|
||||
|
||||
|
||||
void NamedLoadHandlerCompiler::GenerateLoadViaGetter(
|
||||
MacroAssembler* masm, Handle<HeapType> type, Register receiver,
|
||||
Register holder, int accessor_index, int expected_arguments,
|
||||
Register scratch) {
|
||||
MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder,
|
||||
int accessor_index, int expected_arguments, Register scratch) {
|
||||
{
|
||||
FrameScope scope(masm, StackFrame::INTERNAL);
|
||||
|
||||
@ -27,7 +26,7 @@ void NamedLoadHandlerCompiler::GenerateLoadViaGetter(
|
||||
DCHECK(!holder.is(scratch));
|
||||
DCHECK(!receiver.is(scratch));
|
||||
// Call the JavaScript getter with the receiver on the stack.
|
||||
if (IC::TypeToMap(*type, masm->isolate())->IsJSGlobalObjectMap()) {
|
||||
if (map->IsJSGlobalObjectMap()) {
|
||||
// Swap in the global receiver.
|
||||
__ mov(scratch,
|
||||
FieldOperand(receiver, JSGlobalObject::kGlobalProxyOffset));
|
||||
@ -237,9 +236,8 @@ void PropertyHandlerCompiler::GenerateCheckPropertyCell(
|
||||
|
||||
|
||||
void NamedStoreHandlerCompiler::GenerateStoreViaSetter(
|
||||
MacroAssembler* masm, Handle<HeapType> type, Register receiver,
|
||||
Register holder, int accessor_index, int expected_arguments,
|
||||
Register scratch) {
|
||||
MacroAssembler* masm, Handle<Map> map, Register receiver, Register holder,
|
||||
int accessor_index, int expected_arguments, Register scratch) {
|
||||
// ----------- S t a t e -------------
|
||||
// -- esp[0] : return address
|
||||
// -----------------------------------
|
||||
@ -254,8 +252,7 @@ void NamedStoreHandlerCompiler::GenerateStoreViaSetter(
|
||||
DCHECK(!receiver.is(scratch));
|
||||
DCHECK(!value().is(scratch));
|
||||
// Call the JavaScript setter with receiver and value on the stack.
|
||||
if (IC::TypeToMap(*type, masm->isolate())->IsJSGlobalObjectMap()) {
|
||||
// Swap in the global receiver.
|
||||
if (map->IsJSGlobalObjectMap()) {
|
||||
__ mov(scratch,
|
||||
FieldOperand(receiver, JSGlobalObject::kGlobalProxyOffset));
|
||||
receiver = scratch;
|
||||
@ -419,7 +416,7 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
Register object_reg, Register holder_reg, Register scratch1,
|
||||
Register scratch2, Handle<Name> name, Label* miss,
|
||||
PrototypeCheckType check) {
|
||||
Handle<Map> receiver_map(IC::TypeToMap(*type(), isolate()));
|
||||
Handle<Map> receiver_map = map();
|
||||
|
||||
// Make sure there's no overlap between holder and object registers.
|
||||
DCHECK(!scratch1.is(object_reg) && !scratch1.is(holder_reg));
|
||||
@ -431,8 +428,9 @@ Register PropertyHandlerCompiler::CheckPrototypes(
|
||||
int depth = 0;
|
||||
|
||||
Handle<JSObject> current = Handle<JSObject>::null();
|
||||
if (type()->IsConstant())
|
||||
current = Handle<JSObject>::cast(type()->AsConstant()->Value());
|
||||
if (receiver_map->IsJSGlobalObjectMap()) {
|
||||
current = isolate()->global_object();
|
||||
}
|
||||
Handle<JSObject> prototype = Handle<JSObject>::null();
|
||||
Handle<Map> current_map = receiver_map;
|
||||
Handle<Map> holder_map(holder()->map());
|
||||
|
@ -36,7 +36,7 @@ void PropertyICCompiler::GenerateRuntimeSetProperty(
|
||||
#undef __
|
||||
#define __ ACCESS_MASM(masm())
|
||||
|
||||
Handle<Code> PropertyICCompiler::CompilePolymorphic(TypeHandleList* types,
|
||||
Handle<Code> PropertyICCompiler::CompilePolymorphic(MapHandleList* maps,
|
||||
CodeHandleList* handlers,
|
||||
Handle<Name> name,
|
||||
Code::StubType type,
|
||||
@ -63,7 +63,7 @@ Handle<Code> PropertyICCompiler::CompilePolymorphic(TypeHandleList* types,
|
||||
}
|
||||
|
||||
Label number_case;
|
||||
Label* smi_target = IncludesNumberType(types) ? &number_case : &miss;
|
||||
Label* smi_target = IncludesNumberMap(maps) ? &number_case : &miss;
|
||||
__ JumpIfSmi(receiver(), smi_target);
|
||||
|
||||
// Polymorphic keyed stores may use the map register
|
||||
@ -71,16 +71,15 @@ Handle<Code> PropertyICCompiler::CompilePolymorphic(TypeHandleList* types,
|
||||
DCHECK(kind() != Code::KEYED_STORE_IC ||
|
||||
map_reg.is(ElementTransitionAndStoreDescriptor::MapRegister()));
|
||||
__ mov(map_reg, FieldOperand(receiver(), HeapObject::kMapOffset));
|
||||
int receiver_count = types->length();
|
||||
int receiver_count = maps->length();
|
||||
int number_of_handled_maps = 0;
|
||||
for (int current = 0; current < receiver_count; ++current) {
|
||||
Handle<HeapType> type = types->at(current);
|
||||
Handle<Map> map = IC::TypeToMap(*type, isolate());
|
||||
Handle<Map> map = maps->at(current);
|
||||
if (!map->is_deprecated()) {
|
||||
number_of_handled_maps++;
|
||||
Handle<WeakCell> cell = Map::WeakCellForMap(map);
|
||||
__ CmpWeakValue(map_reg, cell, scratch2());
|
||||
if (type->Is(HeapType::Number())) {
|
||||
if (map->instance_type() == HEAP_NUMBER_TYPE) {
|
||||
DCHECK(!number_case.is_unused());
|
||||
__ bind(&number_case);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user