From 06b7bf60e17026fae19b7ab930475e4d20727caa Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Thu, 23 May 2013 09:19:18 +0000 Subject: [PATCH] Always require exact maps. R=danno@chromium.org Review URL: https://chromiumcodereview.appspot.com/13923003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14768 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/lithium-codegen-arm.cc | 15 +++++---------- src/arm/lithium-codegen-arm.h | 3 +-- src/arm/macro-assembler-arm.cc | 27 +++++---------------------- src/arm/macro-assembler-arm.h | 9 +++------ src/arm/stub-cache-arm.cc | 11 +++++------ src/ia32/lithium-codegen-ia32.cc | 11 +++++------ src/ia32/lithium-codegen-ia32.h | 3 +-- src/ia32/macro-assembler-ia32.cc | 23 +++-------------------- src/ia32/macro-assembler-ia32.h | 6 ++---- src/ia32/stub-cache-ia32.cc | 17 +++++++---------- src/objects.h | 5 ----- src/x64/lithium-codegen-x64.cc | 11 +++++------ src/x64/lithium-codegen-x64.h | 3 +-- src/x64/macro-assembler-x64.cc | 23 +++-------------------- src/x64/macro-assembler-x64.h | 6 ++---- src/x64/stub-cache-x64.cc | 18 +++++++----------- 16 files changed, 55 insertions(+), 136 deletions(-) diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index e616c4a..c75be96 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -3128,8 +3128,7 @@ void LCodeGen::DoLoadNamedFieldPolymorphic(LLoadNamedFieldPolymorphic* instr) { bool last = (i == map_count - 1); Handle map = instr->hydrogen()->types()->at(i); Label check_passed; - __ CompareMap( - object_map, map, &check_passed, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CompareMap(object_map, map, &check_passed); if (last && !need_generic) { DeoptimizeIf(ne, instr->environment()); __ bind(&check_passed); @@ -5279,10 +5278,9 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) { void LCodeGen::DoCheckMapCommon(Register map_reg, Handle map, - CompareMapMode mode, LEnvironment* env) { Label success; - __ CompareMap(map_reg, map, &success, mode); + __ CompareMap(map_reg, map, &success); DeoptimizeIf(ne, env); __ bind(&success); } @@ -5299,11 +5297,11 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { __ ldr(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); for (int i = 0; i < map_set->length() - 1; i++) { Handle map = map_set->at(i); - __ CompareMap(map_reg, map, &success, REQUIRE_EXACT_MAP); + __ CompareMap(map_reg, map, &success); __ b(eq, &success); } Handle map = map_set->last(); - DoCheckMapCommon(map_reg, map, REQUIRE_EXACT_MAP, instr->environment()); + DoCheckMapCommon(map_reg, map, instr->environment()); __ bind(&success); } @@ -5377,10 +5375,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { for (int i = 0; i < prototypes->length(); i++) { __ LoadHeapObject(prototype_reg, prototypes->at(i)); __ ldr(map_reg, FieldMemOperand(prototype_reg, HeapObject::kMapOffset)); - DoCheckMapCommon(map_reg, - maps->at(i), - ALLOW_ELEMENT_TRANSITION_MAPS, - instr->environment()); + DoCheckMapCommon(map_reg, maps->at(i), instr->environment()); } } } diff --git a/src/arm/lithium-codegen-arm.h b/src/arm/lithium-codegen-arm.h index b4dca22..8b5b94f 100644 --- a/src/arm/lithium-codegen-arm.h +++ b/src/arm/lithium-codegen-arm.h @@ -161,8 +161,7 @@ class LCodeGen BASE_EMBEDDED { void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr, Label* map_check); - void DoCheckMapCommon(Register map_reg, Handle map, - CompareMapMode mode, LEnvironment* env); + void DoCheckMapCommon(Register map_reg, Handle map, LEnvironment* env); // Parallel move support. void DoParallelMove(LParallelMove* move); diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc index a3b21a2..9d87c60 100644 --- a/src/arm/macro-assembler-arm.cc +++ b/src/arm/macro-assembler-arm.cc @@ -2105,32 +2105,16 @@ void MacroAssembler::StoreNumberToDoubleElements(Register value_reg, void MacroAssembler::CompareMap(Register obj, Register scratch, Handle map, - Label* early_success, - CompareMapMode mode) { + Label* early_success) { ldr(scratch, FieldMemOperand(obj, HeapObject::kMapOffset)); - CompareMap(scratch, map, early_success, mode); + CompareMap(scratch, map, early_success); } void MacroAssembler::CompareMap(Register obj_map, Handle map, - Label* early_success, - CompareMapMode mode) { + Label* early_success) { cmp(obj_map, Operand(map)); - if (mode == ALLOW_ELEMENT_TRANSITION_MAPS) { - ElementsKind kind = map->elements_kind(); - if (IsFastElementsKind(kind)) { - bool packed = IsFastPackedElementsKind(kind); - Map* current_map = *map; - while (CanTransitionToMoreGeneralFastElementsKind(kind, packed)) { - kind = GetNextMoreGeneralFastElementsKind(kind, packed); - current_map = current_map->LookupElementsTransitionMap(kind); - if (!current_map) break; - b(eq, early_success); - cmp(obj_map, Operand(Handle(current_map))); - } - } - } } @@ -2138,14 +2122,13 @@ void MacroAssembler::CheckMap(Register obj, Register scratch, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode) { + SmiCheckType smi_check_type) { if (smi_check_type == DO_SMI_CHECK) { JumpIfSmi(obj, fail); } Label success; - CompareMap(obj, scratch, map, &success, mode); + CompareMap(obj, scratch, map, &success); b(ne, fail); bind(&success); } diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h index 50f53b3..25e4a04 100644 --- a/src/arm/macro-assembler-arm.h +++ b/src/arm/macro-assembler-arm.h @@ -884,15 +884,13 @@ class MacroAssembler: public Assembler { void CompareMap(Register obj, Register scratch, Handle map, - Label* early_success, - CompareMapMode mode = REQUIRE_EXACT_MAP); + Label* early_success); // As above, but the map of the object is already loaded into the register // which is preserved by the code generated. void CompareMap(Register obj_map, Handle map, - Label* early_success, - CompareMapMode mode = REQUIRE_EXACT_MAP); + Label* early_success); // Check if the map of an object is equal to a specified map and branch to // label if not. Skip the smi check if not required (object is known to be a @@ -902,8 +900,7 @@ class MacroAssembler: public Assembler { Register scratch, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode = REQUIRE_EXACT_MAP); + SmiCheckType smi_check_type); void CheckMap(Register obj, diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index 538daef..1ede12c 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -462,7 +462,7 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm, // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, scratch1, Handle(object->map()), miss_label, - DO_SMI_CHECK, REQUIRE_EXACT_MAP); + DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -671,7 +671,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm, // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, scratch1, Handle(object->map()), miss_label, - DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -1259,8 +1259,7 @@ Register StubCompiler::CheckPrototypes(Handle object, if (!current.is_identical_to(first) || check == CHECK_ALL_MAPS) { Handle current_map(current->map()); // CheckMap implicitly loads the map of |reg| into |map_reg|. - __ CheckMap(reg, map_reg, current_map, miss, DONT_DO_SMI_CHECK, - ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(reg, map_reg, current_map, miss, DONT_DO_SMI_CHECK); } else { __ ldr(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); } @@ -1297,7 +1296,7 @@ Register StubCompiler::CheckPrototypes(Handle object, if (!holder.is_identical_to(first) || check == CHECK_ALL_MAPS) { // Check the holder map. __ CheckMap(reg, scratch1, Handle(holder->map()), miss, - DONT_DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + DONT_DO_SMI_CHECK); } // Perform security check for access to the global object. @@ -2809,7 +2808,7 @@ Handle StoreStubCompiler::CompileStoreInterceptor( // Check that the map of the object hasn't changed. __ CheckMap(receiver(), scratch1(), Handle(object->map()), &miss, - DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index 7cc8e4a..954f34c 100644 --- a/src/ia32/lithium-codegen-ia32.cc +++ b/src/ia32/lithium-codegen-ia32.cc @@ -3069,7 +3069,7 @@ void LCodeGen::DoLoadNamedFieldPolymorphic(LLoadNamedFieldPolymorphic* instr) { bool last = (i == map_count - 1); Handle map = instr->hydrogen()->types()->at(i); Label check_passed; - __ CompareMap(object, map, &check_passed, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CompareMap(object, map, &check_passed); if (last && !need_generic) { DeoptimizeIf(not_equal, instr->environment()); __ bind(&check_passed); @@ -5752,10 +5752,9 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) { void LCodeGen::DoCheckMapCommon(Register reg, Handle map, - CompareMapMode mode, LInstruction* instr) { Label success; - __ CompareMap(reg, map, &success, mode); + __ CompareMap(reg, map, &success); DeoptimizeIf(not_equal, instr->environment()); __ bind(&success); } @@ -5770,11 +5769,11 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { SmallMapList* map_set = instr->hydrogen()->map_set(); for (int i = 0; i < map_set->length() - 1; i++) { Handle map = map_set->at(i); - __ CompareMap(reg, map, &success, REQUIRE_EXACT_MAP); + __ CompareMap(reg, map, &success); __ j(equal, &success); } Handle map = map_set->last(); - DoCheckMapCommon(reg, map, REQUIRE_EXACT_MAP, instr); + DoCheckMapCommon(reg, map, instr); __ bind(&success); } @@ -5966,7 +5965,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { } else { for (int i = 0; i < prototypes->length(); i++) { __ LoadHeapObject(reg, prototypes->at(i)); - DoCheckMapCommon(reg, maps->at(i), ALLOW_ELEMENT_TRANSITION_MAPS, instr); + DoCheckMapCommon(reg, maps->at(i), instr); } } } diff --git a/src/ia32/lithium-codegen-ia32.h b/src/ia32/lithium-codegen-ia32.h index 7de3103..59d6b45 100644 --- a/src/ia32/lithium-codegen-ia32.h +++ b/src/ia32/lithium-codegen-ia32.h @@ -161,8 +161,7 @@ class LCodeGen BASE_EMBEDDED { void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr, Label* map_check); - void DoCheckMapCommon(Register reg, Handle map, - CompareMapMode mode, LInstruction* instr); + void DoCheckMapCommon(Register reg, Handle map, LInstruction* instr); // Parallel move support. void DoParallelMove(LParallelMove* move); diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc index 5c18cae..24fdef7 100644 --- a/src/ia32/macro-assembler-ia32.cc +++ b/src/ia32/macro-assembler-ia32.cc @@ -580,38 +580,21 @@ void MacroAssembler::StoreNumberToDoubleElements( void MacroAssembler::CompareMap(Register obj, Handle map, - Label* early_success, - CompareMapMode mode) { + Label* early_success) { cmp(FieldOperand(obj, HeapObject::kMapOffset), map); - if (mode == ALLOW_ELEMENT_TRANSITION_MAPS) { - ElementsKind kind = map->elements_kind(); - if (IsFastElementsKind(kind)) { - bool packed = IsFastPackedElementsKind(kind); - Map* current_map = *map; - while (CanTransitionToMoreGeneralFastElementsKind(kind, packed)) { - kind = GetNextMoreGeneralFastElementsKind(kind, packed); - current_map = current_map->LookupElementsTransitionMap(kind); - if (!current_map) break; - j(equal, early_success, Label::kNear); - cmp(FieldOperand(obj, HeapObject::kMapOffset), - Handle(current_map)); - } - } - } } void MacroAssembler::CheckMap(Register obj, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode) { + SmiCheckType smi_check_type) { if (smi_check_type == DO_SMI_CHECK) { JumpIfSmi(obj, fail); } Label success; - CompareMap(obj, map, &success, mode); + CompareMap(obj, map, &success); j(not_equal, fail); bind(&success); } diff --git a/src/ia32/macro-assembler-ia32.h b/src/ia32/macro-assembler-ia32.h index e7a075d..fd4a4b3 100644 --- a/src/ia32/macro-assembler-ia32.h +++ b/src/ia32/macro-assembler-ia32.h @@ -399,8 +399,7 @@ class MacroAssembler: public Assembler { // sequences branches to early_success. void CompareMap(Register obj, Handle map, - Label* early_success, - CompareMapMode mode = REQUIRE_EXACT_MAP); + Label* early_success); // Check if the map of an object is equal to a specified map and branch to // label if not. Skip the smi check if not required (object is known to be a @@ -409,8 +408,7 @@ class MacroAssembler: public Assembler { void CheckMap(Register obj, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode = REQUIRE_EXACT_MAP); + SmiCheckType smi_check_type); // Check if the map of an object is equal to a specified map and branch to a // specified target if equal. Skip the smi check if not required (object is diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc index de7df03..e1db7cd 100644 --- a/src/ia32/stub-cache-ia32.cc +++ b/src/ia32/stub-cache-ia32.cc @@ -783,7 +783,7 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm, Label* slow) { // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, Handle(object->map()), - miss_label, DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_label, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -859,7 +859,7 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm, __ bind(&heap_number); __ CheckMap(value_reg, masm->isolate()->factory()->heap_number_map(), - miss_restore_name, DONT_DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_restore_name, DONT_DO_SMI_CHECK); if (CpuFeatures::IsSupported(SSE2)) { CpuFeatureScope use_sse2(masm, SSE2); __ movdbl(xmm0, FieldOperand(value_reg, HeapNumber::kValueOffset)); @@ -994,7 +994,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm, Label* miss_label) { // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, Handle(object->map()), - miss_label, DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + miss_label, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -1045,7 +1045,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm, __ jmp(&do_store); __ bind(&heap_number); __ CheckMap(value_reg, masm->isolate()->factory()->heap_number_map(), - miss_label, DONT_DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_label, DONT_DO_SMI_CHECK); if (CpuFeatures::IsSupported(SSE2)) { CpuFeatureScope use_sse2(masm, SSE2); __ movdbl(xmm0, FieldOperand(value_reg, HeapNumber::kValueOffset)); @@ -1199,8 +1199,7 @@ Register StubCompiler::CheckPrototypes(Handle object, bool in_new_space = heap()->InNewSpace(*prototype); Handle current_map(current->map()); if (!current.is_identical_to(first) || check == CHECK_ALL_MAPS) { - __ CheckMap(reg, current_map, miss, DONT_DO_SMI_CHECK, - ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(reg, current_map, miss, DONT_DO_SMI_CHECK); } // Check access rights to the global object. This has to happen after @@ -1241,8 +1240,7 @@ Register StubCompiler::CheckPrototypes(Handle object, if (!holder.is_identical_to(first) || check == CHECK_ALL_MAPS) { // Check the holder map. - __ CheckMap(reg, Handle(holder->map()), - miss, DONT_DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(reg, Handle(holder->map()), miss, DONT_DO_SMI_CHECK); } // Perform security check for access to the global object. @@ -2898,8 +2896,7 @@ Handle StoreStubCompiler::CompileStoreInterceptor( Label miss; // Check that the map of the object hasn't changed. - __ CheckMap(receiver(), Handle(object->map()), - &miss, DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(receiver(), Handle(object->map()), &miss, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { diff --git a/src/objects.h b/src/objects.h index d27af57..4524a13 100644 --- a/src/objects.h +++ b/src/objects.h @@ -150,11 +150,6 @@ namespace v8 { namespace internal { -enum CompareMapMode { - REQUIRE_EXACT_MAP, - ALLOW_ELEMENT_TRANSITION_MAPS -}; - enum KeyedAccessStoreMode { STANDARD_STORE, STORE_TRANSITION_SMI_TO_OBJECT, diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index 8d43410..02a1539 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -2777,7 +2777,7 @@ void LCodeGen::DoLoadNamedFieldPolymorphic(LLoadNamedFieldPolymorphic* instr) { bool last = (i == map_count - 1); Handle map = instr->hydrogen()->types()->at(i); Label check_passed; - __ CompareMap(object, map, &check_passed, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CompareMap(object, map, &check_passed); if (last && !need_generic) { DeoptimizeIf(not_equal, instr->environment()); __ bind(&check_passed); @@ -4968,10 +4968,9 @@ void LCodeGen::DoCheckFunction(LCheckFunction* instr) { void LCodeGen::DoCheckMapCommon(Register reg, Handle map, - CompareMapMode mode, LInstruction* instr) { Label success; - __ CompareMap(reg, map, &success, mode); + __ CompareMap(reg, map, &success); DeoptimizeIf(not_equal, instr->environment()); __ bind(&success); } @@ -4986,11 +4985,11 @@ void LCodeGen::DoCheckMaps(LCheckMaps* instr) { SmallMapList* map_set = instr->hydrogen()->map_set(); for (int i = 0; i < map_set->length() - 1; i++) { Handle map = map_set->at(i); - __ CompareMap(reg, map, &success, REQUIRE_EXACT_MAP); + __ CompareMap(reg, map, &success); __ j(equal, &success); } Handle map = map_set->last(); - DoCheckMapCommon(reg, map, REQUIRE_EXACT_MAP, instr); + DoCheckMapCommon(reg, map, instr); __ bind(&success); } @@ -5059,7 +5058,7 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) { } else { for (int i = 0; i < prototypes->length(); i++) { __ LoadHeapObject(reg, prototypes->at(i)); - DoCheckMapCommon(reg, maps->at(i), ALLOW_ELEMENT_TRANSITION_MAPS, instr); + DoCheckMapCommon(reg, maps->at(i), instr); } } } diff --git a/src/x64/lithium-codegen-x64.h b/src/x64/lithium-codegen-x64.h index 5f9ae2c..c47bb71 100644 --- a/src/x64/lithium-codegen-x64.h +++ b/src/x64/lithium-codegen-x64.h @@ -134,8 +134,7 @@ class LCodeGen BASE_EMBEDDED { void DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr, Label* map_check); - void DoCheckMapCommon(Register reg, Handle map, - CompareMapMode mode, LInstruction* instr); + void DoCheckMapCommon(Register reg, Handle map, LInstruction* instr); // Parallel move support. void DoParallelMove(LParallelMove* move); diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 31796b1..3c8b4ad 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -2853,38 +2853,21 @@ void MacroAssembler::StoreNumberToDoubleElements( void MacroAssembler::CompareMap(Register obj, Handle map, - Label* early_success, - CompareMapMode mode) { + Label* early_success) { Cmp(FieldOperand(obj, HeapObject::kMapOffset), map); - if (mode == ALLOW_ELEMENT_TRANSITION_MAPS) { - ElementsKind kind = map->elements_kind(); - if (IsFastElementsKind(kind)) { - bool packed = IsFastPackedElementsKind(kind); - Map* current_map = *map; - while (CanTransitionToMoreGeneralFastElementsKind(kind, packed)) { - kind = GetNextMoreGeneralFastElementsKind(kind, packed); - current_map = current_map->LookupElementsTransitionMap(kind); - if (!current_map) break; - j(equal, early_success, Label::kNear); - Cmp(FieldOperand(obj, HeapObject::kMapOffset), - Handle(current_map)); - } - } - } } void MacroAssembler::CheckMap(Register obj, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode) { + SmiCheckType smi_check_type) { if (smi_check_type == DO_SMI_CHECK) { JumpIfSmi(obj, fail); } Label success; - CompareMap(obj, map, &success, mode); + CompareMap(obj, map, &success); j(not_equal, fail); bind(&success); } diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h index 6c8d5ff..bbbfdb0 100644 --- a/src/x64/macro-assembler-x64.h +++ b/src/x64/macro-assembler-x64.h @@ -898,8 +898,7 @@ class MacroAssembler: public Assembler { // sequences branches to early_success. void CompareMap(Register obj, Handle map, - Label* early_success, - CompareMapMode mode = REQUIRE_EXACT_MAP); + Label* early_success); // Check if the map of an object is equal to a specified map and branch to // label if not. Skip the smi check if not required (object is known to be a @@ -908,8 +907,7 @@ class MacroAssembler: public Assembler { void CheckMap(Register obj, Handle map, Label* fail, - SmiCheckType smi_check_type, - CompareMapMode mode = REQUIRE_EXACT_MAP); + SmiCheckType smi_check_type); // Check if the map of an object is equal to a specified map and branch to a // specified target if equal. Skip the smi check if not required (object is diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index f6c81b4..36fcb84 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -763,7 +763,7 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm, Label* slow) { // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, Handle(object->map()), - miss_label, DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_label, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -830,7 +830,7 @@ void StubCompiler::GenerateStoreTransition(MacroAssembler* masm, __ bind(&heap_number); __ CheckMap(value_reg, masm->isolate()->factory()->heap_number_map(), - miss_restore_name, DONT_DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_restore_name, DONT_DO_SMI_CHECK); __ movsd(xmm0, FieldOperand(value_reg, HeapNumber::kValueOffset)); __ bind(&do_store); @@ -947,7 +947,7 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm, Label* miss_label) { // Check that the map of the object hasn't changed. __ CheckMap(receiver_reg, Handle(object->map()), - miss_label, DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + miss_label, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { @@ -992,9 +992,8 @@ void StubCompiler::GenerateStoreField(MacroAssembler* masm, __ bind(&heap_number); __ CheckMap(value_reg, masm->isolate()->factory()->heap_number_map(), - miss_label, DONT_DO_SMI_CHECK, REQUIRE_EXACT_MAP); + miss_label, DONT_DO_SMI_CHECK); __ movsd(xmm0, FieldOperand(value_reg, HeapNumber::kValueOffset)); - __ bind(&do_store); __ movsd(FieldOperand(scratch1, HeapNumber::kValueOffset), xmm0); // Return the value (register rax). @@ -1134,8 +1133,7 @@ Register StubCompiler::CheckPrototypes(Handle object, __ movq(scratch1, FieldOperand(reg, HeapObject::kMapOffset)); } if (!current.is_identical_to(first) || check == CHECK_ALL_MAPS) { - __ CheckMap(reg, current_map, miss, DONT_DO_SMI_CHECK, - ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(reg, current_map, miss, DONT_DO_SMI_CHECK); } // Check access rights to the global object. This has to happen after @@ -1170,8 +1168,7 @@ Register StubCompiler::CheckPrototypes(Handle object, if (!holder.is_identical_to(first) || check == CHECK_ALL_MAPS) { // Check the holder map. - __ CheckMap(reg, Handle(holder->map()), - miss, DONT_DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(reg, Handle(holder->map()), miss, DONT_DO_SMI_CHECK); } // Perform security check for access to the global object. @@ -2674,8 +2671,7 @@ Handle StoreStubCompiler::CompileStoreInterceptor( Label miss; // Check that the map of the object hasn't changed. - __ CheckMap(receiver(), Handle(object->map()), &miss, - DO_SMI_CHECK, ALLOW_ELEMENT_TRANSITION_MAPS); + __ CheckMap(receiver(), Handle(object->map()), &miss, DO_SMI_CHECK); // Perform global security token check if needed. if (object->IsJSGlobalProxy()) { -- 2.7.4