From: cdai2 Date: Thu, 4 Dec 2014 04:32:42 +0000 (+0800) Subject: X87: Use weak cells to embed maps in store handler. X-Git-Tag: upstream/4.7.83~5391 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ed95aaaba4cb0b550eafc9ff3c71e477f7c2386c;p=platform%2Fupstream%2Fv8.git X87: Use weak cells to embed maps in store handler. port 3fc9c9b665baaa434c672efcbff632a2eae86f56 original commit message: Use weak cells to embed maps in store handler. BUG=v8:3629 R=weiliang.lin@intel.com Review URL: https://codereview.chromium.org/779843002 Cr-Commit-Position: refs/heads/master@{#25649} --- diff --git a/src/ic/x87/handler-compiler-x87.cc b/src/ic/x87/handler-compiler-x87.cc index 909f97ec6..b23b2354f 100644 --- a/src/ic/x87/handler-compiler-x87.cc +++ b/src/ic/x87/handler-compiler-x87.cc @@ -329,10 +329,23 @@ void NamedStoreHandlerCompiler::GenerateRestoreName(Label* label, } -void NamedStoreHandlerCompiler::GenerateRestoreNameAndMap( - Handle name, Handle transition) { +void NamedStoreHandlerCompiler::GenerateRestoreName(Handle name) { __ mov(this->name(), Immediate(name)); - __ mov(StoreTransitionDescriptor::MapRegister(), Immediate(transition)); +} + + +void NamedStoreHandlerCompiler::GenerateRestoreMap(Handle transition, + Register scratch, + Label* miss) { + Handle cell = Map::WeakCellForMap(transition); + Register map_reg = StoreTransitionDescriptor::MapRegister(); + DCHECK(!map_reg.is(scratch)); + __ LoadWeakValue(map_reg, cell, miss); + if (transition->CanBeDeprecated()) { + __ mov(scratch, FieldOperand(map_reg, Map::kBitField3Offset)); + __ and_(scratch, Immediate(Map::Deprecated::kMask)); + __ j(not_zero, miss); + } } diff --git a/src/x87/macro-assembler-x87.cc b/src/x87/macro-assembler-x87.cc index 0d23cffaf..9fa5c8efc 100644 --- a/src/x87/macro-assembler-x87.cc +++ b/src/x87/macro-assembler-x87.cc @@ -3087,18 +3087,6 @@ void MacroAssembler::CheckPageFlagForMap( } -void MacroAssembler::CheckMapDeprecated(Handle map, - Register scratch, - Label* if_deprecated) { - if (map->CanBeDeprecated()) { - mov(scratch, map); - mov(scratch, FieldOperand(scratch, Map::kBitField3Offset)); - and_(scratch, Immediate(Map::Deprecated::kMask)); - j(not_zero, if_deprecated); - } -} - - void MacroAssembler::JumpIfBlack(Register object, Register scratch0, Register scratch1, diff --git a/src/x87/macro-assembler-x87.h b/src/x87/macro-assembler-x87.h index 32f58e9f6..16a323f52 100644 --- a/src/x87/macro-assembler-x87.h +++ b/src/x87/macro-assembler-x87.h @@ -93,10 +93,6 @@ class MacroAssembler: public Assembler { Label* condition_met, Label::Distance condition_met_distance = Label::kFar); - void CheckMapDeprecated(Handle map, - Register scratch, - Label* if_deprecated); - // Check if object is in new space. Jumps if the object is not in new space. // The register scratch can be object itself, but scratch will be clobbered. void JumpIfNotInNewSpace(Register object,