diff options
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.h | 53 |
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 |