v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
v8::internal::compiler::X64OperandGeneratorT Class Referencefinal
Inheritance diagram for v8::internal::compiler::X64OperandGeneratorT:
Collaboration diagram for v8::internal::compiler::X64OperandGeneratorT:

Public Member Functions

 X64OperandGeneratorT (InstructionSelectorT *selector)
 
bool CanBeImmediate (OpIndex node)
 
int32_t GetImmediateIntegerValue (OpIndex node)
 
bool CanBeMemoryOperand (InstructionCode opcode, OpIndex node, OpIndex input, int effect_level)
 
bool IsZeroIntConstant (OpIndex node) const
 
AddressingMode GenerateMemoryOperandInputs (OptionalOpIndex index, int scale_exponent, OpIndex base, int64_t displacement, DisplacementMode displacement_mode, InstructionOperand inputs[], size_t *input_count, RegisterUseKind reg_kind=RegisterUseKind::kUseRegister)
 
AddressingMode GetEffectiveAddressMemoryOperand (OpIndex operand, InstructionOperand inputs[], size_t *input_count, RegisterUseKind reg_kind=RegisterUseKind::kUseRegister)
 
InstructionOperand GetEffectiveIndexOperand (OpIndex index, AddressingMode *mode)
 
bool CanBeBetterLeftOperand (OpIndex node) const
 
- Public Member Functions inherited from v8::internal::compiler::OperandGeneratorT
 OperandGeneratorT (InstructionSelectorT *selector)
 
InstructionOperand NoOutput ()
 
InstructionOperand DefineAsRegister (turboshaft::OpIndex node)
 
InstructionOperand DefineSameAsInput (turboshaft::OpIndex node, int input_index)
 
InstructionOperand DefineSameAsFirst (turboshaft::OpIndex node)
 
InstructionOperand DefineAsFixed (turboshaft::OpIndex node, Register reg)
 
template<typename FPRegType >
InstructionOperand DefineAsFixed (turboshaft::OpIndex node, FPRegType reg)
 
InstructionOperand DefineAsConstant (turboshaft::OpIndex node)
 
InstructionOperand DefineAsLocation (turboshaft::OpIndex node, LinkageLocation location)
 
InstructionOperand DefineAsDualLocation (turboshaft::OpIndex node, LinkageLocation primary_location, LinkageLocation secondary_location)
 
InstructionOperand Use (turboshaft::OpIndex node)
 
InstructionOperand UseAnyAtEnd (turboshaft::OpIndex node)
 
InstructionOperand UseAny (turboshaft::OpIndex node)
 
InstructionOperand UseRegisterOrSlotOrConstant (turboshaft::OpIndex node)
 
InstructionOperand UseUniqueRegisterOrSlotOrConstant (turboshaft::OpIndex node)
 
InstructionOperand UseRegister (turboshaft::OpIndex node)
 
InstructionOperand UseRegisterAtEnd (turboshaft::OpIndex node)
 
InstructionOperand UseUniqueSlot (turboshaft::OpIndex node)
 
InstructionOperand UseUnique (turboshaft::OpIndex node)
 
InstructionOperand UseUniqueRegister (turboshaft::OpIndex node)
 
InstructionOperand UseRegister (turboshaft::OpIndex node, RegisterUseKind unique_reg)
 
InstructionOperand UseFixed (turboshaft::OpIndex node, Register reg)
 
template<typename FPRegType >
InstructionOperand UseFixed (turboshaft::OpIndex node, FPRegType reg)
 
InstructionOperand UseImmediate (int immediate)
 
InstructionOperand UseImmediate64 (int64_t immediate)
 
InstructionOperand UseImmediate (turboshaft::OpIndex node)
 
InstructionOperand UseNegatedImmediate (turboshaft::OpIndex node)
 
InstructionOperand UseLocation (turboshaft::OpIndex node, LinkageLocation location)
 
InstructionOperand UsePointerLocation (LinkageLocation to_location, LinkageLocation from_location)
 
InstructionOperand TempRegister ()
 
int AllocateVirtualRegister ()
 
