summaryrefslogtreecommitdiff
path: root/deps/v8/src/mips/interface-descriptors-mips.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/mips/interface-descriptors-mips.cc')
-rw-r--r--deps/v8/src/mips/interface-descriptors-mips.cc48
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