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

Go to the source code of this file.

Classes

class  v8::internal::compiler::IA32OperandGeneratorT
 

Namespaces

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

Macros

#define RO_OP_T_LIST(V)
 
#define RO_WITH_TEMP_OP_T_LIST(V)
 
#define RO_WITH_TEMP_SIMD_OP_T_LIST(V)
 
#define RR_OP_T_LIST(V)
 
#define RRO_FLOAT_OP_T_LIST(V)
 
#define FLOAT_UNOP_T_LIST(V)
 
#define RO_VISITOR(Name, opcode)
 
#define RO_WITH_TEMP_VISITOR(Name, opcode)
 
#define RO_WITH_TEMP_SIMD_VISITOR(Name, opcode)
 
#define RR_VISITOR(Name, opcode)
 
#define RRO_FLOAT_VISITOR(Name, opcode)
 
#define FLOAT_UNOP_VISITOR(Name, opcode)
 
#define VISIT_ATOMIC_BINOP(op)
 
#define SIMD_INT_TYPES(V)
 
#define SIMD_BINOP_LIST(V)
 
#define SIMD_BINOP_UNIFIED_SSE_AVX_LIST(V)
 
#define SIMD_BINOP_RRR(V)
 
#define SIMD_UNOP_LIST(V)
 
#define SIMD_ALLTRUE_LIST(V)
 
#define SIMD_SHIFT_OPCODES_UNIFED_SSE_AVX(V)
 

Functions

static void v8::internal::compiler::VisitShift (InstructionSelectorT *selector, OpIndex node, ArchOpcode opcode)
 
void v8::internal::compiler::VisitWord32PairShift (InstructionSelectorT *selector, InstructionCode opcode, OpIndex node)
 
AtomicMemoryOrder v8::internal::compiler::AtomicOrder (InstructionSelectorT *selector, OpIndex node)
 
MachineType v8::internal::compiler::AtomicOpType (InstructionSelectorT *selector, OpIndex node)
 

Macro Definition Documentation

◆ FLOAT_UNOP_T_LIST

#define FLOAT_UNOP_T_LIST ( V)
Value:
V(Float32Abs, kFloat32Abs) \
V(Float64Abs, kFloat64Abs) \
V(Float32Neg, kFloat32Neg) \
V(Float64Neg, kFloat64Neg) \
IF_WASM(V, F32x4Abs, kFloat32Abs) \
IF_WASM(V, F32x4Neg, kFloat32Neg) \
IF_WASM(V, F64x2Abs, kFloat64Abs) \
IF_WASM(V, F64x2Neg, kFloat64Neg)
#define V(Name)

Definition at line 1582 of file instruction-selector-ia32.cc.

◆ FLOAT_UNOP_VISITOR

#define FLOAT_UNOP_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
DCHECK_EQ(this->value_input_count(node), 1); \
VisitFloatUnop(this, node, this->input_at(node, 0), opcode); \
}

Definition at line 1632 of file instruction-selector-ia32.cc.

◆ RO_OP_T_LIST

#define RO_OP_T_LIST ( V)
Value:
V(Float32Sqrt, kIA32Float32Sqrt) \
V(Float64Sqrt, kIA32Float64Sqrt) \
V(ChangeInt32ToFloat64, kSSEInt32ToFloat64) \
V(TruncateFloat32ToInt32, kIA32Float32ToInt32) \
V(TruncateFloat64ToFloat32, kIA32Float64ToFloat32) \
V(BitcastFloat32ToInt32, kIA32BitcastFI) \
V(BitcastInt32ToFloat32, kIA32BitcastIF) \
V(Float64ExtractLowWord32, kIA32Float64ExtractLowWord32) \
V(Float64ExtractHighWord32, kIA32Float64ExtractHighWord32) \
V(ChangeFloat64ToInt32, kIA32Float64ToInt32) \
V(ChangeFloat32ToFloat64, kIA32Float32ToFloat64) \
V(RoundInt32ToFloat32, kSSEInt32ToFloat32) \
V(RoundFloat64ToInt32, kIA32Float64ToInt32) \
V(Word32Clz, kIA32Lzcnt) \
V(Word32Ctz, kIA32Tzcnt) \
V(Word32Popcnt, kIA32Popcnt) \
V(SignExtendWord8ToInt32, kIA32Movsxbl) \
V(SignExtendWord16ToInt32, kIA32Movsxwl) \

Definition at line 1521 of file instruction-selector-ia32.cc.

◆ RO_VISITOR

#define RO_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
VisitRO(this, node, opcode); \
}

