| Index: src/ic/accessor-assembler.h
|
| diff --git a/src/ic/accessor-assembler.h b/src/ic/accessor-assembler.h
|
| index e7505f7d3c6a87050f351e1299c83d1f2e1b22eb..81d5a3ca4fa747c80740f42a6550f4ada7efe758 100644
|
| --- a/src/ic/accessor-assembler.h
|
| +++ b/src/ic/accessor-assembler.h
|
| @@ -24,6 +24,7 @@ class AccessorAssembler : public CodeStubAssembler {
|
| : CodeStubAssembler(state) {}
|
|
|
| void GenerateLoadIC();
|
| + void GenerateLoadIC_Noninlined();
|
| void GenerateLoadIC_Uninitialized();
|
| void GenerateLoadField();
|
| void GenerateLoadICTrampoline();
|
| @@ -76,6 +77,22 @@ class AccessorAssembler : public CodeStubAssembler {
|
| ExitPoint* exit_point, Label* miss);
|
| void LoadGlobalIC_MissCase(const LoadICParameters* p, ExitPoint* exit_point);
|
|
|
| + // Checks monomorphic case. There are two variants: the first returns a
|
| + // ({feedback}, {handler}) pair and falls through on success, while the second
|
| + // stores {handler} in the given variable and jumps to {if_handler} on
|
| + // success.
|
| + std::pair<Node*, Node*> TryMonomorphicCase(Node* slot, Node* vector,
|
| + Node* receiver_map,
|
| + Label* if_miss);
|
| + Node* TryMonomorphicCase(Node* slot, Node* vector, Node* receiver_map,
|
| + Label* if_handler, Variable* var_handler,
|
| + Label* if_miss);
|
| +
|
| + enum ElementSupport { kOnlyProperties, kSupportElements };
|
| + void HandleLoadICHandlerCase(
|
| + const LoadICParameters* p, Node* handler, Label* miss,
|
| + ExitPoint* exit_point, ElementSupport support_elements = kOnlyProperties);
|
| +
|
| protected:
|
| struct StoreICParameters : public LoadICParameters {
|
| StoreICParameters(Node* context, Node* receiver, Node* name, Node* value,
|
| @@ -85,7 +102,6 @@ class AccessorAssembler : public CodeStubAssembler {
|
| Node* value;
|
| };
|
|
|
| - enum ElementSupport { kOnlyProperties, kSupportElements };
|
| void HandleStoreICHandlerCase(
|
| const StoreICParameters* p, Node* handler, Label* miss,
|
| ElementSupport support_elements = kOnlyProperties);
|
| @@ -94,7 +110,13 @@ class AccessorAssembler : public CodeStubAssembler {
|
| private:
|
| // Stub generation entry points.
|
|
|
| + // LoadIC contains the full LoadIC logic, while LoadIC_Noninlined contains
|
| + // logic not inlined into Ignition bytecode handlers.
|
| void LoadIC(const LoadICParameters* p);
|
| + void LoadIC_Noninlined(const LoadICParameters* p, Node* receiver_map,
|
| + Node* feedback, Variable* var_handler,
|
| + Label* if_handler, Label* miss, ExitPoint* exit_point);
|
| +
|
| void LoadIC_Uninitialized(const LoadICParameters* p);
|
| void LoadICProtoArray(const LoadICParameters* p, Node* handler,
|
| bool throw_reference_error_if_nonexistent);
|
| @@ -105,11 +127,6 @@ class AccessorAssembler : public CodeStubAssembler {
|
| 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);
|
| @@ -121,10 +138,6 @@ class AccessorAssembler : public CodeStubAssembler {
|
|
|
| // 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,
|
| ExitPoint* exit_point,
|
| @@ -186,6 +199,8 @@ class AccessorAssembler : public CodeStubAssembler {
|
| Representation representation, Node* transition,
|
| Node* value, Label* bailout);
|
|
|
| + Node* LoadFeedbackSlot(Node* vector, Node* slot, int additional_offset);
|
| +
|
| // Extends properties backing store by JSObject::kFieldsAdded elements.
|
| void ExtendPropertiesBackingStore(Node* object);
|
|
|
|
|