diff options
Diffstat (limited to 'deps/v8/src/ic/accessor-assembler.h')
-rw-r--r-- | deps/v8/src/ic/accessor-assembler.h | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/deps/v8/src/ic/accessor-assembler.h b/deps/v8/src/ic/accessor-assembler.h index 40445355f3..367a9aff52 100644 --- a/deps/v8/src/ic/accessor-assembler.h +++ b/deps/v8/src/ic/accessor-assembler.h @@ -35,10 +35,12 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { void GenerateLoadSuperICBaseline(); void GenerateKeyedLoadIC(); void GenerateKeyedLoadIC_Megamorphic(); + void GenerateKeyedLoadIC_MegamorphicStringKey(); void GenerateKeyedLoadIC_PolymorphicName(); void GenerateKeyedLoadICTrampoline(); void GenerateKeyedLoadICBaseline(); void GenerateKeyedLoadICTrampoline_Megamorphic(); + void GenerateKeyedLoadICTrampoline_MegamorphicStringKey(); void GenerateStoreIC(); void GenerateStoreICTrampoline(); void GenerateStoreICBaseline(); @@ -59,6 +61,7 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { void GenerateLoadGlobalIC(TypeofMode typeof_mode); void GenerateLoadGlobalICTrampoline(TypeofMode typeof_mode); void GenerateLoadGlobalICBaseline(TypeofMode typeof_mode); + void GenerateLookupGlobalIC(TypeofMode typeof_mode); void GenerateLookupGlobalICTrampoline(TypeofMode typeof_mode); void GenerateLookupGlobalICBaseline(TypeofMode typeof_mode); void GenerateLookupContextTrampoline(TypeofMode typeof_mode); @@ -209,12 +212,13 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { StoreICParameters(TNode<Context> context, base::Optional<TNode<Object>> receiver, TNode<Object> name, TNode<Object> value, - TNode<TaggedIndex> slot, TNode<HeapObject> vector, - StoreICMode mode) + base::Optional<TNode<Smi>> flags, TNode<TaggedIndex> slot, + TNode<HeapObject> vector, StoreICMode mode) : context_(context), receiver_(receiver), name_(name), value_(value), + flags_(flags), slot_(slot), vector_(vector), mode_(mode) {} @@ -223,12 +227,14 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { TNode<Object> receiver() const { return receiver_.value(); } TNode<Object> name() const { return name_; } TNode<Object> value() const { return value_; } + TNode<Smi> flags() const { return flags_.value(); } TNode<TaggedIndex> slot() const { return slot_; } TNode<HeapObject> vector() const { return vector_; } TNode<Object> lookup_start_object() const { return receiver(); } bool receiver_is_null() const { return !receiver_.has_value(); } + bool flags_is_null() const { return !flags_.has_value(); } bool IsDefineNamedOwn() const { return mode_ == StoreICMode::kDefineNamedOwn; @@ -245,6 +251,7 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { base::Optional<TNode<Object>> receiver_; TNode<Object> name_; TNode<Object> value_; + base::Optional<TNode<Smi>> flags_; TNode<TaggedIndex> slot_; TNode<HeapObject> vector_; StoreICMode mode_; @@ -268,6 +275,10 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { Label* miss, StoreTransitionMapFlags flags); + // Updates flags on |dict| if |name| is an interesting symbol. + void UpdateMayHaveInterestingSymbol(TNode<PropertyDictionary> dict, + TNode<Name> name); + void JumpIfDataProperty(TNode<Uint32T> details, Label* writable, Label* readonly); @@ -323,6 +334,7 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { void KeyedLoadIC(const LoadICParameters* p, LoadAccessMode access_mode); void KeyedLoadICGeneric(const LoadICParameters* p); + void KeyedLoadICGeneric_StringKey(const LoadICParameters* p); void KeyedLoadICPolymorphicName(const LoadICParameters* p, LoadAccessMode access_mode); @@ -343,17 +355,20 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { LazyNode<TaggedIndex> lazy_slot, TNode<Context> context, TypeofMode typeof_mode); + void GotoIfNotSameNumberBitPattern(TNode<Float64T> left, + TNode<Float64T> right, Label* miss); + // IC dispatcher behavior. // Checks monomorphic case. Returns {feedback} entry of the vector. TNode<HeapObjectReference> TryMonomorphicCase( TNode<TaggedIndex> slot, TNode<FeedbackVector> vector, - TNode<Map> lookup_start_object_map, Label* if_handler, + TNode<HeapObjectReference> weak_lookup_start_object_map, + Label* if_handler, TVariable<MaybeObject>* var_handler, Label* if_miss); + void HandlePolymorphicCase( + TNode<HeapObjectReference> weak_lookup_start_object_map, + TNode<WeakFixedArray> feedback, Label* if_handler, TVariable<MaybeObject>* var_handler, Label* if_miss); - void HandlePolymorphicCase(TNode<Map> lookup_start_object_map, - TNode<WeakFixedArray> feedback, Label* if_handler, - TVariable<MaybeObject>* var_handler, - Label* if_miss); void TryMegaDOMCase(TNode<Object> lookup_start_object, TNode<Map> lookup_start_object_map, @@ -496,7 +511,7 @@ class V8_EXPORT_PRIVATE AccessorAssembler : public CodeStubAssembler { // Low-level helpers. - using OnCodeHandler = std::function<void(TNode<CodeT> code_handler)>; + using OnCodeHandler = std::function<void(TNode<Code> code_handler)>; using OnFoundOnLookupStartObject = std::function<void( TNode<PropertyDictionary> properties, TNode<IntPtrT> name_index)>; @@ -603,7 +618,7 @@ class ExitPoint { template <class... TArgs> void ReturnCallStub(const CallInterfaceDescriptor& descriptor, - TNode<CodeT> target, TNode<Context> context, + TNode<Code> target, TNode<Context> context, TArgs... args) { if (IsDirect()) { asm_->TailCallStub(descriptor, target, context, args...); |