| 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 |