diff options
Diffstat (limited to 'deps/v8/src/ia32/interface-descriptors-ia32.cc')
-rw-r--r-- | deps/v8/src/ia32/interface-descriptors-ia32.cc | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/deps/v8/src/ia32/interface-descriptors-ia32.cc b/deps/v8/src/ia32/interface-descriptors-ia32.cc index 2077dd76e6..ad381c7eb2 100644 --- a/deps/v8/src/ia32/interface-descriptors-ia32.cc +++ b/deps/v8/src/ia32/interface-descriptors-ia32.cc @@ -68,6 +68,11 @@ const Register ArgumentsAccessNewDescriptor::parameter_count() { return ecx; } const Register ArgumentsAccessNewDescriptor::parameter_pointer() { return edx; } +const Register RestParamAccessDescriptor::parameter_count() { return ecx; } +const Register RestParamAccessDescriptor::parameter_pointer() { return edx; } +const Register RestParamAccessDescriptor::rest_parameter_index() { return ebx; } + + const Register ApiGetterDescriptor::function_address() { return edx; } @@ -131,6 +136,13 @@ void TypeofDescriptor::InitializePlatformSpecific( } +void FastCloneRegExpDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {edi, eax, ecx, edx}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + + void FastCloneShallowArrayDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {eax, ebx, ecx}; @@ -191,7 +203,7 @@ void CallConstructDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // eax : number of arguments // ebx : feedback vector - // ecx : original constructor (for IsSuperConstructorCall) + // ecx : new target (for IsSuperConstructorCall) // edx : slot in feedback vector (Smi, for RecordCallTarget) // edi : constructor function // TODO(turbofan): So far we don't gather type feedback and hence skip the @@ -210,6 +222,27 @@ void CallTrampolineDescriptor::InitializePlatformSpecific( } +void ConstructStubDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // eax : number of arguments + // edx : the new target + // edi : the target to call + // ebx : allocation site or undefined + Register registers[] = {edi, edx, eax, ebx}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + + +void ConstructTrampolineDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // eax : number of arguments + // edx : the new target + // edi : the target to call + Register registers[] = {edi, edx, eax}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + + void RegExpConstructResultDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {ecx, ebx, eax}; @@ -348,6 +381,7 @@ void ArgumentAdaptorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { edi, // JSFunction + edx, // the new target eax, // actual number of arguments ebx, // expected number of arguments }; @@ -380,27 +414,6 @@ void ApiAccessorDescriptor::InitializePlatformSpecific( } -void MathRoundVariantCallFromUnoptimizedCodeDescriptor:: - InitializePlatformSpecific(CallInterfaceDescriptorData* data) { - Register registers[] = { - edi, // math rounding function - edx, // vector slot id - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - - -void MathRoundVariantCallFromOptimizedCodeDescriptor:: - InitializePlatformSpecific(CallInterfaceDescriptorData* data) { - Register registers[] = { - edi, // math rounding function - edx, // vector slot id - ebx // type vector - }; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - - void InterpreterPushArgsAndCallDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { @@ -416,7 +429,7 @@ void InterpreterPushArgsAndConstructDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { eax, // argument count (not including receiver) - edx, // original constructor + edx, // new target edi, // constructor ebx, // address of first argument }; |