Definition at line 1592 of file instruction-selector-ia32.cc.

◆ RO_WITH_TEMP_OP_T_LIST

#define RO_WITH_TEMP_OP_T_LIST ( V)
Value:
V(ChangeUint32ToFloat64, kIA32Uint32ToFloat64)

Definition at line 1541 of file instruction-selector-ia32.cc.

◆ RO_WITH_TEMP_SIMD_OP_T_LIST

#define RO_WITH_TEMP_SIMD_OP_T_LIST ( V)
Value:
V(TruncateFloat64ToUint32, kIA32Float64ToUint32) \
V(TruncateFloat32ToUint32, kIA32Float32ToUint32) \
V(ChangeFloat64ToUint32, kIA32Float64ToUint32)

Definition at line 1543 of file instruction-selector-ia32.cc.

◆ RO_WITH_TEMP_SIMD_VISITOR

#define RO_WITH_TEMP_SIMD_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
VisitROWithTempSimd(this, node, opcode); \
}

Definition at line 1608 of file instruction-selector-ia32.cc.

◆ RO_WITH_TEMP_VISITOR

#define RO_WITH_TEMP_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
VisitROWithTemp(this, node, opcode); \
}

Definition at line 1600 of file instruction-selector-ia32.cc.

◆ RR_OP_T_LIST

#define RR_OP_T_LIST ( V)
Value:
V(Float32RoundDown, kIA32Float32Round | MiscField::encode(kRoundDown)) \
V(Float64RoundDown, kIA32Float64Round | MiscField::encode(kRoundDown)) \
V(Float32RoundUp, kIA32Float32Round | MiscField::encode(kRoundUp)) \
V(Float64RoundUp, kIA32Float64Round | MiscField::encode(kRoundUp)) \
V(Float32RoundTruncate, kIA32Float32Round | MiscField::encode(kRoundToZero)) \
V(Float64RoundTruncate, kIA32Float64Round | MiscField::encode(kRoundToZero)) \
V(Float32RoundTiesEven, \
kIA32Float32Round | MiscField::encode(kRoundToNearest)) \
V(Float64RoundTiesEven, \
kIA32Float64Round | MiscField::encode(kRoundToNearest)) \
V(TruncateFloat64ToWord32, kArchTruncateDoubleToI) \
IF_WASM(V, F32x4Ceil, kIA32F32x4Round | MiscField::encode(kRoundUp)) \
IF_WASM(V, F32x4Floor, kIA32F32x4Round | MiscField::encode(kRoundDown)) \
IF_WASM(V, F32x4Trunc, kIA32F32x4Round | MiscField::encode(kRoundToZero)) \
IF_WASM(V, F32x4NearestInt, \
kIA32F32x4Round | MiscField::encode(kRoundToNearest)) \
IF_WASM(V, F64x2Ceil, kIA32F64x2Round | MiscField::encode(kRoundUp)) \
IF_WASM(V, F64x2Floor, kIA32F64x2Round | MiscField::encode(kRoundDown)) \
IF_WASM(V, F64x2Trunc, kIA32F64x2Round | MiscField::encode(kRoundToZero)) \
IF_WASM(V, F64x2NearestInt, \
kIA32F64x2Round | MiscField::encode(kRoundToNearest)) \
IF_WASM(V, F64x2Sqrt, kIA32F64x2Sqrt)

Definition at line 1548 of file instruction-selector-ia32.cc.

◆ RR_VISITOR

#define RR_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
VisitRR(this, node, opcode); \
}

Definition at line 1616 of file instruction-selector-ia32.cc.

◆ RRO_FLOAT_OP_T_LIST

#define RRO_FLOAT_OP_T_LIST ( V)
Value:
V(Float32Add, kFloat32Add) \
V(Float64Add, kFloat64Add) \
V(Float32Sub, kFloat32Sub) \
V(Float64Sub, kFloat64Sub) \
V(Float32Mul, kFloat32Mul) \
V(Float64Mul, kFloat64Mul) \
V(Float32Div, kFloat32Div) \
V(Float64Div, kFloat64Div)

Definition at line 1572 of file instruction-selector-ia32.cc.

◆ RRO_FLOAT_VISITOR

#define RRO_FLOAT_VISITOR ( Name,
opcode )
Value:
void InstructionSelectorT::Visit##Name(OpIndex node) { \
VisitRROFloat(this, node, opcode); \
}

Definition at line 1624 of file instruction-selector-ia32.cc.

◆ SIMD_ALLTRUE_LIST

