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() | 19 CodeStubInterfaceDescriptor::CodeStubInterfaceDescriptor() |
20 : call_descriptor_(NULL), | 20 : stack_parameter_count_(no_reg), |
21 stack_parameter_count_(no_reg), | |
22 hint_stack_parameter_count_(-1), | 21 hint_stack_parameter_count_(-1), |
23 function_mode_(NOT_JS_FUNCTION_STUB_MODE), | 22 function_mode_(NOT_JS_FUNCTION_STUB_MODE), |
24 deoptimization_handler_(NULL), | 23 deoptimization_handler_(NULL), |
25 handler_arguments_mode_(DONT_PASS_ARGUMENTS), | 24 handler_arguments_mode_(DONT_PASS_ARGUMENTS), |
26 miss_handler_(), | 25 miss_handler_(), |
27 has_miss_handler_(false) {} | 26 has_miss_handler_(false) {} |
28 | 27 |
29 | 28 |
30 void CodeStubInterfaceDescriptor::Initialize( | 29 void CodeStubInterfaceDescriptor::Initialize( |
31 CodeStub::Major major, CallInterfaceDescriptor* call_descriptor, | 30 CodeStub::Major major, CallInterfaceDescriptor call_descriptor, |
32 Address deoptimization_handler, int hint_stack_parameter_count, | 31 Address deoptimization_handler, int hint_stack_parameter_count, |
33 StubFunctionMode function_mode) { | 32 StubFunctionMode function_mode) { |
34 call_descriptor_ = call_descriptor; | 33 call_descriptor_ = call_descriptor; |
35 deoptimization_handler_ = deoptimization_handler; | 34 deoptimization_handler_ = deoptimization_handler; |
36 hint_stack_parameter_count_ = hint_stack_parameter_count; | 35 hint_stack_parameter_count_ = hint_stack_parameter_count; |
37 function_mode_ = function_mode; | 36 function_mode_ = function_mode; |
38 major_ = major; | 37 major_ = major; |
Yang
2014/09/03 09:24:34
not sure whether an initialization list would be m
| |
39 } | 38 } |
40 | 39 |
41 | 40 |
42 void CodeStubInterfaceDescriptor::Initialize( | 41 void CodeStubInterfaceDescriptor::Initialize( |
43 CodeStub::Major major, CallInterfaceDescriptor* call_descriptor, | 42 CodeStub::Major major, CallInterfaceDescriptor call_descriptor, |
44 Register stack_parameter_count, Address deoptimization_handler, | 43 Register stack_parameter_count, Address deoptimization_handler, |
45 int hint_stack_parameter_count, StubFunctionMode function_mode, | 44 int hint_stack_parameter_count, StubFunctionMode function_mode, |
46 HandlerArgumentsMode handler_mode) { | 45 HandlerArgumentsMode handler_mode) { |
47 Initialize(major, call_descriptor, deoptimization_handler, | 46 Initialize(major, call_descriptor, deoptimization_handler, |
48 hint_stack_parameter_count, function_mode); | 47 hint_stack_parameter_count, function_mode); |
49 stack_parameter_count_ = stack_parameter_count; | 48 stack_parameter_count_ = stack_parameter_count; |
50 handler_arguments_mode_ = handler_mode; | 49 handler_arguments_mode_ = handler_mode; |
51 } | 50 } |
52 | 51 |
53 | 52 |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
494 void JSEntryStub::FinishCode(Handle<Code> code) { | 493 void JSEntryStub::FinishCode(Handle<Code> code) { |
495 Handle<FixedArray> handler_table = | 494 Handle<FixedArray> handler_table = |
496 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); | 495 code->GetIsolate()->factory()->NewFixedArray(1, TENURED); |
497 handler_table->set(0, Smi::FromInt(handler_offset_)); | 496 handler_table->set(0, Smi::FromInt(handler_offset_)); |
498 code->set_handler_table(*handler_table); | 497 code->set_handler_table(*handler_table); |
499 } | 498 } |
500 | 499 |
501 | 500 |
502 void LoadFastElementStub::InitializeInterfaceDescriptor( | 501 void LoadFastElementStub::InitializeInterfaceDescriptor( |
503 CodeStubInterfaceDescriptor* descriptor) { | 502 CodeStubInterfaceDescriptor* descriptor) { |
504 CallInterfaceDescriptor* call_descriptor = | 503 LoadDescriptor call_descriptor(isolate()); |
505 isolate()->call_descriptor(CallDescriptorKey::LoadICCall); | |
506 descriptor->Initialize(MajorKey(), call_descriptor, | 504 descriptor->Initialize(MajorKey(), call_descriptor, |
507 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); | 505 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); |
508 } | 506 } |
509 | 507 |
510 | 508 |
511 void LoadDictionaryElementStub::InitializeInterfaceDescriptor( | 509 void LoadDictionaryElementStub::InitializeInterfaceDescriptor( |
512 CodeStubInterfaceDescriptor* descriptor) { | 510 CodeStubInterfaceDescriptor* descriptor) { |
513 CallInterfaceDescriptor* call_descriptor = | 511 LoadDescriptor call_descriptor(isolate()); |
514 isolate()->call_descriptor(CallDescriptorKey::LoadICCall); | |
515 descriptor->Initialize(MajorKey(), call_descriptor, | 512 descriptor->Initialize(MajorKey(), call_descriptor, |
516 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); | 513 FUNCTION_ADDR(KeyedLoadIC_MissFromStubFailure)); |
517 } | 514 } |
518 | 515 |
519 | 516 |
520 void KeyedLoadGenericStub::InitializeInterfaceDescriptor( | 517 void KeyedLoadGenericStub::InitializeInterfaceDescriptor( |
521 CodeStubInterfaceDescriptor* descriptor) { | 518 CodeStubInterfaceDescriptor* descriptor) { |
522 CallInterfaceDescriptor* call_descriptor = | 519 LoadDescriptor call_descriptor(isolate()); |
523 isolate()->call_descriptor(CallDescriptorKey::LoadICCall); | |
524 descriptor->Initialize( | 520 descriptor->Initialize( |
525 MajorKey(), call_descriptor, | 521 MajorKey(), call_descriptor, |
526 Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry); | 522 Runtime::FunctionForId(Runtime::kKeyedGetProperty)->entry); |
527 } | 523 } |
528 | 524 |
529 | 525 |
530 void HandlerStub::InitializeInterfaceDescriptor( | 526 void HandlerStub::InitializeInterfaceDescriptor( |
531 CodeStubInterfaceDescriptor* descriptor) { | 527 CodeStubInterfaceDescriptor* descriptor) { |
532 if (kind() == Code::LOAD_IC) { | 528 if (kind() == Code::LOAD_IC) { |
533 CallInterfaceDescriptor* call_descriptor = | 529 LoadDescriptor call_descriptor(isolate()); |
534 isolate()->call_descriptor(CallDescriptorKey::LoadICCall); | |
535 descriptor->Initialize(MajorKey(), call_descriptor); | 530 descriptor->Initialize(MajorKey(), call_descriptor); |
536 } else { | 531 } else { |
537 DCHECK_EQ(Code::STORE_IC, kind()); | 532 DCHECK_EQ(Code::STORE_IC, kind()); |
538 CallInterfaceDescriptor* call_descriptor = | 533 StoreDescriptor call_descriptor(isolate()); |
539 isolate()->call_descriptor(CallDescriptorKey::StoreICCall); | |
540 descriptor->Initialize(MajorKey(), call_descriptor, | 534 descriptor->Initialize(MajorKey(), call_descriptor, |
541 FUNCTION_ADDR(StoreIC_MissFromStubFailure)); | 535 FUNCTION_ADDR(StoreIC_MissFromStubFailure)); |
542 } | 536 } |
543 } | 537 } |
544 | 538 |
545 | 539 |
546 void StoreFastElementStub::InitializeInterfaceDescriptor( | 540 void StoreFastElementStub::InitializeInterfaceDescriptor( |
547 CodeStubInterfaceDescriptor* descriptor) { | 541 CodeStubInterfaceDescriptor* descriptor) { |
548 CallInterfaceDescriptor* call_descriptor = | 542 StoreDescriptor call_descriptor(isolate()); |
549 isolate()->call_descriptor(CallDescriptorKey::StoreICCall); | |
550 descriptor->Initialize(MajorKey(), call_descriptor, | 543 descriptor->Initialize(MajorKey(), call_descriptor, |
551 FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); | 544 FUNCTION_ADDR(KeyedStoreIC_MissFromStubFailure)); |
552 } | 545 } |
553 | 546 |
554 | 547 |
555 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( | 548 void ElementsTransitionAndStoreStub::InitializeInterfaceDescriptor( |
556 CodeStubInterfaceDescriptor* descriptor) { | 549 CodeStubInterfaceDescriptor* descriptor) { |
557 CallInterfaceDescriptor* call_descriptor = isolate()->call_descriptor( | 550 ElementTransitionAndStoreDescriptor call_descriptor(isolate()); |
558 CallDescriptorKey::ElementTransitionAndStoreCall); | |
559 descriptor->Initialize(MajorKey(), call_descriptor, | 551 descriptor->Initialize(MajorKey(), call_descriptor, |
560 FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); | 552 FUNCTION_ADDR(ElementsTransitionAndStoreIC_Miss)); |
561 } | 553 } |
562 | 554 |
563 | 555 |
564 void InstanceofStub::InitializeInterfaceDescriptor( | 556 void InstanceofStub::InitializeInterfaceDescriptor( |
565 CodeStubInterfaceDescriptor* descriptor) { | 557 CodeStubInterfaceDescriptor* descriptor) { |
566 CallInterfaceDescriptor* call_descriptor = | 558 InstanceofDescriptor call_descriptor(isolate()); |
567 isolate()->call_descriptor(CallDescriptorKey::InstanceofCall); | |
568 descriptor->Initialize(MajorKey(), call_descriptor); | 559 descriptor->Initialize(MajorKey(), call_descriptor); |
569 } | 560 } |
570 | 561 |
571 | 562 |
572 static void InitializeVectorLoadStub(Isolate* isolate, | 563 static void InitializeVectorLoadStub(Isolate* isolate, |
573 CodeStubInterfaceDescriptor* descriptor, | 564 CodeStubInterfaceDescriptor* descriptor, |
574 CodeStub::Major major, | 565 CodeStub::Major major, |
575 Address deoptimization_handler) { | 566 Address deoptimization_handler) { |
576 DCHECK(FLAG_vector_ics); | 567 DCHECK(FLAG_vector_ics); |
577 CallInterfaceDescriptor* call_descriptor = | 568 VectorLoadICDescriptor call_descriptor(isolate); |
578 isolate->call_descriptor(CallDescriptorKey::VectorLoadICCall); | |
579 descriptor->Initialize(major, call_descriptor, deoptimization_handler); | 569 descriptor->Initialize(major, call_descriptor, deoptimization_handler); |
580 } | 570 } |
581 | 571 |
582 | 572 |
583 void VectorLoadStub::InitializeInterfaceDescriptor( | 573 void VectorLoadStub::InitializeInterfaceDescriptor( |
584 CodeStubInterfaceDescriptor* descriptor) { | 574 CodeStubInterfaceDescriptor* descriptor) { |
585 InitializeVectorLoadStub(isolate(), descriptor, MajorKey(), | 575 InitializeVectorLoadStub(isolate(), descriptor, MajorKey(), |
586 FUNCTION_ADDR(VectorLoadIC_MissFromStubFailure)); | 576 FUNCTION_ADDR(VectorLoadIC_MissFromStubFailure)); |
587 } | 577 } |
588 | 578 |
589 | 579 |
590 void VectorKeyedLoadStub::InitializeInterfaceDescriptor( | 580 void VectorKeyedLoadStub::InitializeInterfaceDescriptor( |
591 CodeStubInterfaceDescriptor* descriptor) { | 581 CodeStubInterfaceDescriptor* descriptor) { |
592 InitializeVectorLoadStub( | 582 InitializeVectorLoadStub( |
593 isolate(), descriptor, MajorKey(), | 583 isolate(), descriptor, MajorKey(), |
594 FUNCTION_ADDR(VectorKeyedLoadIC_MissFromStubFailure)); | 584 FUNCTION_ADDR(VectorKeyedLoadIC_MissFromStubFailure)); |
595 } | 585 } |
596 | 586 |
597 | 587 |
598 void FastNewClosureStub::InitializeInterfaceDescriptor( | 588 void FastNewClosureStub::InitializeInterfaceDescriptor( |
599 CodeStubInterfaceDescriptor* descriptor) { | 589 CodeStubInterfaceDescriptor* descriptor) { |
600 CallInterfaceDescriptor* call_descriptor = | 590 FastNewClosureDescriptor call_descriptor(isolate()); |
601 isolate()->call_descriptor(CallDescriptorKey::FastNewClosureCall); | |
602 descriptor->Initialize( | 591 descriptor->Initialize( |
603 MajorKey(), call_descriptor, | 592 MajorKey(), call_descriptor, |
604 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); | 593 Runtime::FunctionForId(Runtime::kNewClosureFromStubFailure)->entry); |
605 } | 594 } |
606 | 595 |
607 | 596 |
608 void FastNewContextStub::InitializeInterfaceDescriptor( | 597 void FastNewContextStub::InitializeInterfaceDescriptor( |
609 CodeStubInterfaceDescriptor* descriptor) { | 598 CodeStubInterfaceDescriptor* descriptor) { |
610 CallInterfaceDescriptor* call_descriptor = | 599 FastNewContextDescriptor call_descriptor(isolate()); |
611 isolate()->call_descriptor(CallDescriptorKey::FastNewContextCall); | |
612 descriptor->Initialize(MajorKey(), call_descriptor); | 600 descriptor->Initialize(MajorKey(), call_descriptor); |
613 } | 601 } |
614 | 602 |
615 | 603 |
616 void ToNumberStub::InitializeInterfaceDescriptor( | 604 void ToNumberStub::InitializeInterfaceDescriptor( |
617 CodeStubInterfaceDescriptor* descriptor) { | 605 CodeStubInterfaceDescriptor* descriptor) { |
618 CallInterfaceDescriptor* call_descriptor = | 606 ToNumberDescriptor call_descriptor(isolate()); |
619 isolate()->call_descriptor(CallDescriptorKey::ToNumberCall); | |
620 descriptor->Initialize(MajorKey(), call_descriptor); | 607 descriptor->Initialize(MajorKey(), call_descriptor); |
621 } | 608 } |
622 | 609 |
623 | 610 |
624 void NumberToStringStub::InitializeInterfaceDescriptor( | 611 void NumberToStringStub::InitializeInterfaceDescriptor( |
625 CodeStubInterfaceDescriptor* descriptor) { | 612 CodeStubInterfaceDescriptor* descriptor) { |
626 CallInterfaceDescriptor* call_descriptor = | 613 NumberToStringDescriptor call_descriptor(isolate()); |
627 isolate()->call_descriptor(CallDescriptorKey::NumberToStringCall); | |
628 descriptor->Initialize( | 614 descriptor->Initialize( |
629 MajorKey(), call_descriptor, | 615 MajorKey(), call_descriptor, |
630 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); | 616 Runtime::FunctionForId(Runtime::kNumberToStringRT)->entry); |
631 } | 617 } |
632 | 618 |
633 | 619 |
634 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( | 620 void FastCloneShallowArrayStub::InitializeInterfaceDescriptor( |
635 CodeStubInterfaceDescriptor* descriptor) { | 621 CodeStubInterfaceDescriptor* descriptor) { |
636 CallInterfaceDescriptor* call_descriptor = | 622 FastCloneShallowArrayDescriptor call_descriptor(isolate()); |
637 isolate()->call_descriptor(CallDescriptorKey::FastCloneShallowArrayCall); | |
638 descriptor->Initialize( | 623 descriptor->Initialize( |
639 MajorKey(), call_descriptor, | 624 MajorKey(), call_descriptor, |
640 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); | 625 Runtime::FunctionForId(Runtime::kCreateArrayLiteralStubBailout)->entry); |
641 } | 626 } |
642 | 627 |
643 | 628 |
644 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( | 629 void FastCloneShallowObjectStub::InitializeInterfaceDescriptor( |
645 CodeStubInterfaceDescriptor* descriptor) { | 630 CodeStubInterfaceDescriptor* descriptor) { |
646 CallInterfaceDescriptor* call_descriptor = | 631 FastCloneShallowObjectDescriptor call_descriptor(isolate()); |
647 isolate()->call_descriptor(CallDescriptorKey::FastCloneShallowObjectCall); | |
648 descriptor->Initialize( | 632 descriptor->Initialize( |
649 MajorKey(), call_descriptor, | 633 MajorKey(), call_descriptor, |
650 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); | 634 Runtime::FunctionForId(Runtime::kCreateObjectLiteral)->entry); |
651 } | 635 } |
652 | 636 |
653 | 637 |
654 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( | 638 void CreateAllocationSiteStub::InitializeInterfaceDescriptor( |
655 CodeStubInterfaceDescriptor* descriptor) { | 639 CodeStubInterfaceDescriptor* descriptor) { |
656 CallInterfaceDescriptor* call_descriptor = | 640 CreateAllocationSiteDescriptor call_descriptor(isolate()); |
657 isolate()->call_descriptor(CallDescriptorKey::CreateAllocationSiteCall); | |
658 descriptor->Initialize(MajorKey(), call_descriptor); | 641 descriptor->Initialize(MajorKey(), call_descriptor); |
659 } | 642 } |
660 | 643 |
661 | 644 |
662 void CallFunctionStub::InitializeInterfaceDescriptor( | 645 void CallFunctionStub::InitializeInterfaceDescriptor( |
663 CodeStubInterfaceDescriptor* descriptor) { | 646 CodeStubInterfaceDescriptor* descriptor) { |
664 CallInterfaceDescriptor* call_descriptor = | 647 CallFunctionDescriptor call_descriptor(isolate()); |
665 isolate()->call_descriptor(CallDescriptorKey::CallFunctionCall); | |
666 descriptor->Initialize(MajorKey(), call_descriptor); | 648 descriptor->Initialize(MajorKey(), call_descriptor); |
667 } | 649 } |
668 | 650 |
669 | 651 |
670 void CallConstructStub::InitializeInterfaceDescriptor( | 652 void CallConstructStub::InitializeInterfaceDescriptor( |
671 CodeStubInterfaceDescriptor* descriptor) { | 653 CodeStubInterfaceDescriptor* descriptor) { |
672 CallInterfaceDescriptor* call_descriptor = | 654 CallConstructDescriptor call_descriptor(isolate()); |
673 isolate()->call_descriptor(CallDescriptorKey::CallConstructCall); | |
674 descriptor->Initialize(MajorKey(), call_descriptor); | 655 descriptor->Initialize(MajorKey(), call_descriptor); |
675 } | 656 } |
676 | 657 |
677 | 658 |
678 void RegExpConstructResultStub::InitializeInterfaceDescriptor( | 659 void RegExpConstructResultStub::InitializeInterfaceDescriptor( |
679 CodeStubInterfaceDescriptor* descriptor) { | 660 CodeStubInterfaceDescriptor* descriptor) { |
680 CallInterfaceDescriptor* call_descriptor = | 661 RegExpConstructResultDescriptor call_descriptor(isolate()); |
681 isolate()->call_descriptor(CallDescriptorKey::RegExpConstructResultCall); | |
682 descriptor->Initialize( | 662 descriptor->Initialize( |
683 MajorKey(), call_descriptor, | 663 MajorKey(), call_descriptor, |
684 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); | 664 Runtime::FunctionForId(Runtime::kRegExpConstructResult)->entry); |
685 } | 665 } |
686 | 666 |
687 | 667 |
688 void TransitionElementsKindStub::InitializeInterfaceDescriptor( | 668 void TransitionElementsKindStub::InitializeInterfaceDescriptor( |
689 CodeStubInterfaceDescriptor* descriptor) { | 669 CodeStubInterfaceDescriptor* descriptor) { |
690 CallInterfaceDescriptor* call_descriptor = | 670 TransitionElementsKindDescriptor call_descriptor(isolate()); |
691 isolate()->call_descriptor(CallDescriptorKey::TransitionElementsKindCall); | |
692 descriptor->Initialize( | 671 descriptor->Initialize( |
693 MajorKey(), call_descriptor, | 672 MajorKey(), call_descriptor, |
694 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); | 673 Runtime::FunctionForId(Runtime::kTransitionElementsKind)->entry); |
695 } | 674 } |
696 | 675 |
697 | 676 |
698 void CompareNilICStub::InitializeInterfaceDescriptor( | 677 void CompareNilICStub::InitializeInterfaceDescriptor( |
699 CodeStubInterfaceDescriptor* descriptor) { | 678 CodeStubInterfaceDescriptor* descriptor) { |
700 CallInterfaceDescriptor* call_descriptor = | 679 CompareNilDescriptor call_descriptor(isolate()); |
701 isolate()->call_descriptor(CallDescriptorKey::CompareNilCall); | |
702 descriptor->Initialize(MajorKey(), call_descriptor, | 680 descriptor->Initialize(MajorKey(), call_descriptor, |
703 FUNCTION_ADDR(CompareNilIC_Miss)); | 681 FUNCTION_ADDR(CompareNilIC_Miss)); |
704 descriptor->SetMissHandler( | 682 descriptor->SetMissHandler( |
705 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); | 683 ExternalReference(IC_Utility(IC::kCompareNilIC_Miss), isolate())); |
706 } | 684 } |
707 | 685 |
708 void ToBooleanStub::InitializeInterfaceDescriptor( | 686 void ToBooleanStub::InitializeInterfaceDescriptor( |
709 CodeStubInterfaceDescriptor* descriptor) { | 687 CodeStubInterfaceDescriptor* descriptor) { |
710 CallInterfaceDescriptor* call_descriptor = | 688 ToBooleanDescriptor call_descriptor(isolate()); |
711 isolate()->call_descriptor(CallDescriptorKey::ToBooleanCall); | |
712 descriptor->Initialize(MajorKey(), call_descriptor, | 689 descriptor->Initialize(MajorKey(), call_descriptor, |
713 FUNCTION_ADDR(ToBooleanIC_Miss)); | 690 FUNCTION_ADDR(ToBooleanIC_Miss)); |
714 descriptor->SetMissHandler( | 691 descriptor->SetMissHandler( |
715 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); | 692 ExternalReference(IC_Utility(IC::kToBooleanIC_Miss), isolate())); |
716 } | 693 } |
717 | 694 |
718 | 695 |
719 void BinaryOpICStub::InitializeInterfaceDescriptor( | 696 void BinaryOpICStub::InitializeInterfaceDescriptor( |
720 CodeStubInterfaceDescriptor* descriptor) { | 697 CodeStubInterfaceDescriptor* descriptor) { |
721 CallInterfaceDescriptor* call_descriptor = | 698 BinaryOpDescriptor call_descriptor(isolate()); |
722 isolate()->call_descriptor(CallDescriptorKey::BinaryOpCall); | |
723 descriptor->Initialize(MajorKey(), call_descriptor, | 699 descriptor->Initialize(MajorKey(), call_descriptor, |
724 FUNCTION_ADDR(BinaryOpIC_Miss)); | 700 FUNCTION_ADDR(BinaryOpIC_Miss)); |
725 descriptor->SetMissHandler( | 701 descriptor->SetMissHandler( |
726 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); | 702 ExternalReference(IC_Utility(IC::kBinaryOpIC_Miss), isolate())); |
727 } | 703 } |
728 | 704 |
729 | 705 |
730 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( | 706 void BinaryOpWithAllocationSiteStub::InitializeInterfaceDescriptor( |
731 CodeStubInterfaceDescriptor* descriptor) { | 707 CodeStubInterfaceDescriptor* descriptor) { |
732 CallInterfaceDescriptor* call_descriptor = isolate()->call_descriptor( | 708 BinaryOpWithAllocationSiteDescriptor call_descriptor(isolate()); |
733 CallDescriptorKey::BinaryOpWithAllocationSiteCall); | |
734 descriptor->Initialize(MajorKey(), call_descriptor, | 709 descriptor->Initialize(MajorKey(), call_descriptor, |
735 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); | 710 FUNCTION_ADDR(BinaryOpIC_MissWithAllocationSite)); |
736 } | 711 } |
737 | 712 |
738 | 713 |
739 void StringAddStub::InitializeInterfaceDescriptor( | 714 void StringAddStub::InitializeInterfaceDescriptor( |
740 CodeStubInterfaceDescriptor* descriptor) { | 715 CodeStubInterfaceDescriptor* descriptor) { |
741 CallInterfaceDescriptor* call_descriptor = | 716 StringAddDescriptor call_descriptor(isolate()); |
742 isolate()->call_descriptor(CallDescriptorKey::StringAddCall); | |
743 descriptor->Initialize(MajorKey(), call_descriptor, | 717 descriptor->Initialize(MajorKey(), call_descriptor, |
744 Runtime::FunctionForId(Runtime::kStringAdd)->entry); | 718 Runtime::FunctionForId(Runtime::kStringAdd)->entry); |
745 } | 719 } |
746 | 720 |
747 | 721 |
748 void LoadDictionaryElementPlatformStub::Generate(MacroAssembler* masm) { | 722 void LoadDictionaryElementPlatformStub::Generate(MacroAssembler* masm) { |
749 ElementHandlerCompiler::GenerateLoadDictionaryElement(masm); | 723 ElementHandlerCompiler::GenerateLoadDictionaryElement(masm); |
750 } | 724 } |
751 | 725 |
752 | 726 |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1087 InstallDescriptor(isolate, &stub3); | 1061 InstallDescriptor(isolate, &stub3); |
1088 } | 1062 } |
1089 | 1063 |
1090 InternalArrayConstructorStub::InternalArrayConstructorStub( | 1064 InternalArrayConstructorStub::InternalArrayConstructorStub( |
1091 Isolate* isolate) : PlatformCodeStub(isolate) { | 1065 Isolate* isolate) : PlatformCodeStub(isolate) { |
1092 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); | 1066 InternalArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
1093 } | 1067 } |
1094 | 1068 |
1095 | 1069 |
1096 } } // namespace v8::internal | 1070 } } // namespace v8::internal |
OLD | NEW |