v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
instruction-selector-s390.cc File Reference
Include dependency graph for instruction-selector-s390.cc:

Go to the source code of this file.

Classes

struct  v8::internal::compiler::BaseWithScaledIndexAndDisplacementMatch
 
class  v8::internal::compiler::S390OperandGeneratorT
 

Namespaces

namespace  v8
 
namespace  v8::internal
 
namespace  v8::internal::compiler
 

Macros

#define AndCommonMode
 
#define And64OperandMode   AndCommonMode
 
#define Or64OperandMode   And64OperandMode
 
#define Xor64OperandMode   And64OperandMode
 
#define And32OperandMode    (AndCommonMode | OperandMode::kAllowRI | OperandMode::kUint32Imm)
 
#define Or32OperandMode   And32OperandMode
 
#define Xor32OperandMode   And32OperandMode
 
#define Shift32OperandMode
 
#define Shift64OperandMode
 
#define AddOperandMode
 
#define SubOperandMode
 
#define MulOperandMode    (OperandMode::kArithmeticCommonMode | OperandMode::kInt32Imm)
 
#define OpcodeImmMode(op)
 
#define RESULT_IS_WORD32_LIST(V)
 
#define VISIT_OP_LIST_32(V)
 
#define VISIT_OP_LIST(V)
 
#define DECLARE_VISIT_HELPER_FUNCTIONS(type1, type2, canCombineWithLoad)
 
#define null   ([]() { return false; })
 
#define FLOAT_UNARY_OP_LIST(V)
 
#define FLOAT_BIN_OP_LIST(V)
 
#define WORD32_UNARY_OP_LIST(V)
 
#define WORD32_BIN_OP_LIST(V)
 
#define WORD64_UNARY_OP_LIST(V)
 
#define WORD64_BIN_OP_LIST(V)
 
#define DECLARE_UNARY_OP(type, name, op, mode, try_extra)
 
#define DECLARE_BIN_OP(type, name, op, mode, try_extra)
 
#define VISIT_ATOMIC_BINOP(op)
 
#define VISIT_ATOMIC64_BINOP(op)
 
#define SIMD_TYPES(V)
 
#define SIMD_BINOP_LIST(V)
 
#define SIMD_BINOP_UNIQUE_REGISTER_LIST(V)
 
#define SIMD_UNOP_LIST(V)
 
#define SIMD_UNOP_UNIQUE_REGISTER_LIST(V)
 
#define SIMD_VISIT_EXTRACT_LANE(Type, Sign)
 
#define SIMD_VISIT_REPLACE_LANE(Type)
 
#define SIMD_VISIT_BINOP(Opcode)
 
#define SIMD_VISIT_BINOP_UNIQUE_REGISTER(Opcode)
 
#define SIMD_VISIT_UNOP(Opcode)
 
#define SIMD_VISIT_UNOP_UNIQUE_REGISTER(Opcode)
 
#define SIMD_VISIT_QFMOP(Opcode)
 
#define SIMD_RELAXED_OP_LIST(V)
 
#define SIMD_VISIT_RELAXED_OP(name, op)
 
#define F16_OP_LIST(V)
 
#define VISIT_F16_OP(name)
 

Typedefs

using v8::internal::compiler::OperandModes = base::Flags<OperandMode, uint32_t>
 

Enumerations

enum class  v8::internal::compiler::OperandMode : uint32_t {
  v8::internal::compiler::kNone = 0u , v8::internal::compiler::kShift32Imm = 1u << 0 , v8::internal::compiler::kShift64Imm = 1u << 1 , v8::internal::compiler::kInt32Imm = 1u << 2 ,
  v8::internal::compiler::kInt32Imm_Negate = 1u << 3 , v8::internal::compiler::kUint32Imm = 1u << 4 , v8::internal::compiler::kInt20Imm = 1u << 5 , v8::internal::compiler::kUint12Imm = 1u << 6 ,
  v8::internal::compiler::kAllowRRR = 1u << 7 , v8::internal::compiler::kAllowRM = 1u << 8 , v8::internal::compiler::kAllowRI = 1u << 9 , v8::internal::compiler::kAllowRRI = 1u << 10 ,
  v8::internal::compiler::kAllowRRM = 1u << 11 , v8::internal::compiler::kAllowImmediate = kAllowRI | kAllowRRI , v8::internal::compiler::kAllowMemoryOperand = kAllowRM | kAllowRRM , v8::internal::compiler::kAllowDistinctOps = kAllowRRR | kAllowRRI | kAllowRRM ,
  v8::internal::compiler::kBitWiseCommonMode = kAllowRI , v8::internal::compiler::kArithmeticCommonMode = kAllowRM | kAllowRI
}
 

