diff options
Diffstat (limited to 'deps/v8/src/mips/interface-descriptors-mips.cc')
-rw-r--r-- | deps/v8/src/mips/interface-descriptors-mips.cc | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/deps/v8/src/mips/interface-descriptors-mips.cc b/deps/v8/src/mips/interface-descriptors-mips.cc index 1ece4812a3..0eda758193 100644 --- a/deps/v8/src/mips/interface-descriptors-mips.cc +++ b/deps/v8/src/mips/interface-descriptors-mips.cc @@ -6,6 +6,8 @@ #include "src/interface-descriptors.h" +#include "src/frames.h" + namespace v8 { namespace internal { @@ -20,6 +22,33 @@ void CallInterfaceDescriptor::DefaultInitializePlatformSpecific( default_stub_registers); } +// On MIPS it is not allowed to use odd numbered floating point registers +// (e.g. f1, f3, etc.) for parameters. This can happen if we use +// DefaultInitializePlatformSpecific to assign float registers for parameters. +// E.g if fourth parameter goes to float register, f7 would be assigned for +// parameter (a3 casted to int is 7). +bool CallInterfaceDescriptor::IsValidFloatParameterRegister(Register reg) { + return reg.code() % 2 == 0; +} + +void WasmI32AtomicWaitDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + /* Register t4 correspond to f12 FPU register. */ + const Register default_stub_registers[] = {a0, a1, t4}; + CHECK_EQ(static_cast<size_t>(kParameterCount), + arraysize(default_stub_registers)); + data->InitializePlatformSpecific(kParameterCount, default_stub_registers); +} + +void WasmI64AtomicWaitDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + /* Register t4 correspond to f12 FPU register. */ + const Register default_stub_registers[] = {a0, a1, a2, t4}; + CHECK_EQ(static_cast<size_t>(kParameterCount), + arraysize(default_stub_registers)); + data->InitializePlatformSpecific(kParameterCount, default_stub_registers); +} + void RecordWriteDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { const Register default_stub_registers[] = {a0, a1, a2, a3, kReturnRegister0}; @@ -70,12 +99,6 @@ void TypeofDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } -void CallFunctionDescriptor::InitializePlatformSpecific( - CallInterfaceDescriptorData* data) { - Register registers[] = {a1}; - data->InitializePlatformSpecific(arraysize(registers), registers); -} - void CallTrampolineDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { // a1: target @@ -208,10 +231,9 @@ void ArgumentsAdaptorDescriptor::InitializePlatformSpecific( void ApiCallbackDescriptor::InitializePlatformSpecific( CallInterfaceDescriptorData* data) { Register registers[] = { - JavaScriptFrame::context_register(), // callee context - t0, // call_data - a2, // holder - a1, // api_function_address + JavaScriptFrame::context_register(), // kTargetContext + a1, // kApiFunctionAddress + a2, // kArgc }; data->InitializePlatformSpecific(arraysize(registers), registers); } @@ -263,6 +285,12 @@ void FrameDropperTrampolineDescriptor::InitializePlatformSpecific( data->InitializePlatformSpecific(arraysize(registers), registers); } +void RunMicrotasksEntryDescriptor::InitializePlatformSpecific( + CallInterfaceDescriptorData* data) { + Register registers[] = {a0, a1}; + data->InitializePlatformSpecific(arraysize(registers), registers); +} + } // namespace internal } // namespace v8 |