InstructionOperand DefineSameAsFirstForVreg (int vreg)
 
InstructionOperand DefineAsRegistertForVreg (int vreg)
 
InstructionOperand UseRegisterForVreg (int vreg)
 
InstructionOperand UseRegisterWithMode (turboshaft::OpIndex node, RegisterMode register_mode)
 
InstructionOperand TempDoubleRegister ()
 
InstructionOperand TempSimd128Register ()
 
InstructionOperand TempSimd256Register ()
 
InstructionOperand TempRegister (Register reg)
 
InstructionOperand TempRegister (int code)
 
template<typename FPRegType >
InstructionOperand TempFpRegister (FPRegType reg)
 
InstructionOperand TempImmediate (int32_t imm)
 
InstructionOperand TempLocation (LinkageLocation location)
 
InstructionOperand Label (turboshaft::Block *block)
 
- Public Member Functions inherited from v8::internal::compiler::TurboshaftAdapter
 TurboshaftAdapter (turboshaft::Graph *graph)
 
bool is_load (turboshaft::OpIndex node) const
 
bool is_load_root_register (turboshaft::OpIndex node) const
 
LoadView load_view (turboshaft::OpIndex node)
 
StoreView store_view (turboshaft::OpIndex node)
 
turboshaft::Graphturboshaft_graph () const
 
turboshaft::Blockblock (turboshaft::Graph *schedule, turboshaft::OpIndex node) const
 
RpoNumber rpo_number (const turboshaft::Block *block) const
 
const ZoneVector< turboshaft::Block * > & rpo_order (turboshaft::Graph *schedule)
 
bool IsLoopHeader (const turboshaft::Block *block) const
 
size_t PredecessorCount (const turboshaft::Block *block) const
 
turboshaft::BlockPredecessorAt (const turboshaft::Block *block, size_t index) const
 
base::iterator_range< turboshaft::Graph::OpIndexIteratornodes (const turboshaft::Block *block)
 
bool IsRetain (turboshaft::OpIndex node) const
 
bool IsHeapConstant (turboshaft::OpIndex node) const
 
bool IsExternalConstant (turboshaft::OpIndex node) const
 
bool IsRelocatableWasmConstant (turboshaft::OpIndex node) const
 
bool IsLoadOrLoadImmutable (turboshaft::OpIndex node) const
 
bool IsProtectedLoad (turboshaft::OpIndex node) const
 
int value_input_count (turboshaft::OpIndex node) const
 
turboshaft::OpIndex input_at (turboshaft::OpIndex node, size_t index) const
 
base::Vector< const turboshaft::OpIndexinputs (turboshaft::OpIndex node) const
 
turboshaft::Opcode opcode (turboshaft::OpIndex node) const
 
uint32_t id (turboshaft::OpIndex node) const
 
- Public Member Functions inherited from v8::internal::compiler::turboshaft::OperationMatcher
 OperationMatcher (const Graph &graph)
 
template<class Op >
bool Is (V< AnyOrNone > op_idx) const
 
template<class Op >
const underlying_operation_t< Op > * TryCast (V< AnyOrNone > op_idx) const
 
template<class Op >
const underlying_operation_t< Op > & Cast (V< AnyOrNone > op_idx) const
 
const OperationGet (V< AnyOrNone > op_idx) const
 
V< AnyOrNoneIndex (const Operation &op) const
 
bool MatchZero (V< Any > matched) const
 
bool MatchIntegralZero (V< Any > matched) const
 
bool MatchSmiZero (V< Any > matched) const
 
bool MatchFloat32Constant (V< Any > matched, float *constant) const
 
bool MatchFloat32Constant (V< Any > matched, i::Float32 *constant) const
 
bool MatchFloat64Constant (V< Any > matched, double *constant) const
 
bool MatchFloat64Constant (V< Any > matched, i::Float64 *constant) const
 
bool MatchFloat (V< Any > matched, double *value) const
 
bool MatchFloat (V< Any > matched, double value) const
 
bool MatchNaN (V< Float > matched) const
 
