diff options
Diffstat (limited to 'deps/v8/src/x87/interface-descriptors-x87.cc')
-rw-r--r-- | deps/v8/src/x87/interface-descriptors-x87.cc | 109 |
1 files changed, 58 insertions, 51 deletions
diff --git a/deps/v8/src/x87/interface-descriptors-x87.cc b/deps/v8/src/x87/interface-descriptors-x87.cc index e41d42cdf5..4ef88e87dc 100644 --- a/deps/v8/src/x87/interface-descriptors-x87.cc +++ b/deps/v8/src/x87/interface-descriptors-x87.cc @@ -11,6 +11,19 @@ namespace internal { const Register CallInterfaceDescriptor::ContextRegister() { return esi; } +void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( + CallInterfaceDescriptorData* data, int register_parameter_count) { + const Register default_stub_registers[] = {eax, ebx, ecx, edx, edi}; + CHECK_LE(static_cast<size_t>(register_parameter_count), + arraysize(default_stub_registers)); + data->InitializePlatformSpecific(register_parameter_count, + default_stub_registers); +} + +const Register FastNewFunctionContextDescriptor::FunctionRegister() { + return edi; +} +const Register FastNewFunctionContextDescriptor::SlotsRegister() { return eax; } const Register LoadDescriptor::ReceiverRegister() { return edx; } const Register LoadDescriptor::NameRegister() { return ecx; } @@ -22,13 +35,9 @@ const Register LoadWithVectorDescriptor::VectorRegister() { return ebx; } const Register StoreDescriptor::ReceiverRegister() { return edx; } const Register StoreDescriptor::NameRegister() { return ecx; } const Register StoreDescriptor::ValueRegister() { return eax; } +const Register StoreDescriptor::SlotRegister() { return edi; } - -const Register VectorStoreICTrampolineDescriptor::SlotRegister() { return edi; } - - -const Register VectorStoreICDescriptor::VectorRegister() { return ebx; } - +const Register StoreWithVectorDescriptor::VectorRegister() { return ebx; } const Register VectorStoreTransitionDescriptor::SlotRegister() { return no_reg; @@ -44,23 +53,15 @@ const Register VectorStoreTransitionDescriptor::MapRegister() { return edi; } const Register StoreTransitionDescriptor::MapRegister() { return ebx; } -const Register LoadGlobalViaContextDescriptor::SlotRegister() { return ebx; } - - const Register StoreGlobalViaContextDescriptor::SlotRegister() { return ebx; } const Register StoreGlobalViaContextDescriptor::ValueRegister() { return eax; } -const Register InstanceOfDescriptor::LeftRegister() { return edx; } -const Register InstanceOfDescriptor::RightRegister() { return eax; } - - const Register StringCompareDescriptor::LeftRegister() { return edx; } const Register StringCompareDescriptor::RightRegister() { return eax; } - -const Register ApiGetterDescriptor::function_address() { return edx; } - +const Register ApiGetterDescriptor::HolderRegister() { return ecx; } +const Register ApiGetterDescriptor::CallbackRegister() { return eax; } const Register MathPowTaggedDescriptor::exponent() { return eax; } @@ -80,13 +81,6 @@ void FastNewClosureDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers, NULL); } - -void FastNewContextDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {edi}; - data->InitializePlatformSpecific(arraysize(registers), registers, NULL); -} - void FastNewObjectDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = {edi, edx}; @@ -250,50 +244,37 @@ void AllocateHeapNumberDescriptor::InitializePlatformSpecific( SIMD128_TYPES(SIMD128_ALLOC_DESC) #undef SIMD128_ALLOC_DESC -void AllocateInNewSpaceDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - - -void ArrayConstructorConstantArgCountDescriptor::InitializePlatformSpecific( +void ArrayNoArgumentConstructorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // register state // eax -- number of arguments // edi -- function // ebx -- allocation site with elements kind - Register registers[] = {edi, ebx}; + Register registers[] = {edi, ebx, eax}; data->InitializePlatformSpecific(arraysize(registers), registers, NULL); } - -void ArrayConstructorDescriptor::InitializePlatformSpecific( +void ArraySingleArgumentConstructorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - // stack param count needs (constructor pointer, and single argument) - Register registers[] = {edi, ebx, eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - - -void InternalArrayConstructorConstantArgCountDescriptor:: - InitializePlatformSpecific(CallInterfaceDescriptorData* data) { // register state // eax -- number of arguments // edi -- function - Register registers[] = {edi}; + // ebx -- allocation site with elements kind + Register registers[] = {edi, ebx, eax}; data->InitializePlatformSpecific(arraysize(registers), registers, NULL); } - -void InternalArrayConstructorDescriptor::InitializePlatformSpecific( +void ArrayNArgumentsConstructorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - // stack param count needs (constructor pointer, and single argument) - Register registers[] = {edi, eax}; - data->InitializePlatformSpecific(arraysize(registers), registers); + // register state + // eax -- number of arguments + // edi -- function + // ebx -- allocation site with elements kind + Register registers[] = {edi, ebx, eax}; + data->InitializePlatformSpecific(arraysize(registers), registers, NULL); } -void FastArrayPushDescriptor::InitializePlatformSpecific( +void VarArgFunctionDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // stack param count needs (arg count) Register registers[] = {eax}; @@ -320,6 +301,22 @@ void BinaryOpWithAllocationSiteDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers, NULL); } +void BinaryOpWithVectorDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + // register state + // edx -- lhs + // eax -- rhs + // edi -- slot id + // ebx -- vector + Register registers[] = {edx, eax, edi, ebx}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + +void CountOpDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {eax}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} void StringAddDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { @@ -380,8 +377,8 @@ void ApiCallbackDescriptorBase::InitializePlatformSpecific( void InterpreterDispatchDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { - kInterpreterAccumulatorRegister, kInterpreterRegisterFileRegister, - kInterpreterBytecodeOffsetRegister, kInterpreterBytecodeArrayRegister}; + kInterpreterAccumulatorRegister, kInterpreterBytecodeOffsetRegister, + kInterpreterBytecodeArrayRegister, kInterpreterDispatchTableRegister}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -416,6 +413,16 @@ void InterpreterCEntryDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void ResumeGeneratorDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = { + eax, // the value to pass to the generator + ebx, // the JSGeneratorObject to resume + edx // the resume mode (tagged) + }; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + } // namespace internal } // namespace v8 |