| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ | 5 #ifndef V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ | 6 #define V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 V(CreateWeakCell) \ | 43 V(CreateWeakCell) \ |
| 44 V(CallFunction) \ | 44 V(CallFunction) \ |
| 45 V(CallIC) \ | 45 V(CallIC) \ |
| 46 V(CallICTrampoline) \ | 46 V(CallICTrampoline) \ |
| 47 V(CallForwardVarargs) \ | 47 V(CallForwardVarargs) \ |
| 48 V(CallConstruct) \ | 48 V(CallConstruct) \ |
| 49 V(CallTrampoline) \ | 49 V(CallTrampoline) \ |
| 50 V(ConstructStub) \ | 50 V(ConstructStub) \ |
| 51 V(ConstructTrampoline) \ | 51 V(ConstructTrampoline) \ |
| 52 V(RegExpExec) \ | 52 V(RegExpExec) \ |
| 53 V(RegExpPrototypeExecSlow) \ | |
| 54 V(RegExpReplace) \ | |
| 55 V(RegExpSplit) \ | |
| 56 V(CopyFastSmiOrObjectElements) \ | |
| 57 V(TransitionElementsKind) \ | 53 V(TransitionElementsKind) \ |
| 58 V(AllocateHeapNumber) \ | 54 V(AllocateHeapNumber) \ |
| 59 V(Builtin) \ | 55 V(Builtin) \ |
| 60 V(ArrayConstructor) \ | 56 V(ArrayConstructor) \ |
| 61 V(IteratingArrayBuiltin) \ | 57 V(IteratingArrayBuiltin) \ |
| 62 V(IteratingArrayBuiltinLoopContinuation) \ | 58 V(IteratingArrayBuiltinLoopContinuation) \ |
| 63 V(ArrayNoArgumentConstructor) \ | 59 V(ArrayNoArgumentConstructor) \ |
| 64 V(ArraySingleArgumentConstructor) \ | 60 V(ArraySingleArgumentConstructor) \ |
| 65 V(ArrayNArgumentsConstructor) \ | 61 V(ArrayNArgumentsConstructor) \ |
| 66 V(Compare) \ | 62 V(Compare) \ |
| 67 V(BinaryOp) \ | 63 V(BinaryOp) \ |
| 68 V(BinaryOpWithAllocationSite) \ | 64 V(BinaryOpWithAllocationSite) \ |
| 69 V(BinaryOpWithVector) \ | 65 V(BinaryOpWithVector) \ |
| 70 V(CountOp) \ | 66 V(CountOp) \ |
| 71 V(StringAdd) \ | 67 V(StringAdd) \ |
| 72 V(StringCharAt) \ | 68 V(StringCharAt) \ |
| 73 V(StringCharCodeAt) \ | 69 V(StringCharCodeAt) \ |
| 74 V(StringCompare) \ | 70 V(StringCompare) \ |
| 75 V(StringIndexOf) \ | |
| 76 V(SubString) \ | 71 V(SubString) \ |
| 77 V(Keyed) \ | |
| 78 V(Named) \ | |
| 79 V(CreateIterResultObject) \ | |
| 80 V(HasProperty) \ | |
| 81 V(ForInFilter) \ | |
| 82 V(ForInNext) \ | |
| 83 V(ForInPrepare) \ | 72 V(ForInPrepare) \ |
| 84 V(GetProperty) \ | 73 V(GetProperty) \ |
| 85 V(CallHandler) \ | |
| 86 V(ArgumentAdaptor) \ | 74 V(ArgumentAdaptor) \ |
| 87 V(ApiCallback) \ | 75 V(ApiCallback) \ |
| 88 V(ApiGetter) \ | 76 V(ApiGetter) \ |
| 89 V(MathPowTagged) \ | 77 V(MathPowTagged) \ |
| 90 V(MathPowInteger) \ | 78 V(MathPowInteger) \ |
| 91 V(GrowArrayElements) \ | 79 V(GrowArrayElements) \ |
| 92 V(NewArgumentsElements) \ | 80 V(NewArgumentsElements) \ |
| 93 V(InterpreterDispatch) \ | 81 V(InterpreterDispatch) \ |
| 94 V(InterpreterPushArgsAndCall) \ | 82 V(InterpreterPushArgsAndCall) \ |
| 95 V(InterpreterPushArgsAndConstruct) \ | 83 V(InterpreterPushArgsAndConstruct) \ |
| 96 V(InterpreterPushArgsAndConstructArray) \ | 84 V(InterpreterPushArgsAndConstructArray) \ |
| 97 V(InterpreterCEntry) \ | 85 V(InterpreterCEntry) \ |
| 98 V(ResumeGenerator) \ | 86 V(ResumeGenerator) \ |
| 99 V(FrameDropperTrampoline) \ | 87 V(FrameDropperTrampoline) \ |
| 100 V(PromiseHandleReject) \ | 88 V(WasmRuntimeCall) \ |
| 101 V(WasmRuntimeCall) | 89 BUILTIN_LIST_TFS(V) |
| 102 | 90 |
| 103 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { | 91 class V8_EXPORT_PRIVATE CallInterfaceDescriptorData { |
| 104 public: | 92 public: |
| 105 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {} | 93 CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {} |
| 106 | 94 |
| 107 // A copy of the passed in registers and param_representations is made | 95 // A copy of the passed in registers and param_representations is made |
| 108 // and owned by the CallInterfaceDescriptorData. | 96 // and owned by the CallInterfaceDescriptorData. |
| 109 | 97 |
| 110 void InitializePlatformSpecific( | 98 void InitializePlatformSpecific( |
| 111 int register_parameter_count, const Register* registers, | 99 int register_parameter_count, const Register* registers, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 | 137 |
| 150 PlatformInterfaceDescriptor* platform_specific_descriptor_; | 138 PlatformInterfaceDescriptor* platform_specific_descriptor_; |
| 151 | 139 |
| 152 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); | 140 DISALLOW_COPY_AND_ASSIGN(CallInterfaceDescriptorData); |
| 153 }; | 141 }; |
| 154 | 142 |
| 155 | 143 |
| 156 class CallDescriptors { | 144 class CallDescriptors { |
| 157 public: | 145 public: |
| 158 enum Key { | 146 enum Key { |
| 159 #define DEF_ENUM(name) name, | 147 #define DEF_ENUM(name, ...) name, |
| 160 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) | 148 INTERFACE_DESCRIPTOR_LIST(DEF_ENUM) |
| 161 #undef DEF_ENUM | 149 #undef DEF_ENUM |
| 162 NUMBER_OF_DESCRIPTORS | 150 NUMBER_OF_DESCRIPTORS |
| 163 }; | 151 }; |
| 164 }; | 152 }; |
| 165 | 153 |
| 166 class V8_EXPORT_PRIVATE CallInterfaceDescriptor { | 154 class V8_EXPORT_PRIVATE CallInterfaceDescriptor { |
| 167 public: | 155 public: |
| 168 CallInterfaceDescriptor() : data_(NULL) {} | 156 CallInterfaceDescriptor() : data_(NULL) {} |
| 169 virtual ~CallInterfaceDescriptor() {} | 157 virtual ~CallInterfaceDescriptor() {} |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 }; | 491 }; |
| 504 | 492 |
| 505 class TypeConversionDescriptor final : public CallInterfaceDescriptor { | 493 class TypeConversionDescriptor final : public CallInterfaceDescriptor { |
| 506 public: | 494 public: |
| 507 DEFINE_PARAMETERS(kArgument) | 495 DEFINE_PARAMETERS(kArgument) |
| 508 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) | 496 DECLARE_DESCRIPTOR(TypeConversionDescriptor, CallInterfaceDescriptor) |
| 509 | 497 |
| 510 static const Register ArgumentRegister(); | 498 static const Register ArgumentRegister(); |
| 511 }; | 499 }; |
| 512 | 500 |
| 513 class CreateIterResultObjectDescriptor final : public CallInterfaceDescriptor { | |
| 514 public: | |
| 515 DEFINE_PARAMETERS(kValue, kDone) | |
| 516 DECLARE_DEFAULT_DESCRIPTOR(CreateIterResultObjectDescriptor, | |
| 517 CallInterfaceDescriptor, kParameterCount) | |
| 518 }; | |
| 519 | |
| 520 class HasPropertyDescriptor final : public CallInterfaceDescriptor { | |
| 521 public: | |
| 522 DEFINE_PARAMETERS(kKey, kObject) | |
| 523 DECLARE_DEFAULT_DESCRIPTOR(HasPropertyDescriptor, CallInterfaceDescriptor, | |
| 524 kParameterCount) | |
| 525 }; | |
| 526 | |
| 527 class ForInFilterDescriptor final : public CallInterfaceDescriptor { | |
| 528 public: | |
| 529 DEFINE_PARAMETERS(kKey, kObject) | |
| 530 DECLARE_DEFAULT_DESCRIPTOR(ForInFilterDescriptor, CallInterfaceDescriptor, | |
| 531 kParameterCount) | |
| 532 }; | |
| 533 | |
| 534 class ForInNextDescriptor final : public CallInterfaceDescriptor { | |
| 535 public: | |
| 536 DEFINE_PARAMETERS(kObject, kCacheArray, kCacheType, kIndex) | |
| 537 DECLARE_DEFAULT_DESCRIPTOR(ForInNextDescriptor, CallInterfaceDescriptor, | |
| 538 kParameterCount) | |
| 539 }; | |
| 540 | |
| 541 class ForInPrepareDescriptor final : public CallInterfaceDescriptor { | 501 class ForInPrepareDescriptor final : public CallInterfaceDescriptor { |
| 542 public: | 502 public: |
| 543 DEFINE_PARAMETERS(kObject) | 503 DEFINE_PARAMETERS(kObject) |
| 544 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor, | 504 DECLARE_DEFAULT_DESCRIPTOR(ForInPrepareDescriptor, CallInterfaceDescriptor, |
| 545 kParameterCount) | 505 kParameterCount) |
| 546 }; | 506 }; |
| 547 | 507 |
| 548 class GetPropertyDescriptor final : public CallInterfaceDescriptor { | 508 class GetPropertyDescriptor final : public CallInterfaceDescriptor { |
| 549 public: | 509 public: |
| 550 DEFINE_PARAMETERS(kObject, kKey) | 510 DEFINE_PARAMETERS(kObject, kKey) |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 659 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor, | 619 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(RegExpExecDescriptor, |
| 660 CallInterfaceDescriptor) | 620 CallInterfaceDescriptor) |
| 661 | 621 |
| 662 static const Register StringRegister(); | 622 static const Register StringRegister(); |
| 663 static const Register LastIndexRegister(); | 623 static const Register LastIndexRegister(); |
| 664 static const Register StringStartRegister(); | 624 static const Register StringStartRegister(); |
| 665 static const Register StringEndRegister(); | 625 static const Register StringEndRegister(); |
| 666 static const Register CodeRegister(); | 626 static const Register CodeRegister(); |
| 667 }; | 627 }; |
| 668 | 628 |
| 669 class RegExpPrototypeExecSlowDescriptor : public CallInterfaceDescriptor { | |
| 670 public: | |
| 671 DEFINE_PARAMETERS(kReceiver, kString) | |
| 672 DECLARE_DEFAULT_DESCRIPTOR(RegExpPrototypeExecSlowDescriptor, | |
| 673 CallInterfaceDescriptor, kParameterCount) | |
| 674 }; | |
| 675 | |
| 676 class RegExpReplaceDescriptor : public CallInterfaceDescriptor { | |
| 677 public: | |
| 678 DEFINE_PARAMETERS(kReceiver, kString, kReplaceValue) | |
| 679 DECLARE_DEFAULT_DESCRIPTOR(RegExpReplaceDescriptor, CallInterfaceDescriptor, | |
| 680 kParameterCount) | |
| 681 }; | |
| 682 | |
| 683 class RegExpSplitDescriptor : public CallInterfaceDescriptor { | |
| 684 public: | |
| 685 DEFINE_PARAMETERS(kReceiver, kString, kLimit) | |
| 686 DECLARE_DEFAULT_DESCRIPTOR(RegExpSplitDescriptor, CallInterfaceDescriptor, | |
| 687 kParameterCount) | |
| 688 }; | |
| 689 | |
| 690 class CopyFastSmiOrObjectElementsDescriptor : public CallInterfaceDescriptor { | |
| 691 public: | |
| 692 DEFINE_PARAMETERS(kObject) | |
| 693 DECLARE_DEFAULT_DESCRIPTOR(CopyFastSmiOrObjectElementsDescriptor, | |
| 694 CallInterfaceDescriptor, kParameterCount) | |
| 695 }; | |
| 696 | |
| 697 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { | 629 class TransitionElementsKindDescriptor : public CallInterfaceDescriptor { |
| 698 public: | 630 public: |
| 699 DEFINE_PARAMETERS(kObject, kMap) | 631 DEFINE_PARAMETERS(kObject, kMap) |
| 700 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) | 632 DECLARE_DESCRIPTOR(TransitionElementsKindDescriptor, CallInterfaceDescriptor) |
| 701 }; | 633 }; |
| 702 | 634 |
| 703 | 635 |
| 704 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor { | 636 class AllocateHeapNumberDescriptor : public CallInterfaceDescriptor { |
| 705 public: | 637 public: |
| 706 DEFINE_EMPTY_PARAMETERS() | 638 DEFINE_EMPTY_PARAMETERS() |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 826 static const Register RightRegister(); | 758 static const Register RightRegister(); |
| 827 }; | 759 }; |
| 828 | 760 |
| 829 class SubStringDescriptor : public CallInterfaceDescriptor { | 761 class SubStringDescriptor : public CallInterfaceDescriptor { |
| 830 public: | 762 public: |
| 831 DEFINE_PARAMETERS(kString, kFrom, kTo) | 763 DEFINE_PARAMETERS(kString, kFrom, kTo) |
| 832 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor, | 764 DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor, |
| 833 CallInterfaceDescriptor) | 765 CallInterfaceDescriptor) |
| 834 }; | 766 }; |
| 835 | 767 |
| 836 class StringIndexOfDescriptor final : public CallInterfaceDescriptor { | |
| 837 public: | |
| 838 DEFINE_PARAMETERS(kReceiver, kSearchString, kPosition) | |
| 839 DECLARE_DEFAULT_DESCRIPTOR(StringIndexOfDescriptor, CallInterfaceDescriptor, | |
| 840 kParameterCount) | |
| 841 }; | |
| 842 | |
| 843 // TODO(ishell): not used, remove. | |
| 844 class KeyedDescriptor : public CallInterfaceDescriptor { | |
| 845 public: | |
| 846 DECLARE_DESCRIPTOR(KeyedDescriptor, CallInterfaceDescriptor) | |
| 847 }; | |
| 848 | |
| 849 // TODO(ishell): not used, remove | |
| 850 class NamedDescriptor : public CallInterfaceDescriptor { | |
| 851 public: | |
| 852 DECLARE_DESCRIPTOR(NamedDescriptor, CallInterfaceDescriptor) | |
| 853 }; | |
| 854 | |
| 855 // TODO(ishell): not used, remove. | |
| 856 class CallHandlerDescriptor : public CallInterfaceDescriptor { | |
| 857 public: | |
| 858 DECLARE_DESCRIPTOR(CallHandlerDescriptor, CallInterfaceDescriptor) | |
| 859 }; | |
| 860 | |
| 861 | |
| 862 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { | 768 class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor { |
| 863 public: | 769 public: |
| 864 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, | 770 DEFINE_PARAMETERS(kFunction, kNewTarget, kActualArgumentsCount, |
| 865 kExpectedArgumentsCount) | 771 kExpectedArgumentsCount) |
| 866 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, | 772 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ArgumentAdaptorDescriptor, |
| 867 CallInterfaceDescriptor) | 773 CallInterfaceDescriptor) |
| 868 }; | 774 }; |
| 869 | 775 |
| 870 class ApiCallbackDescriptor : public CallInterfaceDescriptor { | 776 class ApiCallbackDescriptor : public CallInterfaceDescriptor { |
| 871 public: | 777 public: |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 969 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { | 875 class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor { |
| 970 public: | 876 public: |
| 971 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) | 877 DECLARE_DESCRIPTOR(ResumeGeneratorDescriptor, CallInterfaceDescriptor) |
| 972 }; | 878 }; |
| 973 | 879 |
| 974 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { | 880 class FrameDropperTrampolineDescriptor final : public CallInterfaceDescriptor { |
| 975 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor, | 881 DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(FrameDropperTrampolineDescriptor, |
| 976 CallInterfaceDescriptor) | 882 CallInterfaceDescriptor) |
| 977 }; | 883 }; |
| 978 | 884 |
| 979 class PromiseHandleRejectDescriptor final : public CallInterfaceDescriptor { | |
| 980 public: | |
| 981 DEFINE_PARAMETERS(kPromise, kOnReject, kException) | |
| 982 DECLARE_DEFAULT_DESCRIPTOR(PromiseHandleRejectDescriptor, | |
| 983 CallInterfaceDescriptor, kParameterCount) | |
| 984 }; | |
| 985 | |
| 986 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor { | 885 class WasmRuntimeCallDescriptor final : public CallInterfaceDescriptor { |
| 987 public: | 886 public: |
| 988 DEFINE_EMPTY_PARAMETERS() | 887 DEFINE_EMPTY_PARAMETERS() |
| 989 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor, | 888 DECLARE_DEFAULT_DESCRIPTOR(WasmRuntimeCallDescriptor, CallInterfaceDescriptor, |
| 990 0) | 889 0) |
| 991 }; | 890 }; |
| 992 | 891 |
| 892 #define DEFINE_TFS_BUILTIN_DESCRIPTOR(Name, ...) \ |
| 893 class Name##Descriptor : public CallInterfaceDescriptor { \ |
| 894 public: \ |
| 895 DEFINE_PARAMETERS(__VA_ARGS__) \ |
| 896 DECLARE_DEFAULT_DESCRIPTOR(Name##Descriptor, CallInterfaceDescriptor, \ |
| 897 kParameterCount) \ |
| 898 }; |
| 899 BUILTIN_LIST_TFS(DEFINE_TFS_BUILTIN_DESCRIPTOR) |
| 900 #undef DEFINE_TFS_BUILTIN_DESCRIPTOR |
| 901 |
| 993 #undef DECLARE_DESCRIPTOR_WITH_BASE | 902 #undef DECLARE_DESCRIPTOR_WITH_BASE |
| 994 #undef DECLARE_DESCRIPTOR | 903 #undef DECLARE_DESCRIPTOR |
| 995 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE | 904 #undef DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE |
| 996 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG | 905 #undef DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG |
| 997 #undef DEFINE_PARAMETERS | 906 #undef DEFINE_PARAMETERS |
| 998 | 907 |
| 999 // We define the association between CallDescriptors::Key and the specialized | 908 // We define the association between CallDescriptors::Key and the specialized |
| 1000 // descriptor here to reduce boilerplate and mistakes. | 909 // descriptor here to reduce boilerplate and mistakes. |
| 1001 #define DEF_KEY(name) \ | 910 #define DEF_KEY(name, ...) \ |
| 1002 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } | 911 CallDescriptors::Key name##Descriptor::key() { return CallDescriptors::name; } |
| 1003 INTERFACE_DESCRIPTOR_LIST(DEF_KEY) | 912 INTERFACE_DESCRIPTOR_LIST(DEF_KEY) |
| 1004 #undef DEF_KEY | 913 #undef DEF_KEY |
| 1005 } // namespace internal | 914 } // namespace internal |
| 1006 } // namespace v8 | 915 } // namespace v8 |
| 1007 | 916 |
| 1008 | 917 |
| 1009 #if V8_TARGET_ARCH_ARM64 | 918 #if V8_TARGET_ARCH_ARM64 |
| 1010 #include "src/arm64/interface-descriptors-arm64.h" | 919 #include "src/arm64/interface-descriptors-arm64.h" |
| 1011 #elif V8_TARGET_ARCH_ARM | 920 #elif V8_TARGET_ARCH_ARM |
| 1012 #include "src/arm/interface-descriptors-arm.h" | 921 #include "src/arm/interface-descriptors-arm.h" |
| 1013 #endif | 922 #endif |
| 1014 | 923 |
| 1015 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ | 924 #endif // V8_CALL_INTERFACE_DESCRIPTOR_H_ |
| OLD | NEW |