Functions

std::optional< BaseWithScaledIndexAndDisplacementMatch > v8::internal::compiler::TryMatchBaseWithScaledIndexAndDisplacement64 (InstructionSelectorT *selector, OpIndex node)
 
static void v8::internal::compiler::VisitGeneralStore (InstructionSelectorT *selector, OpIndex node, MachineRepresentation rep, WriteBarrierKind write_barrier_kind=kNoWriteBarrier)
 
static bool v8::internal::compiler::IsContiguousMask64 (uint64_t value, int *mb, int *me)
 
static bool v8::internal::compiler::TryMatchSignExtInt16OrInt8FromWord32Sar (InstructionSelectorT *selector, OpIndex node)
 
template<class Matcher , ArchOpcode neg_opcode>
static bool v8::internal::compiler::TryMatchNegFromSub (InstructionSelectorT *selector, OpIndex node)
 
template<class Matcher , ArchOpcode shift_op>
bool v8::internal::compiler::TryMatchShiftFromMul (InstructionSelectorT *selector, OpIndex node)
 
template<ArchOpcode opcode>
static bool v8::internal::compiler::TryMatchInt32OpWithOverflow (InstructionSelectorT *selector, OpIndex node, OperandModes mode)
 
static bool v8::internal::compiler::TryMatchInt32AddWithOverflow (InstructionSelectorT *selector, OpIndex node)
 
static bool v8::internal::compiler::TryMatchInt32SubWithOverflow (InstructionSelectorT *selector, OpIndex node)
 
static bool v8::internal::compiler::TryMatchInt32MulWithOverflow (InstructionSelectorT *selector, OpIndex node)
 
template<ArchOpcode opcode>
static bool v8::internal::compiler::TryMatchInt64OpWithOverflow (InstructionSelectorT *selector, OpIndex node, OperandModes mode)
 
static bool v8::internal::compiler::TryMatchInt64AddWithOverflow (InstructionSelectorT *selector, OpIndex node)
 
static bool v8::internal::compiler::TryMatchInt64SubWithOverflow (InstructionSelectorT *selector, OpIndex node)
 
void v8::internal::compiler::EmitInt64MulWithOverflow (InstructionSelectorT *selector, OpIndex node, FlagsContinuationT *cont)
 
static bool v8::internal::compiler::TryMatchDoubleConstructFromInsert (InstructionSelectorT *selector, OpIndex node)
 
static bool v8::internal::compiler::CompareLogical (FlagsContinuationT *cont)
 
void v8::internal::compiler::VisitAtomicExchange (InstructionSelectorT *selector, OpIndex node, ArchOpcode opcode, AtomicWidth width)
 
void v8::internal::compiler::VisitAtomicCompareExchange (InstructionSelectorT *selector, OpIndex node, ArchOpcode opcode, AtomicWidth width)
 
void v8::internal::compiler::VisitAtomicBinop (InstructionSelectorT *selector, OpIndex node, ArchOpcode opcode, AtomicWidth width)
 
static int32_t v8::internal::compiler::Pack4Lanes (const uint8_t *shuffle)
 

Variables

OperandModes v8::internal::compiler::immediateModeMask
 

Macro Definition Documentation

◆ AddOperandMode

#define AddOperandMode
Value:
((OperandMode::kArithmeticCommonMode | OperandMode::kInt32Imm | \
(CpuFeatures::IsSupported(DISTINCT_OPS) \
? (OperandMode::kAllowRRR | OperandMode::kAllowRRI) \
: OperandMode::kArithmeticCommonMode)))

