14void CheckRegisterConfiguration(
int count,
const Register*
registers,
22 DCHECK(
reg.is_valid() || dreg.is_valid());
24#ifdef V8_COMPRESS_POINTERS
31 if (dreg.is_valid()) {
32 DCHECK(!double_reglist.has(dreg));
33 double_reglist.set(dreg);
48 CheckRegisterConfiguration(register_parameter_count,
registers,
50 CheckRegisterConfiguration(
return_count, return_registers,
51 return_double_registers);
69 const MachineType* machine_types,
int machine_types_length) {
74 if (machine_types ==
nullptr) {
78 DCHECK_EQ(machine_types_length, types_length);
87bool CallInterfaceDescriptorData::AllStackParametersAreTagged()
const {
91 for (
int i = first_stack_param;
i < types_length;
i++) {
112#define INTERFACE_DESCRIPTOR(name, ...) \
113 name##Descriptor().Initialize(&call_descriptor_data_[CallDescriptors::name]);
115#undef INTERFACE_DESCRIPTOR
134#define DEF_CASE(name, ...) \
135 case CallDescriptors::name: \
136 return #name " Descriptor";
146#if defined(V8_TARGET_ARCH_MIPS64)
147 return reg.code() % 2 == 0;
154template <
typename DerivedDescriptor>
158void WriteBarrierDescriptor::Verify(CallInterfaceDescriptorData* data) {
172 RegList allocatable_regs = data->allocatable_registers();
175 VerifyArgumentRegisterCount(data, 4);
178void IndirectPointerWriteBarrierDescriptor::Verify(
179 CallInterfaceDescriptorData* data) {
180 WriteBarrierDescriptor::Verify(data);
static void InitializeOncePerProcess()
static CallInterfaceDescriptorData call_descriptor_data_[NUMBER_OF_DESCRIPTORS]
static Key GetKey(const CallInterfaceDescriptorData *data)
const Register * register_params_
void InitializeTypes(const MachineType *machine_types, int machine_types_length)
StackArgumentOrder stack_order_
const DoubleRegister * double_register_params_
bool IsInitializedRegisters() const
StackArgumentOrder stack_order() const
const Register * register_returns_
bool IsInitializedTypes() const
bool IsInitialized() const
MachineType * machine_types_
void InitializeRegisters(Flags flags, CodeEntrypointTag tag, int return_count, int parameter_count, StackArgumentOrder stack_order, int register_parameter_count, const Register *registers, const DoubleRegister *double_registers, const Register *return_registers, const DoubleRegister *return_double_registers)
CodeEntrypointTag tag() const
int register_param_count_
const DoubleRegister * double_register_returns_
const char * DebugName() const
const CallInterfaceDescriptorData * data_
bool IsValidFloatParameterRegister(Register reg)
static constexpr MachineType AnyTagged()
static constexpr bool HasContextParameter()
static constexpr Register ObjectRegister()
static constexpr Register ValueRegister()
static constexpr Register SlotAddressRegister()
#define INTERFACE_DESCRIPTOR(name,...)
#define DEF_CASE(name,...)
#define INTERFACE_DESCRIPTOR_LIST(V)
RegListBase< RegisterT > registers
constexpr Register kRootRegister
RegListBase< DoubleRegister > DoubleRegList
DwVfpRegister DoubleRegister
RegListBase< Register > RegList
constexpr Register kInterpreterAccumulatorRegister
constexpr Register kReturnRegister0
constexpr Register kContextRegister
V8_EXPORT_PRIVATE bool AreAliased(const CPURegister ®1, const CPURegister ®2, const CPURegister ®3=NoReg, const CPURegister ®4=NoReg, const CPURegister ®5=NoReg, const CPURegister ®6=NoReg, const CPURegister ®7=NoReg, const CPURegister ®8=NoReg)
constexpr Register kPtrComprCageBaseRegister
T * NewArray(size_t size)
constexpr Register kJavaScriptCallNewTargetRegister
constexpr Register kJSFunctionRegister
#define DCHECK_NE(v1, v2)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)