OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/cpu-profiler.h" | 9 #include "src/cpu-profiler.h" |
10 #include "src/factory.h" | 10 #include "src/factory.h" |
11 #include "src/gdb-jit.h" | 11 #include "src/gdb-jit.h" |
12 #include "src/ic/handler-compiler.h" | 12 #include "src/ic/handler-compiler.h" |
13 #include "src/macro-assembler.h" | 13 #include "src/macro-assembler.h" |
14 | 14 |
15 namespace v8 { | 15 namespace v8 { |
16 namespace internal { | 16 namespace internal { |
17 | 17 |
18 | 18 |
19 CodeStubInterfaceDescriptor::CodeStubInterfaceDescriptor(CodeStub* stub) | 19 CodeStubDescriptor::CodeStubDescriptor(CodeStub* stub) |
20 : stack_parameter_count_(no_reg), | 20 : call_descriptor_(stub->GetCallInterfaceDescriptor()), |
| 21 stack_parameter_count_(no_reg), |
21 hint_stack_parameter_count_(-1), | 22 hint_stack_parameter_count_(-1), |
22 function_mode_(NOT_JS_FUNCTION_STUB_MODE), | 23 function_mode_(NOT_JS_FUNCTION_STUB_MODE), |
23 deoptimization_handler_(NULL), | 24 deoptimization_handler_(NULL), |
24 handler_arguments_mode_(DONT_PASS_ARGUMENTS), | 25 handler_arguments_mode_(DONT_PASS_ARGUMENTS), |
25 miss_handler_(), | 26 miss_handler_(), |
26 has_miss_handler_(false) { | 27 has_miss_handler_(false) { |
27 stub->InitializeInterfaceDescriptor(this); | 28 stub->InitializeDescriptor(this); |
28 } | 29 } |
29 | 30 |
30 | 31 |
31 CodeStubInterfaceDescriptor::CodeStubInterfaceDescriptor(Isolate* isolate, | 32 CodeStubDescriptor::CodeStubDescriptor(Isolate* isolate, uint32_t stub_key) |
32 uint32_t stub_key) | |
33 : stack_parameter_count_(no_reg), | 33 : stack_parameter_count_(no_reg), |
34 hint_stack_parameter_count_(-1), | 34 hint_stack_parameter_count_(-1), |
35 function_mode_(NOT_JS_FUNCTION_STUB_MODE), | 35 function_mode_(NOT_JS_FUNCTION_STUB_MODE), |
36 deoptimization_handler_(NULL), | 36 deoptimization_handler_(NULL), |
37 handler_arguments_mode_(DONT_PASS_ARGUMENTS), | 37 handler_arguments_mode_(DONT_PASS_ARGUMENTS), |
38 miss_handler_(), | 38 miss_handler_(), |
39 has_miss_handler_(false) { | 39 has_miss_handler_(false) { |
40 CodeStub::InitializeInterfaceDescriptor(isolate, stub_key, this); | 40 CodeStub::InitializeDescriptor(isolate, stub_key, this); |
41 } | 41 } |
42 | 42 |
43 | 43 |
44 void CodeStubInterfaceDescriptor::Initialize( | 44 void CodeStubDescriptor::Initialize(Address deoptimization_handler, |
45 CodeStub::Major major, CallInterfaceDescriptor call_descriptor, | 45 int hint_stack_parameter_count, |
46 Address deoptimization_handler, int hint_stack_parameter_count, | 46 StubFunctionMode function_mode) { |
47 StubFunctionMode function_mode) { | |
48 call_descriptor_ = call_descriptor; | |
49 deoptimization_handler_ = deoptimization_handler; | 47 deoptimization_handler_ = deoptimization_handler; |
50 hint_stack_parameter_count_ = hint_stack_parameter_count; | 48 hint_stack_parameter_count_ = hint_stack_parameter_count; |
51 function_mode_ = function_mode; | 49 function_mode_ = function_mode; |
52 major_ = major; | |
53 } | 50 } |
54 | 51 |
55 | 52 |
56 void CodeStubInterfaceDescriptor::Initialize( | 53 void CodeStubDescriptor::Initialize(Register stack_parameter_count, |
57 CodeStub::Major major, CallInterfaceDescriptor call_descriptor, | 54 Address deoptimization_handler, |
58 Register stack_parameter_count, Address deoptimization_handler, | 55 int hint_stack_parameter_count, |
59 int hint_stack_parameter_count, StubFunctionMode function_mode, | 56 StubFunctionMode function_mode, |
60 HandlerArgumentsMode handler_mode) { | 57 HandlerArgumentsMode handler_mode) { |
61 Initialize(major, call_descriptor, deoptimization_handler, | 58 Initialize(deoptimization_handler, hint_stack_parameter_count, function_mode); |
62 hint_stack_parameter_count, function_mode); | |
63 stack_parameter_count_ = stack_parameter_count; | 59 stack_parameter_count_ = stack_parameter_count; |
64 handler_arguments_mode_ = handler_mode; | 60 handler_arguments_mode_ = handler_mode; |
65 } | 61 } |
66 | 62 |
67 | 63 |
68 bool CodeStub::FindCodeInCache(Code** code_out) { | 64 bool CodeStub::FindCodeInCache(Code** code_out) { |
69 UnseededNumberDictionary* stubs = isolate()->heap()->code_stubs(); | 65 UnseededNumberDictionary* stubs = isolate()->heap()->code_stubs(); |
70 int index = stubs->FindEntry(GetKey()); | 66 int index = stubs->FindEntry(GetKey()); |
71 if (index != UnseededNumberDictionary::kNotFound) { | 67 if (index != UnseededNumberDictionary::kNotFound) { |
72 *code_out = Code::cast(stubs->ValueAt(index)); | 68 *code_out = Code::cast(stubs->ValueAt(index)); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 #undef DEF_CASE | 223 #undef DEF_CASE |
228 case NUMBER_OF_IDS: | 224 case NUMBER_OF_IDS: |
229 UNREACHABLE(); | 225 UNREACHABLE(); |
230 case NoCache: | 226 case NoCache: |
231 *value_out = NULL; | 227 *value_out = NULL; |
232 break; | 228 break; |
233 } | 229 } |
234 } | 230 } |
235 | 231 |
236 | 232 |
237 static void GetInterfaceDescriptorDispatchedCall(CodeStub* stub, | 233 static void InitializeDescriptorDispatchedCall(CodeStub* stub, |
238 void** value_out) { | 234 void** value_out) { |
239 CodeStubInterfaceDescriptor* descriptor_out = | 235 CodeStubDescriptor* descriptor_out = |
240 reinterpret_cast<CodeStubInterfaceDescriptor*>(value_out); | 236 reinterpret_cast<CodeStubDescriptor*>(value_out); |
241 stub->InitializeInterfaceDescriptor(descriptor_out); | 237 stub->InitializeDescriptor(descriptor_out); |
| 238 descriptor_out->set_call_descriptor(stub->GetCallInterfaceDescriptor()); |
242 } | 239 } |
243 | 240 |
244 | 241 |
245 void CodeStub::InitializeInterfaceDescriptor( | 242 void CodeStub::InitializeDescriptor(Isolate* isolate, uint32_t key, |
246 Isolate* isolate, uint32_t key, CodeStubInterfaceDescriptor* desc) { | 243 CodeStubDescriptor* desc) { |
247 void** value_out = reinterpret_cast<void**>(desc); | 244 void** value_out = reinterpret_cast<void**>(desc); |
248 Dispatch(isolate, key, value_out, &GetInterfaceDescriptorDispatchedCall); | 245 Dispatch(isolate, key, value_out, &InitializeDescriptorDispatchedCall); |
249 } | 246 } |
250 | 247 |
251 | 248 |
252 // static | 249 // static |
253 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate) { | 250 void BinaryOpICStub::GenerateAheadOfTime(Isolate* isolate) { |
254 // Generate the uninitialized versions of the stub. | 251 // Generate the uninitialized versions of the stub. |
255 for (int op = Token::BIT_OR; op <= Token::MOD; ++op) { | 252 for (int op = Token::BIT_OR; op <= Token::MOD; ++op) { |
256 for (int mode = NO_OVERWRITE; mode <= OVERWRITE_RIGHT; ++mode) { | 253 for (int mode = NO_OVERWRITE; mode <= OVERWRITE_RIGHT; ++mode) { |
257 BinaryOpICStub stub(isolate, | 254 BinaryOpICStub stub(isolate, |
258 static_cast<Token::Value>(op), | 255 static_cast<Token::Value>(op), |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 | 537 |
541 | 538 |
542 void JSEntryStub::FinishCode(Handle<Code> code) { | 539 void JSEntryStub::FinishCode(Handle<Code> code) { |
543 Handle<FixedArray> handler_table = | 540 Handle<FixedArray> handler_table = |
544 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); | 541 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); |
545 handler_table->set(0, Smi::FromInt(handler_offset_)); | 542 handler_table->set(0, Smi::FromInt(handler_offset_)); |
546 code->set_handler_table(*handler_table); | 543 code->set_handler_table(*handler_table); |
547 } | 544 } |
548 | 545 |
549 | 546 |
550 void LoadFastElementStub::InitializeInterfaceDescriptor( | 547 void LoadFastElementStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
551 CodeStubInterfaceDescriptor* descriptor) { | 548 descriptor->Initialize(FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); |
552 LoadDescriptor call_descriptor(isolate()); | |
553 descriptor->Initialize(MajorKey(), call_descriptor, | |
554 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); | |
555 } | 549 } |
556 | 550 |
557 | 551 |
558 void LoadDictionaryElementStub::InitializeInterfaceDescriptor( | 552 void LoadDictionaryElementStub::InitializeDescriptor( |
559 CodeStubInterfaceDescriptor* descriptor) { | 553 CodeStubDescriptor* descriptor) { |
560 LoadDescriptor call_descriptor(isolate()); | 554 descriptor->Initialize(FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); |
561 descriptor->Initialize(MajorKey(), call_descriptor, | |
562 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); | |
563 } | 555 } |
564 | 556 |
565 | 557 |
566 void KeyedLoadGenericStub::InitializeInterfaceDescriptor( | 558 void KeyedLoadGenericStub::InitializeDescriptor( |
567 CodeStubInterfaceDescriptor* descriptor) { | 559 CodeStubDescriptor* descriptor) { |
568 LoadDescriptor call_descriptor(isolate()); | |
569 descriptor->Initialize( | 560 descriptor->Initialize( |
570 MajorKey(), call_descriptor, | |
571 Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry); | 561 Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry); |
572 } | 562 } |
573 | 563 |
574 | 564 |
575 void HandlerStub::InitializeInterfaceDescriptor( | 565 void HandlerStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
576 CodeStubInterfaceDescriptor* descriptor) { | 566 if (kind() == Code::STORE_IC) { |
577 if (kind() == Code::LOAD_IC) { | 567 descriptor->Initialize(FUNCTION_ADDR(StoreIC_MissFromStubFailure)); |
578 LoadDescriptor call_descriptor(isolate()); | |
579 descriptor->Initialize(MajorKey(), call_descriptor); | |
580 } else { | |
581 DCHECK_EQ(Code::STORE_IC, kind()); | |
582 StoreDescriptor call_descriptor(isolate()); | |
583 descriptor->Initialize(MajorKey(), call_descriptor, | |
584 FUNCTION_ADDR(StoreIC_MissFromStubFailure)); | |
585 } | 568 } |
586 } | 569 } |
587 | 570 |
588 | 571 |
589 void StoreFastElementStub::InitializeInterfaceDescriptor( | 572 CallInterfaceDescriptor HandlerStub::GetCallInterfaceDescriptor() { |
590 CodeStubInterfaceDescriptor* descriptor) { | 573 if (kind() == Code::LOAD_IC) { |
591 StoreDescriptor call_descriptor(isolate()); | 574 return LoadDescriptor(isolate()); |
592 descriptor->Initialize(MajorKey(), call_descriptor, | 575 } else { |
593 FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); | 576 DCHECK_EQ(Code::STORE_IC, kind()); |
| 577 return StoreDescriptor(isolate()); |
| 578 } |
594 } | 579 } |
595 | 580 |
596 | 581 |
597 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( | 582 void StoreFastElementStub::InitializeDescriptor( |
598 CodeStubInterfaceDescriptor* descriptor) { | 583 CodeStubDescriptor* descriptor) { |
599 ElementTransitionAndStoreDescriptor call_descriptor(isolate()); | 584 descriptor->Initialize(FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); |
600 descriptor->Initialize(MajorKey(), call_descriptor, | |
601 FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); | |
602 } | 585 } |
603 | 586 |
604 | 587 |
605 void InstanceofStub::InitializeInterfaceDescriptor( | 588 void ElementsTransitionAndStoreStub::InitializeDescriptor( |
606 CodeStubInterfaceDescriptor* descriptor) { | 589 CodeStubDescriptor* descriptor) { |
607 InstanceofDescriptor call_descriptor(isolate()); | 590 descriptor->Initialize(FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); |
608 descriptor->Initialize(MajorKey(), call_descriptor); | |
609 } | 591 } |
610 | 592 |
611 | 593 |
612 static void InitializeVectorLoadStub(Isolate* isolate, | 594 static void InitializeVectorLoadStub(Isolate* isolate, |
613 CodeStubInterfaceDescriptor* descriptor, | 595 CodeStubDescriptor* descriptor, |
614 CodeStub::Major major, | |
615 Address deoptimization_handler) { | 596 Address deoptimization_handler) { |
616 DCHECK(FLAG_vector_ics); | 597 DCHECK(FLAG_vector_ics); |
617 VectorLoadICDescriptor call_descriptor(isolate); | 598 descriptor->Initialize(deoptimization_handler); |
618 descriptor->Initialize(major, call_descriptor, deoptimization_handler); | |
619 } | 599 } |
620 | 600 |
621 | 601 |
622 void VectorLoadStub::InitializeInterfaceDescriptor( | 602 void VectorLoadStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
623 CodeStubInterfaceDescriptor* descriptor) { | 603 InitializeVectorLoadStub(isolate(), descriptor, |
624 InitializeVectorLoadStub(isolate(), descriptor, MajorKey(), | |
625 FUNCTION_ADDR(VectorLoadIC_MissFromStubFailure)); | 604 FUNCTION_ADDR(VectorLoadIC_MissFromStubFailure)); |
626 } | 605 } |
627 | 606 |
628 | 607 |
629 void VectorKeyedLoadStub::InitializeInterfaceDescriptor( | 608 void VectorKeyedLoadStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
630 CodeStubInterfaceDescriptor* descriptor) { | |
631 InitializeVectorLoadStub( | 609 InitializeVectorLoadStub( |
632 isolate(), descriptor, MajorKey(), | 610 isolate(), descriptor, |
633 FUNCTION_ADDR(VectorKeyedLoadIC_MissFromStubFailure)); | 611 FUNCTION_ADDR(VectorKeyedLoadIC_MissFromStubFailure)); |
634 } | 612 } |
635 | 613 |
636 | 614 |
637 void MegamorphicLoadStub::InitializeInterfaceDescriptor( | 615 void MegamorphicLoadStub::InitializeDescriptor(CodeStubDescriptor* d) {} |
638 CodeStubInterfaceDescriptor* descriptor) { | |
639 LoadDescriptor call_descriptor(isolate()); | |
640 descriptor->Initialize(MajorKey(), call_descriptor); | |
641 } | |
642 | 616 |
643 | 617 |
644 void FastNewClosureStub::InitializeInterfaceDescriptor( | 618 void FastNewClosureStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
645 CodeStubInterfaceDescriptor* descriptor) { | |
646 FastNewClosureDescriptor call_descriptor(isolate()); | |
647 descriptor->Initialize( | 619 descriptor->Initialize( |
648 MajorKey(), call_descriptor, | |
649 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); | 620 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); |
650 } | 621 } |
651 | 622 |
652 | 623 |
653 void FastNewContextStub::InitializeInterfaceDescriptor( | 624 void FastNewContextStub::InitializeDescriptor(CodeStubDescriptor* d) {} |
654 CodeStubInterfaceDescriptor* descriptor) { | |
655 FastNewContextDescriptor call_descriptor(isolate()); | |
656 descriptor->Initialize(MajorKey(), call_descriptor); | |
657 } | |
658 | 625 |
659 | 626 |
660 void ToNumberStub::InitializeInterfaceDescriptor( | 627 void ToNumberStub::InitializeDescriptor(CodeStubDescriptor* d) {} |
661 CodeStubInterfaceDescriptor* descriptor) { | |
662 ToNumberDescriptor call_descriptor(isolate()); | |
663 descriptor->Initialize(MajorKey(), call_descriptor); | |
664 } | |
665 | 628 |
666 | 629 |
667 void NumberToStringStub::InitializeInterfaceDescriptor( | 630 void NumberToStringStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
668 CodeStubInterfaceDescriptor* descriptor) { | |
669 NumberToStringDescriptor call_descriptor(isolate()); | 631 NumberToStringDescriptor call_descriptor(isolate()); |
670 descriptor->Initialize( | 632 descriptor->Initialize( |
671 MajorKey(), call_descriptor, | |
672 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); | 633 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); |
673 } | 634 } |
674 | 635 |
675 | 636 |
676 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( | 637 void FastCloneShallowArrayStub::InitializeDescriptor( |
677 CodeStubInterfaceDescriptor* descriptor) { | 638 CodeStubDescriptor* descriptor) { |
678 FastCloneShallowArrayDescriptor call_descriptor(isolate()); | 639 FastCloneShallowArrayDescriptor call_descriptor(isolate()); |
679 descriptor->Initialize( | 640 descriptor->Initialize( |
680 MajorKey(), call_descriptor, | |
681 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); | 641 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); |
682 } | 642 } |
683 | 643 |
684 | 644 |
685 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( | 645 void FastCloneShallowObjectStub::InitializeDescriptor( |
686 CodeStubInterfaceDescriptor* descriptor) { | 646 CodeStubDescriptor* descriptor) { |
687 FastCloneShallowObjectDescriptor call_descriptor(isolate()); | 647 FastCloneShallowObjectDescriptor call_descriptor(isolate()); |
688 descriptor->Initialize( | 648 descriptor->Initialize( |
689 MajorKey(), call_descriptor, | |
690 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); | 649 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); |
691 } | 650 } |
692 | 651 |
693 | 652 |
694 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( | 653 void CreateAllocationSiteStub::InitializeDescriptor(CodeStubDescriptor* d) {} |
695 CodeStubInterfaceDescriptor* descriptor) { | |
696 CreateAllocationSiteDescriptor call_descriptor(isolate()); | |
697 descriptor->Initialize(MajorKey(), call_descriptor); | |
698 } | |
699 | 654 |
700 | 655 |
701 void CallFunctionStub::InitializeInterfaceDescriptor( | 656 void RegExpConstructResultStub::InitializeDescriptor( |
702 CodeStubInterfaceDescriptor* descriptor) { | 657 CodeStubDescriptor* descriptor) { |
703 CallFunctionDescriptor call_descriptor(isolate()); | |
704 descriptor->Initialize(MajorKey(), call_descriptor); | |
705 } | |
706 | |
707 | |
708 void CallConstructStub::InitializeInterfaceDescriptor( | |
709 CodeStubInterfaceDescriptor* descriptor) { | |
710 CallConstructDescriptor call_descriptor(isolate()); | |
711 descriptor->Initialize(MajorKey(), call_descriptor); | |
712 } | |
713 | |
714 | |
715 void RegExpConstructResultStub::InitializeInterfaceDescriptor( | |
716 CodeStubInterfaceDescriptor* descriptor) { | |
717 RegExpConstructResultDescriptor call_descriptor(isolate()); | |
718 descriptor->Initialize( | 658 descriptor->Initialize( |
719 MajorKey(), call_descriptor, | |
720 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); | 659 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); |
721 } | 660 } |
722 | 661 |
723 | 662 |
724 void TransitionElementsKindStub::InitializeInterfaceDescriptor( | 663 void TransitionElementsKindStub::InitializeDescriptor( |
725 CodeStubInterfaceDescriptor* descriptor) { | 664 CodeStubDescriptor* descriptor) { |
726 TransitionElementsKindDescriptor call_descriptor(isolate()); | |
727 descriptor->Initialize( | 665 descriptor->Initialize( |
728 MajorKey(), call_descriptor, | |
729 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); | 666 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); |
730 } | 667 } |
731 | 668 |
732 | 669 |
733 void CompareNilICStub::InitializeInterfaceDescriptor( | 670 void CompareNilICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
734 CodeStubInterfaceDescriptor* descriptor) { | 671 descriptor->Initialize(FUNCTION_ADDR(CompareNilIC_Miss)); |
735 CompareNilDescriptor call_descriptor(isolate()); | |
736 descriptor->Initialize(MajorKey(), call_descriptor, | |
737 FUNCTION_ADDR(CompareNilIC_Miss)); | |
738 descriptor->SetMissHandler( | 672 descriptor->SetMissHandler( |
739 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); | 673 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |
740 } | 674 } |
741 | 675 |
742 void ToBooleanStub::InitializeInterfaceDescriptor( | 676 |
743 CodeStubInterfaceDescriptor* descriptor) { | 677 void ToBooleanStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
744 ToBooleanDescriptor call_descriptor(isolate()); | 678 descriptor->Initialize(FUNCTION_ADDR(ToBooleanIC_Miss)); |
745 descriptor->Initialize(MajorKey(), call_descriptor, | |
746 FUNCTION_ADDR(ToBooleanIC_Miss)); | |
747 descriptor->SetMissHandler( | 679 descriptor->SetMissHandler( |
748 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); | 680 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |
749 } | 681 } |
750 | 682 |
751 | 683 |
752 void BinaryOpICStub::InitializeInterfaceDescriptor( | 684 void BinaryOpICStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
753 CodeStubInterfaceDescriptor* descriptor) { | 685 descriptor->Initialize(FUNCTION_ADDR(BinaryOpIC_Miss)); |
754 BinaryOpDescriptor call_descriptor(isolate()); | |
755 descriptor->Initialize(MajorKey(), call_descriptor, | |
756 FUNCTION_ADDR(BinaryOpIC_Miss)); | |
757 descriptor->SetMissHandler( | 686 descriptor->SetMissHandler( |
758 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); | 687 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |
759 } | 688 } |
760 | 689 |
761 | 690 |
762 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( | 691 void BinaryOpWithAllocationSiteStub::InitializeDescriptor( |
763 CodeStubInterfaceDescriptor* descriptor) { | 692 CodeStubDescriptor* descriptor) { |
764 BinaryOpWithAllocationSiteDescriptor call_descriptor(isolate()); | 693 descriptor->Initialize(FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |
765 descriptor->Initialize(MajorKey(), call_descriptor, | |
766 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); | |
767 } | 694 } |
768 | 695 |
769 | 696 |
770 void StringAddStub::InitializeInterfaceDescriptor( | 697 void StringAddStub::InitializeDescriptor(CodeStubDescriptor* descriptor) { |
771 CodeStubInterfaceDescriptor* descriptor) { | 698 descriptor->Initialize(Runtime::FunctionForId(Runtime::kStringAdd)->entry); |
772 StringAddDescriptor call_descriptor(isolate()); | |
773 descriptor->Initialize(MajorKey(), call_descriptor, | |
774 Runtime::FunctionForId(Runtime::kStringAdd)->entry); | |
775 } | 699 } |
776 | 700 |
777 | 701 |
778 void CreateAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { | 702 void CreateAllocationSiteStub::GenerateAheadOfTime(Isolate* isolate) { |
779 CreateAllocationSiteStub stub(isolate); | 703 CreateAllocationSiteStub stub(isolate); |
780 stub.GetCode(); | 704 stub.GetCode(); |
781 } | 705 } |
782 | 706 |
783 | 707 |
784 void StoreElementStub::Generate(MacroAssembler* masm) { | 708 void StoreElementStub::Generate(MacroAssembler* masm) { |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 } | 931 } |
1008 | 932 |
1009 | 933 |
1010 InternalArrayConstructorStub::InternalArrayConstructorStub( | 934 InternalArrayConstructorStub::InternalArrayConstructorStub( |
1011 Isolate* isolate) : PlatformCodeStub(isolate) { | 935 Isolate* isolate) : PlatformCodeStub(isolate) { |
1012 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); | 936 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
1013 } | 937 } |
1014 | 938 |
1015 | 939 |
1016 } } // namespace v8::internal | 940 } } // namespace v8::internal |
OLD | NEW |