Definition at line 74 of file instruction-selector-s390.cc.

◆ And32OperandMode

#define And32OperandMode    (AndCommonMode | OperandMode::kAllowRI | OperandMode::kUint32Imm)

Definition at line 59 of file instruction-selector-s390.cc.

◆ And64OperandMode

#define And64OperandMode   AndCommonMode

Definition at line 55 of file instruction-selector-s390.cc.

◆ AndCommonMode

#define AndCommonMode
Value:
((OperandMode::kAllowRM | \
(CpuFeatures::IsSupported(DISTINCT_OPS) ? OperandMode::kAllowRRR \
: OperandMode::kNone)))

Definition at line 51 of file instruction-selector-s390.cc.

◆ DECLARE_BIN_OP

#define DECLARE_BIN_OP ( type,
name,
op,
mode,
try_extra )
Value:
void InstructionSelectorT::Visit##name(OpIndex node) { \
if (std::function<bool()>(try_extra)()) return; \
Visit##type##BinOp(this, node, op, mode); \
}
const char * name
Definition builtins.cc:39

Definition at line 1743 of file instruction-selector-s390.cc.

◆ DECLARE_UNARY_OP

#define DECLARE_UNARY_OP ( type,
name,
op,
mode,
try_extra )
Value:
void InstructionSelectorT::Visit##name(OpIndex node) { \
if (std::function<bool()>(try_extra)()) return; \
Visit##type##UnaryOp(this, node, op, mode); \
}

Definition at line 1737 of file instruction-selector-s390.cc.

◆ DECLARE_VISIT_HELPER_FUNCTIONS

#define DECLARE_VISIT_HELPER_FUNCTIONS ( type1,
type2,
canCombineWithLoad )
Value:
static inline void Visit##type1##type2##Op( \
InstructionSelectorT* selector, OpIndex node, InstructionCode opcode, \
OperandModes operand_mode, FlagsContinuationT* cont) { \
Visit##type2##Op(selector, node, opcode, operand_mode, cont, \
canCombineWithLoad); \
} \
static inline void Visit##type1##type2##Op( \
InstructionSelectorT* selector, OpIndex node, InstructionCode opcode, \
OperandModes operand_mode) { \
FlagsContinuationT cont; \
Visit##type1##type2##Op(selector, node, opcode, operand_mode, &cont); \
}

Definition at line 748 of file instruction-selector-s390.cc.

◆ F16_OP_LIST

#define F16_OP_LIST ( V)

Definition at line 2983 of file instruction-selector-s390.cc.

◆ FLOAT_BIN_OP_LIST

#define FLOAT_BIN_OP_LIST ( V)
Value:
V(Float64, Float64Mul, kS390_MulDouble, OperandMode::kAllowRM, null) \
V(Float64, Float64Add, kS390_AddDouble, OperandMode::kAllowRM, null) \
V(Float64, Float64Min, kS390_MinDouble, OperandMode::kNone, null) \
V(Float64, Float64Max, kS390_MaxDouble, OperandMode::kNone, null) \
V(Float32, Float32Min, kS390_MinFloat, OperandMode::kNone, null) \
V(Float32, Float32Max, kS390_MaxFloat, OperandMode::kNone, null) \
V(Float32, Float32Div, kS390_DivFloat, OperandMode::kAllowRM, null) \
V(Float32, Float32Mul, kS390_MulFloat, OperandMode::kAllowRM, null) \
V(Float32, Float32Sub, kS390_SubFloat, OperandMode::kAllowRM, null) \
V(Float32, Float32Add, kS390_AddFloat, OperandMode::kAllowRM, null) \
V(Float64, Float64Sub, kS390_SubDouble, OperandMode::kAllowRM, null) \
V(Float64, Float64Div, kS390_DivDouble, OperandMode::kAllowRM, null)
#define V(Name)

Definition at line 1599 of file instruction-selector-s390.cc.

