Chromium Code Reviews| 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 |