| Index: src/ic/accessor-assembler.cc
|
| diff --git a/src/ic/accessor-assembler.cc b/src/ic/accessor-assembler.cc
|
| index 024fba4038ec2e876bcb297d3bed319c15c6ae09..db59ed00e585a8935df2dd5e24a78916fe95972b 100644
|
| --- a/src/ic/accessor-assembler.cc
|
| +++ b/src/ic/accessor-assembler.cc
|
| @@ -472,13 +472,13 @@
|
| miss, kOnlyProperties);
|
| }
|
|
|
| -void AccessorAssemblerImpl::HandleStoreICHandlerCase(
|
| - const StoreICParameters* p, Node* handler, Label* miss,
|
| - ElementSupport support_elements) {
|
| - Label if_smi_handler(this), if_nonsmi_handler(this);
|
| - Label if_proto_handler(this), if_element_handler(this), call_handler(this);
|
| -
|
| - Branch(TaggedIsSmi(handler), &if_smi_handler, &if_nonsmi_handler);
|
| +void AccessorAssemblerImpl::HandleStoreICHandlerCase(const StoreICParameters* p,
|
| + Node* handler,
|
| + Label* miss) {
|
| + Label if_smi_handler(this);
|
| + Label try_proto_handler(this), call_handler(this);
|
| +
|
| + Branch(TaggedIsSmi(handler), &if_smi_handler, &try_proto_handler);
|
|
|
| // |handler| is a Smi, encoding what to do. See SmiHandler methods
|
| // for the encoding format.
|
| @@ -491,22 +491,9 @@
|
| HandleStoreICSmiHandlerCase(handler_word, holder, p->value, nullptr, miss);
|
| }
|
|
|
| - Bind(&if_nonsmi_handler);
|
| - {
|
| - Node* handler_map = LoadMap(handler);
|
| - if (support_elements == kSupportElements) {
|
| - GotoIf(IsTuple2Map(handler_map), &if_element_handler);
|
| - }
|
| - Branch(IsCodeMap(handler_map), &call_handler, &if_proto_handler);
|
| - }
|
| -
|
| - if (support_elements == kSupportElements) {
|
| - Bind(&if_element_handler);
|
| - { HandleStoreICElementHandlerCase(p, handler, miss); }
|
| - }
|
| -
|
| - Bind(&if_proto_handler);
|
| - {
|
| + Bind(&try_proto_handler);
|
| + {
|
| + GotoIf(IsCodeMap(LoadMap(handler)), &call_handler);
|
| HandleStoreICProtoHandler(p, handler, miss);
|
| }
|
|
|
| @@ -517,23 +504,6 @@
|
| TailCallStub(descriptor, handler, p->context, p->receiver, p->name,
|
| p->value, p->slot, p->vector);
|
| }
|
| -}
|
| -
|
| -void AccessorAssemblerImpl::HandleStoreICElementHandlerCase(
|
| - const StoreICParameters* p, Node* handler, Label* miss) {
|
| - Comment("HandleStoreICElementHandlerCase");
|
| - Node* validity_cell = LoadObjectField(handler, Tuple2::kValue1Offset);
|
| - Node* cell_value = LoadObjectField(validity_cell, Cell::kValueOffset);
|
| - GotoIf(WordNotEqual(cell_value,
|
| - SmiConstant(Smi::FromInt(Map::kPrototypeChainValid))),
|
| - miss);
|
| -
|
| - Node* code_handler = LoadObjectField(handler, Tuple2::kValue2Offset);
|
| - CSA_ASSERT(this, IsCodeMap(LoadMap(code_handler)));
|
| -
|
| - StoreWithVectorDescriptor descriptor(isolate());
|
| - TailCallStub(descriptor, code_handler, p->context, p->receiver, p->name,
|
| - p->value, p->slot, p->vector);
|
| }
|
|
|
| void AccessorAssemblerImpl::HandleStoreICProtoHandler(
|
| @@ -1536,7 +1506,7 @@
|
| Bind(&if_handler);
|
| {
|
| Comment("KeyedStoreIC_if_handler");
|
| - HandleStoreICHandlerCase(p, var_handler.value(), &miss, kSupportElements);
|
| + HandleStoreICHandlerCase(p, var_handler.value(), &miss);
|
| }
|
|
|
| Bind(&try_polymorphic);
|
| @@ -1553,26 +1523,11 @@
|
| &var_transition_map_cell, &miss);
|
| Bind(&if_transition_handler);
|
| Comment("KeyedStoreIC_polymorphic_transition");
|
| - {
|
| - Node* handler = var_handler.value();
|
| - CSA_ASSERT(this, IsTuple2Map(LoadMap(handler)));
|
| -
|
| - // Check validity cell.
|
| - Node* validity_cell = LoadObjectField(handler, Tuple2::kValue1Offset);
|
| - Node* cell_value = LoadObjectField(validity_cell, Cell::kValueOffset);
|
| - GotoIf(WordNotEqual(cell_value,
|
| - SmiConstant(Smi::FromInt(Map::kPrototypeChainValid))),
|
| - &miss);
|
| -
|
| - Node* code_handler = LoadObjectField(handler, Tuple2::kValue2Offset);
|
| - CSA_ASSERT(this, IsCodeMap(LoadMap(code_handler)));
|
| -
|
| - Node* transition_map =
|
| - LoadWeakCellValue(var_transition_map_cell.value(), &miss);
|
| - StoreTransitionDescriptor descriptor(isolate());
|
| - TailCallStub(descriptor, code_handler, p->context, p->receiver, p->name,
|
| - transition_map, p->value, p->slot, p->vector);
|
| - }
|
| + Node* transition_map =
|
| + LoadWeakCellValue(var_transition_map_cell.value(), &miss);
|
| + StoreTransitionDescriptor descriptor(isolate());
|
| + TailCallStub(descriptor, var_handler.value(), p->context, p->receiver,
|
| + p->name, transition_map, p->value, p->slot, p->vector);
|
| }
|
|
|
| Bind(&try_megamorphic);
|
|
|