◆ FLOAT_UNARY_OP_LIST

#define FLOAT_UNARY_OP_LIST ( V)

Definition at line 1547 of file instruction-selector-s390.cc.

◆ MulOperandMode

#define MulOperandMode    (OperandMode::kArithmeticCommonMode | OperandMode::kInt32Imm)

Definition at line 84 of file instruction-selector-s390.cc.

◆ null

#define null   ([]() { return false; })

Definition at line 1545 of file instruction-selector-s390.cc.

◆ OpcodeImmMode

#define OpcodeImmMode ( op)
Value:
(S390OpcodeOnlySupport12BitDisp(op) ? OperandMode::kUint12Imm \
: OperandMode::kInt20Imm)

Definition at line 343 of file instruction-selector-s390.cc.

◆ Or32OperandMode

#define Or32OperandMode   And32OperandMode

Definition at line 61 of file instruction-selector-s390.cc.

◆ Or64OperandMode

#define Or64OperandMode   And64OperandMode

Definition at line 56 of file instruction-selector-s390.cc.

◆ RESULT_IS_WORD32_LIST

#define RESULT_IS_WORD32_LIST ( V)

Definition at line 481 of file instruction-selector-s390.cc.

◆ Shift32OperandMode

#define Shift32OperandMode
Value:
((OperandMode::kAllowRI | OperandMode::kShift64Imm | \
(CpuFeatures::IsSupported(DISTINCT_OPS) \
? (OperandMode::kAllowRRR | OperandMode::kAllowRRI) \
: OperandMode::kNone)))

Definition at line 64 of file instruction-selector-s390.cc.

◆ Shift64OperandMode

#define Shift64OperandMode
Value:
((OperandMode::kAllowRI | OperandMode::kShift64Imm | \
OperandMode::kAllowRRR | OperandMode::kAllowRRI))

Definition at line 70 of file instruction-selector-s390.cc.

◆ SIMD_BINOP_LIST

#define SIMD_BINOP_LIST ( V)

Definition at line 2681 of file instruction-selector-s390.cc.

◆ SIMD_BINOP_UNIQUE_REGISTER_LIST

#define SIMD_BINOP_UNIQUE_REGISTER_LIST ( V)
Value:
V(I16x8AddSatS) \
V(I16x8SubSatS) \
V(I16x8AddSatU) \
V(I16x8SubSatU) \
V(I16x8Q15MulRSatS) \
V(I8x16AddSatS) \
V(I8x16SubSatS) \
V(I8x16AddSatU) \
V(I8x16SubSatU)

Definition at line 2787 of file instruction-selector-s390.cc.

◆ SIMD_RELAXED_OP_LIST

#define SIMD_RELAXED_OP_LIST ( V)
Value:
V(F64x2RelaxedMin, F64x2Pmin) \
V(F64x2RelaxedMax, F64x2Pmax) \
V(F32x4RelaxedMin, F32x4Pmin) \
V(F32x4RelaxedMax, F32x4Pmax) \
V(I32x4RelaxedTruncF32x4S, I32x4SConvertF32x4) \
V(I32x4RelaxedTruncF32x4U, I32x4UConvertF32x4) \
V(I32x4RelaxedTruncF64x2SZero, I32x4TruncSatF64x2SZero) \
V(I32x4RelaxedTruncF64x2UZero, I32x4TruncSatF64x2UZero) \
V(I16x8RelaxedQ15MulRS, I16x8Q15MulRSatS) \
V(I8x16RelaxedLaneSelect, S128Select) \
V(I16x8RelaxedLaneSelect, S128Select) \
V(I32x4RelaxedLaneSelect, S128Select) \
V(I64x2RelaxedLaneSelect, S128Select)

Definition at line 2962 of file instruction-selector-s390.cc.

◆ SIMD_TYPES

#define SIMD_TYPES ( V)
Value:
V(F64x2) \
V(F32x4) \
V(I64x2) \
V(I32x4) \
V(I16x8) \
V(I8x16)

Definition at line 2673 of file instruction-selector-s390.cc.

◆ SIMD_UNOP_LIST

#define SIMD_UNOP_LIST ( V)

Definition at line 2798 of file instruction-selector-s390.cc.

◆ SIMD_UNOP_UNIQUE_REGISTER_LIST

#define SIMD_UNOP_UNIQUE_REGISTER_LIST ( V)
Value:
V(I32x4ExtAddPairwiseI16x8S) \
V(I32x4ExtAddPairwiseI16x8U) \
V(I16x8ExtAddPairwiseI8x16S) \
V(I16x8ExtAddPairwiseI8x16U)

Definition at line 2861 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_BINOP

#define SIMD_VISIT_BINOP ( Opcode)
Value:
void InstructionSelectorT::Visit##Opcode(OpIndex node) { \
S390OperandGeneratorT g(this); \
Emit(kS390_##Opcode, g.DefineAsRegister(node), \
g.UseRegister(this->input_at(node, 0)), \
g.UseRegister(this->input_at(node, 1))); \
}

Definition at line 2901 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_BINOP_UNIQUE_REGISTER

#define SIMD_VISIT_BINOP_UNIQUE_REGISTER ( Opcode)
Value:
void InstructionSelectorT::Visit##Opcode(OpIndex node) { \
S390OperandGeneratorT g(this); \
InstructionOperand temps[] = {g.TempSimd128Register(), \
g.TempSimd128Register()}; \
Emit(kS390_##Opcode, g.DefineAsRegister(node), \
g.UseUniqueRegister(this->input_at(node, 0)), \
g.UseUniqueRegister(this->input_at(node, 1)), arraysize(temps), \
temps); \
}
#define arraysize(array)
Definition macros.h:67

Definition at line 2912 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_EXTRACT_LANE

#define SIMD_VISIT_EXTRACT_LANE ( Type,
Sign )
Value:
void InstructionSelectorT::Visit##Type##ExtractLane##Sign(OpIndex node) { \
S390OperandGeneratorT g(this); \
int32_t lane; \
using namespace turboshaft; /* NOLINT(build/namespaces) */ \
const Operation& op = this->Get(node); \
lane = op.template Cast<Simd128ExtractLaneOp>().lane; \
Emit(kS390_##Type##ExtractLane##Sign, g.DefineAsRegister(node), \
g.UseRegister(this->input_at(node, 0)), g.UseImmediate(lane)); \
}
Operation
Definition operation.h:43

Definition at line 2867 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_QFMOP

#define SIMD_VISIT_QFMOP ( Opcode)
Value:
void InstructionSelectorT::Visit##Opcode(OpIndex node) { \
S390OperandGeneratorT g(this); \
Emit(kS390_##Opcode, g.DefineSameAsFirst(node), \
g.UseRegister(this->input_at(node, 0)), \
g.UseRegister(this->input_at(node, 1)), \
g.UseRegister(this->input_at(node, 2))); \
}

Definition at line 2948 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_RELAXED_OP

#define SIMD_VISIT_RELAXED_OP ( name,
op )
Value:
void InstructionSelectorT::Visit##name(OpIndex node) { Visit##op(node); }

Definition at line 2977 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_REPLACE_LANE

#define SIMD_VISIT_REPLACE_LANE ( Type)
Value:
void InstructionSelectorT::Visit##Type##ReplaceLane(OpIndex node) { \
S390OperandGeneratorT g(this); \
int32_t lane; \
using namespace turboshaft; /* NOLINT(build/namespaces) */ \
const Operation& op = this->Get(node); \
lane = op.template Cast<Simd128ReplaceLaneOp>().lane; \
Emit(kS390_##Type##ReplaceLane, g.DefineAsRegister(node), \
g.UseRegister(this->input_at(node, 0)), g.UseImmediate(lane), \
g.UseRegister(this->input_at(node, 1))); \
}

Definition at line 2887 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_UNOP

#define SIMD_VISIT_UNOP ( Opcode)
Value:
void InstructionSelectorT::Visit##Opcode(OpIndex node) { \
S390OperandGeneratorT g(this); \
Emit(kS390_##Opcode, g.DefineAsRegister(node), \
g.UseRegister(this->input_at(node, 0))); \
}