bool MatchHeapConstant (V< Any > matched, Handle< HeapObject > *tagged=nullptr) const
 
bool MatchIntegralWordConstant (V< Any > matched, WordRepresentation rep, uint64_t *unsigned_constant, int64_t *signed_constant=nullptr) const
 
bool MatchIntegralWordConstant (V< Any > matched, WordRepresentation rep, int64_t *signed_constant) const
 
bool MatchIntegralWord32Constant (V< Any > matched, uint32_t *constant) const
 
bool MatchIntegralWord64Constant (V< Any > matched, uint64_t *constant) const
 
bool MatchIntegralWord32Constant (V< Any > matched, uint32_t constant) const
 
bool MatchIntegralWord64Constant (V< Any > matched, int64_t *constant) const
 
bool MatchIntegralWord32Constant (V< Any > matched, int32_t *constant) const
 
template<typename T = intptr_t>
bool MatchIntegralWordPtrConstant (V< Any > matched, T *constant) const
 
bool MatchSignedIntegralConstant (V< Any > matched, int64_t *constant) const
 
bool MatchUnsignedIntegralConstant (V< Any > matched, uint64_t *constant) const
 
bool MatchExternalConstant (V< Any > matched, ExternalReference *reference) const
 
bool MatchWasmStubCallConstant (V< Any > matched, uint64_t *stub_id) const
 
template<typename T >
bool MatchChange (V< Any > matched, VMatch< T > input, OMatch< ChangeOp::Kind > kind={}, OMatch< ChangeOp::Assumption > assumption={}, OMatch< RegisterRepresentation > from={}, OMatch< RegisterRepresentation > to={}) const
 
bool MatchTruncateWord64ToWord32 (V< Any > matched, VMatch< Word64 > input) const
 
template<typename T >
requires (IsWord<T>())
bool MatchWordBinop (V< Any > matched, VMatch< T > left, VMatch< T > right, OMatch< WordBinopOp::Kind > kind={}, OMatch< WordRepresentation > rep={}) const
 
