diff options
Diffstat (limited to 'deps/v8/src/ia32/interface-descriptors-ia32.cc')
-rw-r--r-- | deps/v8/src/ia32/interface-descriptors-ia32.cc | 65 |
1 files changed, 28 insertions, 37 deletions
diff --git a/deps/v8/src/ia32/interface-descriptors-ia32.cc b/deps/v8/src/ia32/interface-descriptors-ia32.cc index 71205b10d0..e2c04f7525 100644 --- a/deps/v8/src/ia32/interface-descriptors-ia32.cc +++ b/deps/v8/src/ia32/interface-descriptors-ia32.cc @@ -13,13 +13,7 @@ const Register CallInterfaceDescriptor::ContextRegister() { return esi; } void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( CallInterfaceDescriptorData* data, int register_parameter_count) { -#if defined(V8_TARGET_ARCH_IA32) && defined(V8_EMBEDDED_BUILTINS) - // TODO(jgruber,v8:6666): Keep kRootRegister free unconditionally. constexpr Register default_stub_registers[] = {eax, ecx, edx, edi}; - DCHECK(!AreAliased(eax, ecx, edx, edi, kRootRegister)); -#else - constexpr Register default_stub_registers[] = {eax, ebx, ecx, edx, edi}; -#endif STATIC_ASSERT(arraysize(default_stub_registers) == kMaxBuiltinRegisterParams); CHECK_LE(static_cast<size_t>(register_parameter_count), arraysize(default_stub_registers)); @@ -29,7 +23,7 @@ void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( void RecordWriteDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - static const Register default_stub_registers[] = {ebx, ecx, edx, edi, + static const Register default_stub_registers[] = {ecx, edx, edi, kReturnRegister0}; data->RestrictAllocatableRegisters(default_stub_registers, @@ -49,32 +43,31 @@ const Register LoadDescriptor::ReceiverRegister() { return edx; } const Register LoadDescriptor::NameRegister() { return ecx; } const Register LoadDescriptor::SlotRegister() { return eax; } -const Register LoadWithVectorDescriptor::VectorRegister() { return ebx; } +const Register LoadWithVectorDescriptor::VectorRegister() { return no_reg; } 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 StoreDescriptor::ValueRegister() { return no_reg; } +const Register StoreDescriptor::SlotRegister() { return no_reg; } -const Register StoreWithVectorDescriptor::VectorRegister() { return ebx; } +const Register StoreWithVectorDescriptor::VectorRegister() { return no_reg; } const Register StoreTransitionDescriptor::SlotRegister() { return no_reg; } -const Register StoreTransitionDescriptor::VectorRegister() { return ebx; } +const Register StoreTransitionDescriptor::VectorRegister() { return no_reg; } const Register StoreTransitionDescriptor::MapRegister() { return edi; } const Register ApiGetterDescriptor::HolderRegister() { return ecx; } const Register ApiGetterDescriptor::CallbackRegister() { return eax; } const Register GrowArrayElementsDescriptor::ObjectRegister() { return eax; } -const Register GrowArrayElementsDescriptor::KeyRegister() { return ebx; } - +const Register GrowArrayElementsDescriptor::KeyRegister() { return ecx; } // static const Register TypeConversionDescriptor::ArgumentRegister() { return eax; } void TypeofDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { - Register registers[] = {ebx}; + Register registers[] = {ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -96,9 +89,9 @@ void CallVarargsDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // eax : number of arguments (on the stack, not including receiver) // edi : the target to call - // ebx : arguments list (FixedArray) // ecx : arguments list length (untagged) - Register registers[] = {edi, eax, ebx, ecx}; + // On the stack : arguments list (FixedArray) + Register registers[] = {edi, eax, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -115,16 +108,16 @@ void CallWithSpreadDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // eax : number of arguments (on the stack, not including receiver) // edi : the target to call - // ebx : the object to spread - Register registers[] = {edi, eax, ebx}; + // ecx : the object to spread + Register registers[] = {edi, eax, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } void CallWithArrayLikeDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // edi : the target to call - // ebx : the arguments list - Register registers[] = {edi, ebx}; + // edx : the arguments list + Register registers[] = {edi, edx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -133,9 +126,9 @@ void ConstructVarargsDescriptor::InitializePlatformSpecific( // eax : number of arguments (on the stack, not including receiver) // edi : the target to call // edx : the new target - // ebx : arguments list (FixedArray) // ecx : arguments list length (untagged) - Register registers[] = {edi, edx, eax, ebx, ecx}; + // On the stack : arguments list (FixedArray) + Register registers[] = {edi, edx, eax, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -154,8 +147,8 @@ void ConstructWithSpreadDescriptor::InitializePlatformSpecific( // eax : number of arguments (on the stack, not including receiver) // edi : the target to call // edx : the new target - // ebx : the object to spread - Register registers[] = {edi, edx, eax, ebx}; + // ecx : the object to spread + Register registers[] = {edi, edx, eax, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -163,8 +156,8 @@ void ConstructWithArrayLikeDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // edi : the target to call // edx : the new target - // ebx : the arguments list - Register registers[] = {edi, edx, ebx}; + // ecx : the arguments list + Register registers[] = {edi, edx, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -173,8 +166,9 @@ void ConstructStubDescriptor::InitializePlatformSpecific( // eax : number of arguments // edx : the new target // edi : the target to call - // ebx : allocation site or undefined - Register registers[] = {edi, edx, eax, ebx}; + // ecx : allocation site or undefined + // TODO(jgruber): Remove the unused allocation site parameter. + Register registers[] = {edi, edx, eax, ecx}; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -202,13 +196,13 @@ void BinaryOpDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -void ArgumentAdaptorDescriptor::InitializePlatformSpecific( +void ArgumentsAdaptorDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { edi, // JSFunction edx, // the new target eax, // actual number of arguments - ebx, // expected number of arguments + ecx, // expected number of arguments }; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -217,7 +211,7 @@ void ApiCallbackDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { JavaScriptFrame::context_register(), // callee context - ebx, // call_data + eax, // call_data ecx, // holder edx, // api_function_address }; @@ -236,7 +230,7 @@ void InterpreterPushArgsThenCallDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { eax, // argument count (not including receiver) - ebx, // address of first argument + ecx, // address of first argument edi // the target callable to be call }; data->InitializePlatformSpecific(arraysize(registers), registers); @@ -246,9 +240,6 @@ void InterpreterPushArgsThenConstructDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { eax, // argument count (not including receiver) - edx, // new target - edi, // constructor - ebx, // allocation site feedback ecx, // address of first argument }; data->InitializePlatformSpecific(arraysize(registers), registers); @@ -266,7 +257,7 @@ void ResumeGeneratorDescriptor::InitializePlatformSpecific( void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { - ebx, // loaded new FP + eax, // loaded new FP }; data->InitializePlatformSpecific(arraysize(registers), registers); } |