Definition at line 2926 of file instruction-selector-s390.cc.

◆ SIMD_VISIT_UNOP_UNIQUE_REGISTER

#define SIMD_VISIT_UNOP_UNIQUE_REGISTER ( Opcode)
Value:
void InstructionSelectorT::Visit##Opcode(OpIndex node) { \
S390OperandGeneratorT g(this); \
InstructionOperand temps[] = {g.TempSimd128Register()}; \
Emit(kS390_##Opcode, g.DefineAsRegister(node), \
g.UseUniqueRegister(this->input_at(node, 0)), arraysize(temps), \
temps); \
}

Definition at line 2936 of file instruction-selector-s390.cc.

◆ SubOperandMode

#define SubOperandMode
Value:
((OperandMode::kArithmeticCommonMode | OperandMode::kInt32Imm_Negate | \
(CpuFeatures::IsSupported(DISTINCT_OPS) \
? (OperandMode::kAllowRRR | OperandMode::kAllowRRI) \
: OperandMode::kArithmeticCommonMode)))

Definition at line 79 of file instruction-selector-s390.cc.

◆ VISIT_ATOMIC64_BINOP

#define VISIT_ATOMIC64_BINOP ( op)
Value:
void InstructionSelectorT::VisitWord64Atomic##op(OpIndex node) { \
VisitWord64AtomicBinaryOperation(node, kAtomic##op##Uint8, \
kAtomic##op##Uint16, kAtomic##op##Word32, \
kS390_Word64Atomic##op##Uint64); \
}

Definition at line 2645 of file instruction-selector-s390.cc.

◆ VISIT_ATOMIC_BINOP

#define VISIT_ATOMIC_BINOP ( op)
Value:
void InstructionSelectorT::VisitWord32Atomic##op(OpIndex node) { \
VisitWord32AtomicBinaryOperation( \
node, kAtomic##op##Int8, kAtomic##op##Uint8, kAtomic##op##Int16, \
kAtomic##op##Uint16, kAtomic##op##Word32); \
}

Definition at line 2613 of file instruction-selector-s390.cc.

◆ VISIT_F16_OP

#define VISIT_F16_OP ( name)
Value:
void InstructionSelectorT::Visit##name(OpIndex node) { UNIMPLEMENTED(); }
#define UNIMPLEMENTED()
Definition logging.h:66

Definition at line 3016 of file instruction-selector-s390.cc.

◆ VISIT_OP_LIST

#define VISIT_OP_LIST ( V)
Value:
V(Word64, Bin, [](ArchOpcode opcode) { return opcode == kS390_LoadWord64; })
#define VISIT_OP_LIST_32(V)

Definition at line 744 of file instruction-selector-s390.cc.

◆ VISIT_OP_LIST_32

#define VISIT_OP_LIST_32 ( V)
Value:
V(Word32, Unary, [](ArchOpcode opcode) { \
return opcode == kS390_LoadWordS32 || opcode == kS390_LoadWordU32; \
}) \
V(Word64, Unary, \
[](ArchOpcode opcode) { return opcode == kS390_LoadWord64; }) \
V(Float32, Unary, \
[](ArchOpcode opcode) { return opcode == kS390_LoadFloat32; }) \
V(Float64, Unary, \
[](ArchOpcode opcode) { return opcode == kS390_LoadDouble; }) \
V(Word32, Bin, [](ArchOpcode opcode) { \
return opcode == kS390_LoadWordS32 || opcode == kS390_LoadWordU32; \
}) \
V(Float32, Bin, \
[](ArchOpcode opcode) { return opcode == kS390_LoadFloat32; }) \
V(Float64, Bin, [](ArchOpcode opcode) { return opcode == kS390_LoadDouble; })

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

◆ WORD32_BIN_OP_LIST

#define WORD32_BIN_OP_LIST ( V)

Definition at line 1647 of file instruction-selector-s390.cc.

