| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/ic/accessor-assembler.h" | 5 #include "src/ic/accessor-assembler.h" |
| 6 #include "src/ic/accessor-assembler-impl.h" | 6 #include "src/ic/accessor-assembler-impl.h" |
| 7 | 7 |
| 8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/ic/handler-configuration.h" | 10 #include "src/ic/handler-configuration.h" |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 Bind(&try_proto_handler); | 162 Bind(&try_proto_handler); |
| 163 { | 163 { |
| 164 GotoIf(IsCodeMap(LoadMap(handler)), &call_handler); | 164 GotoIf(IsCodeMap(LoadMap(handler)), &call_handler); |
| 165 HandleLoadICProtoHandlerCase(p, handler, &var_holder, &var_smi_handler, | 165 HandleLoadICProtoHandlerCase(p, handler, &var_holder, &var_smi_handler, |
| 166 &if_smi_handler, miss, false); | 166 &if_smi_handler, miss, false); |
| 167 } | 167 } |
| 168 | 168 |
| 169 Bind(&call_handler); | 169 Bind(&call_handler); |
| 170 { | 170 { |
| 171 typedef LoadWithVectorDescriptor Descriptor; | 171 typedef LoadWithVectorDescriptor Descriptor; |
| 172 TailCallStub(Descriptor(isolate()), handler, p->context, | 172 TailCallStub(Descriptor(isolate()), handler, p->context, p->receiver, |
| 173 Arg(Descriptor::kReceiver, p->receiver), | 173 p->name, p->slot, p->vector); |
| 174 Arg(Descriptor::kName, p->name), | |
| 175 Arg(Descriptor::kSlot, p->slot), | |
| 176 Arg(Descriptor::kVector, p->vector)); | |
| 177 } | 174 } |
| 178 } | 175 } |
| 179 | 176 |
| 180 void AccessorAssemblerImpl::HandleLoadICSmiHandlerCase( | 177 void AccessorAssemblerImpl::HandleLoadICSmiHandlerCase( |
| 181 const LoadICParameters* p, Node* holder, Node* smi_handler, Label* miss, | 178 const LoadICParameters* p, Node* holder, Node* smi_handler, Label* miss, |
| 182 ElementSupport support_elements) { | 179 ElementSupport support_elements) { |
| 183 Variable var_double_value(this, MachineRepresentation::kFloat64); | 180 Variable var_double_value(this, MachineRepresentation::kFloat64); |
| 184 Label rebox_double(this, &var_double_value); | 181 Label rebox_double(this, &var_double_value); |
| 185 | 182 |
| 186 Node* handler_word = SmiUntag(smi_handler); | 183 Node* handler_word = SmiUntag(smi_handler); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 var_holder->Bind(holder); | 366 var_holder->Bind(holder); |
| 370 var_smi_handler->Bind(smi_handler); | 367 var_smi_handler->Bind(smi_handler); |
| 371 Goto(if_smi_handler); | 368 Goto(if_smi_handler); |
| 372 } | 369 } |
| 373 | 370 |
| 374 Bind(&array_handler); | 371 Bind(&array_handler); |
| 375 { | 372 { |
| 376 typedef LoadICProtoArrayDescriptor Descriptor; | 373 typedef LoadICProtoArrayDescriptor Descriptor; |
| 377 LoadICProtoArrayStub stub(isolate(), throw_reference_error_if_nonexistent); | 374 LoadICProtoArrayStub stub(isolate(), throw_reference_error_if_nonexistent); |
| 378 Node* target = HeapConstant(stub.GetCode()); | 375 Node* target = HeapConstant(stub.GetCode()); |
| 379 TailCallStub(Descriptor(isolate()), target, p->context, | 376 TailCallStub(Descriptor(isolate()), target, p->context, p->receiver, |
| 380 Arg(Descriptor::kReceiver, p->receiver), | 377 p->name, p->slot, p->vector, handler); |
| 381 Arg(Descriptor::kName, p->name), | |
| 382 Arg(Descriptor::kSlot, p->slot), | |
| 383 Arg(Descriptor::kVector, p->vector), | |
| 384 Arg(Descriptor::kHandler, handler)); | |
| 385 } | 378 } |
| 386 } | 379 } |
| 387 | 380 |
| 388 Node* AccessorAssemblerImpl::EmitLoadICProtoArrayCheck( | 381 Node* AccessorAssemblerImpl::EmitLoadICProtoArrayCheck( |
| 389 const LoadICParameters* p, Node* handler, Node* handler_length, | 382 const LoadICParameters* p, Node* handler, Node* handler_length, |
| 390 Node* handler_flags, Label* miss, | 383 Node* handler_flags, Label* miss, |
| 391 bool throw_reference_error_if_nonexistent) { | 384 bool throw_reference_error_if_nonexistent) { |
| 392 Variable start_index(this, MachineType::PointerRepresentation()); | 385 Variable start_index(this, MachineType::PointerRepresentation()); |
| 393 start_index.Bind(IntPtrConstant(LoadHandler::kFirstPrototypeIndex)); | 386 start_index.Bind(IntPtrConstant(LoadHandler::kFirstPrototypeIndex)); |
| 394 | 387 |
| (...skipping 1430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1825 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( | 1818 void AccessorAssembler::GenerateKeyedStoreICTrampolineTF( |
| 1826 CodeAssemblerState* state, LanguageMode language_mode) { | 1819 CodeAssemblerState* state, LanguageMode language_mode) { |
| 1827 AccessorAssemblerImpl assembler(state); | 1820 AccessorAssemblerImpl assembler(state); |
| 1828 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); | 1821 assembler.GenerateKeyedStoreICTrampolineTF(language_mode); |
| 1829 } | 1822 } |
| 1830 | 1823 |
| 1831 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE | 1824 #undef ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE |
| 1832 | 1825 |
| 1833 } // namespace internal | 1826 } // namespace internal |
| 1834 } // namespace v8 | 1827 } // namespace v8 |
| OLD | NEW |