summaryrefslogtreecommitdiff
path: root/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h')
-rw-r--r--deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h53
1 files changed, 47 insertions, 6 deletions
diff --git a/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h b/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h
index a24330a4c7..50ba12b836 100644
--- a/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h
+++ b/deps/v8/src/codegen/x64/interface-descriptors-x64-inl.h
@@ -18,22 +18,63 @@ constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() {
return registers;
}
+#if DEBUG
+template <typename DerivedDescriptor>
+void StaticCallInterfaceDescriptor<DerivedDescriptor>::
+ VerifyArgumentRegisterCount(CallInterfaceDescriptorData* data,
+ int nof_expected_args) {
+ RegList allocatable_regs = data->allocatable_registers();
+ if (nof_expected_args >= 1) DCHECK(allocatable_regs | arg_reg_1.bit());
+ if (nof_expected_args >= 2) DCHECK(allocatable_regs | arg_reg_2.bit());
+ if (nof_expected_args >= 3) DCHECK(allocatable_regs | arg_reg_3.bit());
+ if (nof_expected_args >= 4) DCHECK(allocatable_regs | arg_reg_4.bit());
+ // Additional arguments are passed on the stack.
+}
+#endif // DEBUG
+
+// static
+constexpr auto WriteBarrierDescriptor::registers() {
+#if V8_TARGET_OS_WIN
+ return RegisterArray(rdi, r8, rcx, rax, r9, rdx, rsi);
+#else
+ return RegisterArray(rdi, rbx, rdx, rcx, rax, rsi);
+#endif // V8_TARGET_OS_WIN
+}
+
+#ifdef V8_IS_TSAN
+// static
+constexpr auto TSANRelaxedStoreDescriptor::registers() {
+ return RegisterArray(arg_reg_1, arg_reg_2, kReturnRegister0);
+}
+
// static
-constexpr auto RecordWriteDescriptor::registers() {
- return RegisterArray(arg_reg_1, arg_reg_2, arg_reg_3, arg_reg_4,
- kReturnRegister0);
+constexpr auto TSANRelaxedLoadDescriptor::registers() {
+ return RegisterArray(arg_reg_1, kReturnRegister0);
}
+#endif // V8_IS_TSAN
// static
constexpr auto DynamicCheckMapsDescriptor::registers() {
+#if V8_TARGET_OS_WIN
return RegisterArray(kReturnRegister0, arg_reg_1, arg_reg_2, arg_reg_3,
kRuntimeCallFunctionRegister, kContextRegister);
+#else
+ STATIC_ASSERT(kContextRegister == arg_reg_2);
+ return RegisterArray(kReturnRegister0, arg_reg_1, arg_reg_2, arg_reg_3,
+ kRuntimeCallFunctionRegister);
+#endif // V8_TARGET_OS_WIN
}
// static
-constexpr auto EphemeronKeyBarrierDescriptor::registers() {
- return RegisterArray(arg_reg_1, arg_reg_2, arg_reg_3, arg_reg_4,
- kReturnRegister0);
+constexpr auto DynamicCheckMapsWithFeedbackVectorDescriptor::registers() {
+#if V8_TARGET_OS_WIN
+ return RegisterArray(kReturnRegister0, arg_reg_1, arg_reg_2, arg_reg_3,
+ kRuntimeCallFunctionRegister, kContextRegister);
+#else
+ STATIC_ASSERT(kContextRegister == arg_reg_2);
+ return RegisterArray(kReturnRegister0, arg_reg_1, arg_reg_2, arg_reg_3,
+ kRuntimeCallFunctionRegister);
+#endif // V8_TARGET_OS_WIN
}
// static