template<class T >
requires (IsWord<T>())
bool MatchWordAdd (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const
 
template<class T >
requires (IsWord<T>())
bool MatchWordSub (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const
 
template<class T >
requires (IsWord<T>())
bool MatchWordMul (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const
 
template<class T >
requires (IsWord<T>())
bool MatchBitwiseAnd (V< Any > matched, V< T > *left, V< T > *right, WordRepresentation rep) const
 
template<class T >
requires (IsWord<T>())
bool MatchBitwiseAndWithConstant (V< Any > matched, V< T > *value, uint64_t *constant, WordRepresentation rep) const
 
template<typename T >
bool MatchEqual (V< Any > matched, V< T > *left, V< T > *right) const
 
bool MatchFloatUnary (V< Any > matched, V< Float > *input, FloatUnaryOp::Kind kind, FloatRepresentation rep) const
 
bool MatchFloatRoundDown (V< Any > matched, V< Float > *input, FloatRepresentation rep) const
 
bool MatchFloatBinary (V< Any > matched, V< Float > *left, V< Float > *right, FloatBinopOp::Kind kind, FloatRepresentation rep) const
 
bool MatchFloatSub (V< Any > matched, V< Float > *left, V< Float > *right, FloatRepresentation rep) const
 
template<class T >
requires (IsWord<T>())
bool MatchConstantShift (V< Any > matched, V< T > *input, ShiftOp::Kind *kind, WordRepresentation *rep, int *amount) const
 
template<class T >
requires (IsWord<T>())
bool MatchConstantShift (V< Any > matched, V< T > *input, ShiftOp::Kind kind, WordRepresentation rep, int *amount) const
 
template<class T >
requires (IsWord<T>())
bool MatchConstantRightShift (V< Any > matched, V< T > *input, WordRepresentation rep, int *amount) const
 
template<class T >
requires (IsWord<T>())
bool MatchConstantLeftShift (V< Any > matched, V< T > *input, WordRepresentation rep, int *amount) const
 
template<class T >
requires (IsWord<T>())
bool MatchConstantShiftRightArithmeticShiftOutZeros (V< Any > matched, V< T > *input, WordRepresentation rep, uint16_t *amount) const
 
bool MatchPhi (V< Any > matched, std::optional< int > input_count=std::nullopt) const
 
bool MatchPowerOfTwoWordConstant (V< Any > matched, int64_t *ret_cst, WordRepresentation rep) const
 
bool MatchPowerOfTwoWord32Constant (V< Any > matched, int32_t *divisor) const
 

Additional Inherited Members

- Public Types inherited from v8::internal::compiler::OperandGeneratorT
enum class  RegisterUseKind { kUseRegister , kUseUniqueRegister }
 
enum  RegisterMode { kRegister , kUniqueRegister }
 
- Public Types inherited from v8::internal::compiler::turboshaft::OperationMatcher
template<typename T >
using VMatch = detail::ValueMatch<T, const_or_v_exists_v<T>>
 
template<typename T >
using OMatch = detail::OptionMatch<T>
 
- Static Public Member Functions inherited from v8::internal::compiler::TurboshaftAdapter
static turboshaft::OpIndex value (turboshaft::OptionalOpIndex node)
 
- Static Public Attributes inherited from v8::internal::compiler::TurboshaftAdapter
static constexpr bool IsTurbofan = false
 
static constexpr bool IsTurboshaft = true
 
static constexpr bool AllowsImplicitWord64ToWord32Truncation = true
 
- Protected Member Functions inherited from v8::internal::compiler::OperandGeneratorT
InstructionSelectorTselector () const
 
InstructionSequencesequence () const
 
Zonezone () const
 

Detailed Description

Definition at line 535 of file instruction-selector-x64.cc.

Constructor & Destructor Documentation

◆ X64OperandGeneratorT()

v8::internal::compiler::X64OperandGeneratorT::X64OperandGeneratorT ( InstructionSelectorT * selector)
inlineexplicit

Definition at line 537 of file instruction-selector-x64.cc.

Member Function Documentation

◆ CanBeBetterLeftOperand()

bool v8::internal::compiler::X64OperandGeneratorT::CanBeBetterLeftOperand ( OpIndex node) const
inline

Definition at line 738 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CanBeImmediate()

bool v8::internal::compiler::X64OperandGeneratorT::CanBeImmediate ( OpIndex node)
inline

Definition at line 540 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CanBeMemoryOperand()

bool v8::internal::compiler::X64OperandGeneratorT::CanBeMemoryOperand ( InstructionCode opcode,
OpIndex node,
OpIndex input,
int effect_level )
inline

Definition at line 548 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GenerateMemoryOperandInputs()

AddressingMode v8::internal::compiler::X64OperandGeneratorT::GenerateMemoryOperandInputs ( OptionalOpIndex index,
int scale_exponent,
OpIndex base,
int64_t displacement,
DisplacementMode displacement_mode,
InstructionOperand inputs[],
size_t * input_count,
RegisterUseKind reg_kind = RegisterUseKind::kUseRegister )
inline

Definition at line 622 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetEffectiveAddressMemoryOperand()

AddressingMode v8::internal::compiler::X64OperandGeneratorT::GetEffectiveAddressMemoryOperand ( OpIndex operand,
InstructionOperand inputs[],
size_t * input_count,
RegisterUseKind reg_kind = RegisterUseKind::kUseRegister )

Definition at line 767 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetEffectiveIndexOperand()

InstructionOperand v8::internal::compiler::X64OperandGeneratorT::GetEffectiveIndexOperand ( OpIndex index,
AddressingMode * mode )
inline

Definition at line 727 of file instruction-selector-x64.cc.

Here is the call graph for this function:

◆ GetImmediateIntegerValue()

int32_t v8::internal::compiler::X64OperandGeneratorT::GetImmediateIntegerValue ( OpIndex node)
inline

Definition at line 544 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsZeroIntConstant()

bool v8::internal::compiler::X64OperandGeneratorT::IsZeroIntConstant ( OpIndex node) const
inline

Definition at line 606 of file instruction-selector-x64.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

The documentation for this class was generated from the following file: