diff options
Diffstat (limited to 'src/x64/interface-descriptors-x64.cc')
-rw-r--r-- | src/x64/interface-descriptors-x64.cc | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/src/x64/interface-descriptors-x64.cc b/src/x64/interface-descriptors-x64.cc index 3ee4412c..c784edd7 100644 --- a/src/x64/interface-descriptors-x64.cc +++ b/src/x64/interface-descriptors-x64.cc @@ -64,35 +64,11 @@ const Register GrowArrayElementsDescriptor::KeyRegister() { return rbx; } void FastNewClosureDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {rbx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FastNewObjectDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdi, rdx}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FastNewRestParameterDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdi}; + // SharedFunctionInfo, vector, slot index. + Register registers[] = {rbx, rcx, rdx}; data->InitializePlatformSpecific(arraysize(registers), registers); } -void FastNewSloppyArgumentsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdi}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - -void FastNewStrictArgumentsDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {rdi}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - - void TypeofDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {rbx}; @@ -144,15 +120,13 @@ void CallFunctionDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } - -void CallFunctionWithFeedbackDescriptor::InitializePlatformSpecific( +void CallICTrampolineDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {rdi, rdx}; + Register registers[] = {rdi, rax, rdx}; data->InitializePlatformSpecific(arraysize(registers), registers); } - -void CallFunctionWithFeedbackAndVectorDescriptor::InitializePlatformSpecific( +void CallICDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {rdi, rax, rdx, rbx}; data->InitializePlatformSpecific(arraysize(registers), registers); @@ -180,6 +154,13 @@ void CallTrampolineDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void CallForwardVarargsDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // rcx : start index (to support rest parameters) + // rdi : the target to call + Register registers[] = {rdi, rcx}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} void ConstructStubDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { @@ -214,13 +195,12 @@ void AllocateHeapNumberDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(0, nullptr, nullptr); } -#define SIMD128_ALLOC_DESC(TYPE, Type, type, lane_count, lane_type) \ - void Allocate##Type##Descriptor::InitializePlatformSpecific( \ - CallInterfaceDescriptorData* data) { \ - data->InitializePlatformSpecific(0, nullptr, nullptr); \ - } -SIMD128_TYPES(SIMD128_ALLOC_DESC) -#undef SIMD128_ALLOC_DESC +void ArrayConstructorDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // kTarget, kNewTarget, kActualArgumentsCount, kAllocationSite + Register registers[] = {rdi, rdx, rax, rbx}; + data->InitializePlatformSpecific(arraysize(registers), registers, NULL); +} void ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { @@ -413,6 +393,14 @@ void ResumeGeneratorDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = { + rbx, // loaded new FP + }; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + } // namespace internal } // namespace v8 |