◆ WORD32_UNARY_OP_LIST

#define WORD32_UNARY_OP_LIST ( V)

Definition at line 1613 of file instruction-selector-s390.cc.

◆ WORD64_BIN_OP_LIST

#define WORD64_BIN_OP_LIST ( V)
Value:
V(Word64, Int64AddWithOverflow, kS390_Add64, AddOperandMode, \
([&]() { return TryMatchInt64AddWithOverflow(this, node); })) \
V(Word64, Uint64MulHigh, kS390_MulHighU64, OperandMode::kAllowRRR, null) \
V(Word64, Uint64Mod, kS390_ModU64, \
OperandMode::kAllowRRM | OperandMode::kAllowRRR, null) \
V(Word64, Uint64Div, kS390_DivU64, \
OperandMode::kAllowRRM | OperandMode::kAllowRRR, null) \
V(Word64, Int64Mod, kS390_Mod64, \
OperandMode::kAllowRRM | OperandMode::kAllowRRR, null) \
V(Word64, Int64Div, kS390_Div64, \
OperandMode::kAllowRRM | OperandMode::kAllowRRR, null) \
V(Word64, Int64MulHigh, kS390_MulHighS64, OperandMode::kAllowRRR, null) \
V(Word64, Int64Mul, kS390_Mul64, MulOperandMode, ([&]() { \
return TryMatchShiftFromMul<Int64BinopMatcher, kS390_ShiftLeft64>(this, \
node); \
})) \
V(Word64, Int64Sub, kS390_Sub64, SubOperandMode, ([&]() { \
return TryMatchNegFromSub<Int64BinopMatcher, kS390_Neg64>(this, node); \
})) \
V(Word64, Word64Xor, kS390_Xor64, Xor64OperandMode, null) \
V(Word64, Word64Or, kS390_Or64, Or64OperandMode, null) \
V(Word64, Word64Ror, kS390_RotRight64, Shift64OperandMode, null) \
V(Word64, Int64Add, kS390_Add64, AddOperandMode, null) \
V(Word64, Word64Sar, kS390_ShiftRightArith64, Shift64OperandMode, null)
#define AddOperandMode
#define Shift64OperandMode
#define MulOperandMode
#define SubOperandMode
#define Xor64OperandMode
#define Or64OperandMode

Definition at line 1711 of file instruction-selector-s390.cc.

◆ WORD64_UNARY_OP_LIST

#define WORD64_UNARY_OP_LIST ( V)
Value:
V(Word64, TruncateInt64ToInt32, kS390_Int64ToInt32, OperandMode::kNone, \
null) \
V(Word64, Word64Clz, kS390_Cntlz64, OperandMode::kNone, null) \
V(Word64, Word64Popcnt, kS390_Popcnt64, OperandMode::kNone, null) \
V(Word64, Int64SubWithOverflow, kS390_Sub64, SubOperandMode, \
([&]() { return TryMatchInt64SubWithOverflow(this, node); })) \
V(Word64, BitcastInt64ToFloat64, kS390_BitcastInt64ToDouble, \
OperandMode::kNone, null) \
V(Word64, ChangeInt64ToFloat64, kS390_Int64ToDouble, OperandMode::kNone, \
null) \
V(Word64, RoundUint64ToFloat64, kS390_Uint64ToDouble, OperandMode::kNone, \
null) \
V(Word64, RoundUint64ToFloat32, kS390_Uint64ToFloat32, OperandMode::kNone, \
null) \
V(Word64, RoundInt64ToFloat32, kS390_Int64ToFloat32, OperandMode::kNone, \
null) \
V(Word64, RoundInt64ToFloat64, kS390_Int64ToDouble, OperandMode::kNone, null)

Definition at line 1692 of file instruction-selector-s390.cc.

◆ Xor32OperandMode

#define Xor32OperandMode   And32OperandMode

Definition at line 62 of file instruction-selector-s390.cc.

◆ Xor64OperandMode

#define Xor64OperandMode   And64OperandMode

Definition at line 57 of file instruction-selector-s390.cc.