| Index: src/ic/accessor-assembler-impl.h
|
| diff --git a/src/ic/accessor-assembler-impl.h b/src/ic/accessor-assembler-impl.h
|
| deleted file mode 100644
|
| index 1699b5c855291db2840e7792b69138d2ac04a723..0000000000000000000000000000000000000000
|
| --- a/src/ic/accessor-assembler-impl.h
|
| +++ /dev/null
|
| @@ -1,203 +0,0 @@
|
| -// Copyright 2016 the V8 project authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
|
| -#define V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
|
| -
|
| -#include "src/code-stub-assembler.h"
|
| -
|
| -namespace v8 {
|
| -namespace internal {
|
| -
|
| -namespace compiler {
|
| -class CodeAssemblerState;
|
| -}
|
| -
|
| -using compiler::Node;
|
| -
|
| -#define ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(V) \
|
| - V(LoadIC) \
|
| - V(LoadField) \
|
| - V(LoadICTrampoline) \
|
| - V(KeyedLoadICTF) \
|
| - V(KeyedLoadICTrampolineTF) \
|
| - V(KeyedLoadICMegamorphic) \
|
| - V(StoreIC) \
|
| - V(StoreICTrampoline)
|
| -// The other IC entry points need custom handling because of additional
|
| -// parameters like "typeof_mode" or "language_mode".
|
| -
|
| -class AccessorAssemblerImpl : public CodeStubAssembler {
|
| - public:
|
| - explicit AccessorAssemblerImpl(compiler::CodeAssemblerState* state)
|
| - : CodeStubAssembler(state) {}
|
| -
|
| -#define DECLARE_PUBLIC_METHOD(Name) void Generate##Name();
|
| -
|
| - ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(DECLARE_PUBLIC_METHOD)
|
| -#undef DECLARE_PUBLIC_METHOD
|
| -
|
| - void GenerateLoadICProtoArray(bool throw_reference_error_if_nonexistent);
|
| -
|
| - void GenerateLoadGlobalIC(TypeofMode typeof_mode);
|
| - void GenerateLoadGlobalICTrampoline(TypeofMode typeof_mode);
|
| -
|
| - void GenerateKeyedStoreICTF(LanguageMode language_mode);
|
| - void GenerateKeyedStoreICTrampolineTF(LanguageMode language_mode);
|
| -
|
| - void TryProbeStubCache(StubCache* stub_cache, Node* receiver, Node* name,
|
| - Label* if_handler, Variable* var_handler,
|
| - Label* if_miss);
|
| -
|
| - Node* StubCachePrimaryOffsetForTesting(Node* name, Node* map) {
|
| - return StubCachePrimaryOffset(name, map);
|
| - }
|
| - Node* StubCacheSecondaryOffsetForTesting(Node* name, Node* map) {
|
| - return StubCacheSecondaryOffset(name, map);
|
| - }
|
| -
|
| - protected:
|
| - struct LoadICParameters {
|
| - LoadICParameters(Node* context, Node* receiver, Node* name, Node* slot,
|
| - Node* vector)
|
| - : context(context),
|
| - receiver(receiver),
|
| - name(name),
|
| - slot(slot),
|
| - vector(vector) {}
|
| -
|
| - Node* context;
|
| - Node* receiver;
|
| - Node* name;
|
| - Node* slot;
|
| - Node* vector;
|
| - };
|
| -
|
| - struct StoreICParameters : public LoadICParameters {
|
| - StoreICParameters(Node* context, Node* receiver, Node* name, Node* value,
|
| - Node* slot, Node* vector)
|
| - : LoadICParameters(context, receiver, name, slot, vector),
|
| - value(value) {}
|
| - Node* value;
|
| - };
|
| -
|
| - enum ElementSupport { kOnlyProperties, kSupportElements };
|
| - void HandleStoreICHandlerCase(
|
| - const StoreICParameters* p, Node* handler, Label* miss,
|
| - ElementSupport support_elements = kOnlyProperties);
|
| -
|
| - private:
|
| - // Stub generation entry points.
|
| -
|
| - void LoadIC(const LoadICParameters* p);
|
| - void LoadICProtoArray(const LoadICParameters* p, Node* handler,
|
| - bool throw_reference_error_if_nonexistent);
|
| - void LoadGlobalIC(const LoadICParameters* p, TypeofMode typeof_mode);
|
| - void KeyedLoadIC(const LoadICParameters* p);
|
| - void KeyedLoadICGeneric(const LoadICParameters* p);
|
| - void StoreIC(const StoreICParameters* p);
|
| - void KeyedStoreIC(const StoreICParameters* p, LanguageMode language_mode);
|
| -
|
| - // IC dispatcher behavior.
|
| -
|
| - // Checks monomorphic case. Returns {feedback} entry of the vector.
|
| - Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map,
|
| - Label* if_handler, Variable* var_handler,
|
| - Label* if_miss);
|
| - void HandlePolymorphicCase(Node* receiver_map, Node* feedback,
|
| - Label* if_handler, Variable* var_handler,
|
| - Label* if_miss, int unroll_count);
|
| - void HandleKeyedStorePolymorphicCase(Node* receiver_map, Node* feedback,
|
| - Label* if_handler, Variable* var_handler,
|
| - Label* if_transition_handler,
|
| - Variable* var_transition_map_cell,
|
| - Label* if_miss);
|
| -
|
| - // LoadIC implementation.
|
| -
|
| - void HandleLoadICHandlerCase(
|
| - const LoadICParameters* p, Node* handler, Label* miss,
|
| - ElementSupport support_elements = kOnlyProperties);
|
| -
|
| - void HandleLoadICSmiHandlerCase(const LoadICParameters* p, Node* holder,
|
| - Node* smi_handler, Label* miss,
|
| - ElementSupport support_elements);
|
| -
|
| - void HandleLoadICProtoHandlerCase(const LoadICParameters* p, Node* handler,
|
| - Variable* var_holder,
|
| - Variable* var_smi_handler,
|
| - Label* if_smi_handler, Label* miss,
|
| - bool throw_reference_error_if_nonexistent);
|
| -
|
| - Node* EmitLoadICProtoArrayCheck(const LoadICParameters* p, Node* handler,
|
| - Node* handler_length, Node* handler_flags,
|
| - Label* miss,
|
| - bool throw_reference_error_if_nonexistent);
|
| -
|
| - // LoadGlobalIC implementation.
|
| -
|
| - void HandleLoadGlobalICHandlerCase(const LoadICParameters* p, Node* handler,
|
| - Label* miss,
|
| - bool throw_reference_error_if_nonexistent);
|
| -
|
| - // StoreIC implementation.
|
| -
|
| - void HandleStoreICElementHandlerCase(const StoreICParameters* p,
|
| - Node* handler, Label* miss);
|
| -
|
| - void HandleStoreICProtoHandler(const StoreICParameters* p, Node* handler,
|
| - Label* miss);
|
| - // If |transition| is nullptr then the normal field store is generated or
|
| - // transitioning store otherwise.
|
| - void HandleStoreICSmiHandlerCase(Node* handler_word, Node* holder,
|
| - Node* value, Node* transition, Label* miss);
|
| - // If |transition| is nullptr then the normal field store is generated or
|
| - // transitioning store otherwise.
|
| - void HandleStoreFieldAndReturn(Node* handler_word, Node* holder,
|
| - Representation representation, Node* value,
|
| - Node* transition, Label* miss);
|
| -
|
| - // Low-level helpers.
|
| -
|
| - Node* PrepareValueForStore(Node* handler_word, Node* holder,
|
| - Representation representation, Node* transition,
|
| - Node* value, Label* bailout);
|
| -
|
| - // Extends properties backing store by JSObject::kFieldsAdded elements.
|
| - void ExtendPropertiesBackingStore(Node* object);
|
| -
|
| - void StoreNamedField(Node* handler_word, Node* object, bool is_inobject,
|
| - Representation representation, Node* value,
|
| - bool transition_to_field);
|
| -
|
| - void EmitFastElementsBoundsCheck(Node* object, Node* elements,
|
| - Node* intptr_index,
|
| - Node* is_jsarray_condition, Label* miss);
|
| - void EmitElementLoad(Node* object, Node* elements, Node* elements_kind,
|
| - Node* key, Node* is_jsarray_condition, Label* if_hole,
|
| - Label* rebox_double, Variable* var_double_value,
|
| - Label* unimplemented_elements_kind, Label* out_of_bounds,
|
| - Label* miss);
|
| - void CheckPrototype(Node* prototype_cell, Node* name, Label* miss);
|
| - void NameDictionaryNegativeLookup(Node* object, Node* name, Label* miss);
|
| -
|
| - // Stub cache access helpers.
|
| -
|
| - // This enum is used here as a replacement for StubCache::Table to avoid
|
| - // including stub cache header.
|
| - enum StubCacheTable : int;
|
| -
|
| - Node* StubCachePrimaryOffset(Node* name, Node* map);
|
| - Node* StubCacheSecondaryOffset(Node* name, Node* seed);
|
| -
|
| - void TryProbeStubCacheTable(StubCache* stub_cache, StubCacheTable table_id,
|
| - Node* entry_offset, Node* name, Node* map,
|
| - Label* if_handler, Variable* var_handler,
|
| - Label* if_miss);
|
| -};
|
| -
|
| -} // namespace internal
|
| -} // namespace v8
|
| -
|
| -#endif // V8_SRC_IC_ACCESSOR_ASSEMBLER_IMPL_H_
|
|
|