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 |