#define SIMD_ALLTRUE_LIST ( V)
Value:
V(I64x2AllTrue) \
V(I32x4AllTrue) \
V(I16x8AllTrue) \
V(I8x16AllTrue)

Definition at line 2808 of file instruction-selector-ia32.cc.

◆ SIMD_BINOP_LIST

#define SIMD_BINOP_LIST ( V)
Value:
V(I32x4GtU) \
V(I32x4GeU) \
V(I16x8Ne) \
V(I16x8GeS) \
V(I16x8GtU) \
V(I16x8GeU) \
V(I8x16Ne) \
V(I8x16GeS) \
V(I8x16GtU) \
V(I8x16GeU)

Definition at line 2680 of file instruction-selector-ia32.cc.

◆ SIMD_BINOP_RRR

#define SIMD_BINOP_RRR ( V)
Value:
V(I64x2ExtMulLowI32x4S) \
V(I64x2ExtMulHighI32x4S) \
V(I64x2ExtMulLowI32x4U) \
V(I64x2ExtMulHighI32x4U) \
V(I32x4ExtMulLowI16x8S) \
V(I32x4ExtMulHighI16x8S) \
V(I32x4ExtMulLowI16x8U) \
V(I32x4ExtMulHighI16x8U) \
V(I16x8ExtMulLowI8x16S) \
V(I16x8ExtMulHighI8x16S) \
V(I16x8ExtMulLowI8x16U) \
V(I16x8ExtMulHighI8x16U) \
V(I16x8Q15MulRSatS) \
V(I16x8RelaxedQ15MulRS)

Definition at line 2764 of file instruction-selector-ia32.cc.

◆ SIMD_BINOP_UNIFIED_SSE_AVX_LIST

#define SIMD_BINOP_UNIFIED_SSE_AVX_LIST ( V)

Definition at line 2692 of file instruction-selector-ia32.cc.

◆ SIMD_INT_TYPES

#define SIMD_INT_TYPES ( V)
Value:
V(I32x4) \
V(I16x8) \
V(I8x16)

Definition at line 2675 of file instruction-selector-ia32.cc.

◆ SIMD_SHIFT_OPCODES_UNIFED_SSE_AVX

#define SIMD_SHIFT_OPCODES_UNIFED_SSE_AVX ( V)
Value:
V(I64x2Shl) \
V(I64x2ShrU) \
V(I32x4Shl) \
V(I32x4ShrS) \
V(I32x4ShrU) \
V(I16x8Shl) \
V(I16x8ShrS) \
V(I16x8ShrU)

Definition at line 2814 of file instruction-selector-ia32.cc.

◆ SIMD_UNOP_LIST

#define SIMD_UNOP_LIST ( V)
Value:
V(F64x2ConvertLowI32x4S) \
V(F32x4DemoteF64x2Zero) \
V(F32x4Sqrt) \
V(F32x4SConvertI32x4) \
V(I64x2BitMask) \
V(I64x2SConvertI32x4Low) \
V(I64x2SConvertI32x4High) \
V(I64x2UConvertI32x4Low) \
V(I64x2UConvertI32x4High) \
V(I32x4SConvertI16x8Low) \
V(I32x4SConvertI16x8High) \
V(I32x4Neg) \
V(I32x4UConvertI16x8Low) \
V(I32x4UConvertI16x8High) \
V(I32x4Abs) \
V(I32x4BitMask) \
V(I16x8SConvertI8x16Low) \
V(I16x8SConvertI8x16High) \
V(I16x8Neg) \
V(I16x8UConvertI8x16Low) \
V(I16x8UConvertI8x16High) \
V(I16x8Abs) \
V(I8x16Neg) \
V(I8x16Abs) \
V(I8x16BitMask) \
V(S128Not)

Definition at line 2780 of file instruction-selector-ia32.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 2520 of file instruction-selector-ia32.cc.

Variable Documentation

◆ base

OpIndex base = {}

Definition at line 65 of file instruction-selector-ia32.cc.

◆ displacement

int32_t displacement = 0

Definition at line 80 of file instruction-selector-ia32.cc.

◆ displacement_mode

DisplacementMode displacement_mode = kPositiveDisplacement

Definition at line 81 of file instruction-selector-ia32.cc.

◆ index

OpIndex index = {}

Definition at line 66 of file instruction-selector-ia32.cc.

◆ offset

int32_t offset

Definition at line 67 of file instruction-selector-ia32.cc.

◆ scale

int scale = 0

Definition at line 73 of file instruction-selector-ia32.cc.