LLVM  3.7.0
Enumerations
llvm::X86ISD Namespace Reference

Enumerations

enum  NodeType : unsigned {
  FIRST_NUMBER = ISD::BUILTIN_OP_END, BSF, BSR, SHLD,
  SHRD, FAND, FOR, FXOR,
  FANDN, CALL, RDTSC_DAG, RDTSCP_DAG,
  RDPMC_DAG, CMP, COMI, UCOMI,
  BT, SETCC, SELECT, SETCC_CARRY,
  FSETCC, FGETSIGNx86, CMOV, BRCOND,
  RET_FLAG, REP_STOS, REP_MOVS, GlobalBaseReg,
  Wrapper, WrapperRIP, MOVDQ2Q, MMX_MOVD2W,
  MMX_MOVW2D, PEXTRB, PEXTRW, INSERTPS,
  PINSRB, PINSRW, MMX_PINSRW, PSHUFB,
  PSADBW, ANDNP, PSIGN, BLENDI,
  SHRUNKBLEND, ADDSUB, FADD_RND, FSUB_RND,
  FMUL_RND, FDIV_RND, FMAX_RND, FMIN_RND,
  FSQRT_RND, FGETEXP_RND, SCALEF, ADDUS,
  SUBUS, ADDS, SUBS, AVG,
  HADD, HSUB, FHADD, FHSUB,
  ABS, FMAX, FMIN, FMAXC,
  FMINC, FRSQRT, FRCP, TLSADDR,
  TLSBASEADDR, TLSCALL, EH_RETURN, EH_SJLJ_SETJMP,
  EH_SJLJ_LONGJMP, TC_RETURN, VZEXT_MOVL, VZEXT,
  VSEXT, VTRUNC, VTRUNCM, VFPEXT,
  VFPROUND, CVTDQ2PD, CVTUDQ2PD, VSHLDQ,
  VSRLDQ, VSHL, VSRL, VSRA,
  VSHLI, VSRLI, VSRAI, CMPP,
  PCMPEQ, PCMPGT, PCMPEQM, PCMPGTM,
  CMPM, CMPMU, CMPM_RND, ADD,
  SUB, ADC, SBB, SMUL,
  INC, DEC, OR, XOR,
  AND, BEXTR, UMUL, SMUL8,
  UMUL8, UDIVREM8_ZEXT_HREG, SDIVREM8_SEXT_HREG, MUL_IMM,
  PTEST, TESTP, TESTM, TESTNM,
  KORTEST, PACKSS, PACKUS, PALIGNR,
  VALIGN, PSHUFD, PSHUFHW, PSHUFLW,
  SHUFP, SHUF128, MOVDDUP, MOVSHDUP,
  MOVSLDUP, MOVLHPS, MOVLHPD, MOVHLPS,
  MOVLPS, MOVLPD, MOVSD, MOVSS,
  UNPCKL, UNPCKH, VPERMILPV, VPERMILPI,
  VPERMV, VPERMV3, VPERMIV3, VPERMI,
  VPERM2X128, VFIXUPIMM, VRANGE, VBROADCAST,
  SUBV_BROADCAST, VINSERT, VEXTRACT, EXTRQI,
  INSERTQI, PMULUDQ, PMULDQ, MULHRS,
  FMADD, FNMADD, FMSUB, FNMSUB,
  FMADDSUB, FMSUBADD, FMADD_RND, FNMADD_RND,
  FMSUB_RND, FNMSUB_RND, FMADDSUB_RND, FMSUBADD_RND,
  RNDSCALE, COMPRESS, EXPAND, SINT_TO_FP_RND,
  UINT_TO_FP_RND, FP_TO_SINT_RND, FP_TO_UINT_RND, VASTART_SAVE_XMM_REGS,
  WIN_ALLOCA, SEG_ALLOCA, WIN_FTOL, MEMBARRIER,
  MFENCE, SFENCE, LFENCE, FNSTSW16r,
  SAHF, RDRAND, RDSEED, PCMPISTRI,
  PCMPESTRI, XTEST, RSQRT28, RCP28,
  EXP2, LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE, LCMPXCHG8_DAG, LCMPXCHG16_DAG,
  VZEXT_LOAD, FNSTCW16m, FP_TO_INT16_IN_MEM, FP_TO_INT32_IN_MEM,
  FP_TO_INT64_IN_MEM, FILD, FILD_FLAG, FLD,
  FST, VAARG_64
}
 

Enumeration Type Documentation

Enumerator
FIRST_NUMBER 
BSF 

Bit scan forward.

BSR 

Bit scan reverse.

SHLD 

Double shift instructions.

These correspond to X86::SHLDxx and X86::SHRDxx instructions.

SHRD 
FAND 

Bitwise logical AND of floating point values.

This corresponds to X86::ANDPS or X86::ANDPD.

FOR 

Bitwise logical OR of floating point values.

This corresponds to X86::ORPS or X86::ORPD.

FXOR 

Bitwise logical XOR of floating point values.

This corresponds to X86::XORPS or X86::XORPD.

FANDN 

Bitwise logical ANDNOT of floating point values.

This corresponds to X86::ANDNPS or X86::ANDNPD.

CALL 

These operations represent an abstract X86 call instruction, which includes a bunch of information.

In particular the operands of these node are:

#0 - The incoming token chain
#1 - The callee
#2 - The number of arg bytes the caller pushes on the stack.
#3 - The number of arg bytes the callee pops off the stack.
#4 - The value to pass in AL/AX/EAX (optional)
#5 - The value to pass in DL/DX/EDX (optional)

The result values of these nodes are:

#0 - The outgoing token chain
#1 - The first register result value (optional)
#2 - The second register result value (optional)
RDTSC_DAG 

This operation implements the lowering for readcyclecounter.

RDTSCP_DAG 

X86 Read Time-Stamp Counter and Processor ID.

RDPMC_DAG 

X86 Read Performance Monitoring Counters.

CMP 

X86 compare and logical compare instructions.

COMI 
UCOMI 
BT 

X86 bit-test instructions.

SETCC 

X86 SetCC.

Operand 0 is condition code, and operand 1 is the EFLAGS operand, usually produced by a CMP instruction.

SELECT 

X86 Select.

SETCC_CARRY 
FSETCC 

X86 FP SETCC, implemented with CMP{cc}SS/CMP{cc}SD.

Operands are two FP values to compare; result is a mask of 0s or 1s. Generally DTRT for C/C++ with NaNs.

FGETSIGNx86 

X86 MOVMSK{pd|ps}, extracts sign bits of two or four FP values, result in an integer GPR.

Needs masking for scalar result.

CMOV 

X86 conditional moves.

Operand 0 and operand 1 are the two values to select from. Operand 2 is the condition code, and operand 3 is the flag operand produced by a CMP or TEST instruction. It also writes a flag result.

BRCOND 

X86 conditional branches.

Operand 0 is the chain operand, operand 1 is the block to branch if condition is true, operand 2 is the condition code, and operand 3 is the flag operand produced by a CMP or TEST instruction.

RET_FLAG 

Return with a flag operand.

Operand 0 is the chain operand, operand 1 is the number of bytes of stack to pop.

REP_STOS 

Repeat fill, corresponds to X86::REP_STOSx.

REP_MOVS 

Repeat move, corresponds to X86::REP_MOVSx.

GlobalBaseReg 

On Darwin, this node represents the result of the popl at function entry, used for PIC code.

Wrapper 

A wrapper node for TargetConstantPool, TargetExternalSymbol, and TargetGlobalAddress.

WrapperRIP 

Special wrapper used under X86-64 PIC mode for RIP relative displacements.

MOVDQ2Q 

Copies a 64-bit value from the low word of an XMM vector to an MMX vector.

If you think this is too close to the previous mnemonic, so do I; blame Intel.

MMX_MOVD2W 

Copies a 32-bit value from the low word of a MMX vector to a GPR.

MMX_MOVW2D 

Copies a GPR into the low 32-bit word of a MMX vector and zero out the high word.

PEXTRB 

Extract an 8-bit value from a vector and zero extend it to i32, corresponds to X86::PEXTRB.

PEXTRW 

Extract a 16-bit value from a vector and zero extend it to i32, corresponds to X86::PEXTRW.

INSERTPS 

Insert any element of a 4 x float vector into any element of a destination 4 x floatvector.

PINSRB 

Insert the lower 8-bits of a 32-bit value to a vector, corresponds to X86::PINSRB.

PINSRW 

Insert the lower 16-bits of a 32-bit value to a vector, corresponds to X86::PINSRW.

MMX_PINSRW 
PSHUFB 

Shuffle 16 8-bit values within a vector.

PSADBW 

Compute Sum of Absolute Differences.

ANDNP 

Bitwise Logical AND NOT of Packed FP values.

PSIGN 

Copy integer sign.

BLENDI 

Blend where the selector is an immediate.

SHRUNKBLEND 

Blend where the condition has been shrunk.

This is used to emphasize that the condition mask is no more valid for generic VSELECT optimizations.

ADDSUB 

Combined add and sub on an FP vector.

FADD_RND 
FSUB_RND 
FMUL_RND 
FDIV_RND 
FMAX_RND 
FMIN_RND 
FSQRT_RND 
FGETEXP_RND 
SCALEF 
ADDUS 
SUBUS 
ADDS 
SUBS 
AVG 
HADD 

Integer horizontal add.

HSUB 

Integer horizontal sub.

FHADD 

Floating point horizontal add.

FHSUB 

Floating point horizontal sub.

ABS 
FMAX 

Floating point max and min.

FMIN 
FMAXC 

Commutative FMIN and FMAX.

FMINC 
FRSQRT 

Floating point reciprocal-sqrt and reciprocal approximation.

Note that these typically require refinement in order to obtain suitable precision.

FRCP 
TLSADDR 
TLSBASEADDR 
TLSCALL 
EH_RETURN 
EH_SJLJ_SETJMP 
EH_SJLJ_LONGJMP 
TC_RETURN 

Tail call return.

See X86TargetLowering::LowerCall for the list of operands.

VZEXT_MOVL 
VZEXT 
VSEXT 
VTRUNC 
VTRUNCM 
VFPEXT 
VFPROUND 
CVTDQ2PD 
CVTUDQ2PD 
VSHLDQ 
VSRLDQ 
VSHL 
VSRL 
VSRA 
VSHLI 
VSRLI 
VSRAI 
CMPP 
PCMPEQ 
PCMPGT 
PCMPEQM 
PCMPGTM 
CMPM 

Vector comparison generating mask bits for fp and integer signed and unsigned data types.

CMPMU 
CMPM_RND 
ADD 
SUB 
ADC 
SBB 
SMUL 
INC 
DEC 
OR 
XOR 
AND 
BEXTR 
UMUL 
SMUL8 
UMUL8 
UDIVREM8_ZEXT_HREG 
SDIVREM8_SEXT_HREG 
MUL_IMM 
PTEST 
TESTP 
TESTM 
TESTNM 
KORTEST 
PACKSS 
PACKUS 
PALIGNR 
VALIGN 
PSHUFD 
PSHUFHW 
PSHUFLW 
SHUFP 
SHUF128 
MOVDDUP 
MOVSHDUP 
MOVSLDUP 
MOVLHPS 
MOVLHPD 
MOVHLPS 
MOVLPS 
MOVLPD 
MOVSD 
MOVSS 
UNPCKL 
UNPCKH 
VPERMILPV 
VPERMILPI 
VPERMV 
VPERMV3 
VPERMIV3 
VPERMI 
VPERM2X128 
VFIXUPIMM 
VRANGE 
VBROADCAST 
SUBV_BROADCAST 
VINSERT 
VEXTRACT 
EXTRQI 

SSE4A Extraction and Insertion.

INSERTQI 
PMULUDQ 
PMULDQ 
MULHRS 
FMADD 
FNMADD 
FMSUB 
FNMSUB 
FMADDSUB 
FMSUBADD 
FMADD_RND 
FNMADD_RND 
FMSUB_RND 
FNMSUB_RND 
FMADDSUB_RND 
FMSUBADD_RND 
RNDSCALE 
COMPRESS 
EXPAND 
SINT_TO_FP_RND 
UINT_TO_FP_RND 
FP_TO_SINT_RND 
FP_TO_UINT_RND 
VASTART_SAVE_XMM_REGS 
WIN_ALLOCA 
SEG_ALLOCA 
WIN_FTOL 
MEMBARRIER 
MFENCE 
SFENCE 
LFENCE 
FNSTSW16r 
SAHF 
RDRAND 
RDSEED 
PCMPISTRI 
PCMPESTRI 
XTEST 
RSQRT28 
RCP28 
EXP2 
LCMPXCHG_DAG 
LCMPXCHG8_DAG 
LCMPXCHG16_DAG 
VZEXT_LOAD 
FNSTCW16m 
FP_TO_INT16_IN_MEM 

This instruction implements FP_TO_SINT with the integer destination in memory and a FP reg source.

This corresponds to the X86::FIST*m instructions and the rounding mode change stuff. It has two inputs (token chain and address) and two outputs (int value and token chain).

FP_TO_INT32_IN_MEM 
FP_TO_INT64_IN_MEM 
FILD 

This instruction implements SINT_TO_FP with the integer source in memory and FP reg result.

This corresponds to the X86::FILD*m instructions. It has three inputs (token chain, address, and source type) and two outputs (FP value and token chain). FILD_FLAG also produces a flag).

FILD_FLAG 
FLD 

This instruction implements an extending load to FP stack slots.

This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain operand, ptr to load from, and a ValueType node indicating the type to load to.

FST 

This instruction implements a truncating store to FP stack slots.

This corresponds to the X86::FST32m / X86::FST64m. It takes a chain operand, value to store, address, and a ValueType to store it as.

VAARG_64 

This instruction grabs the address of the next argument from a va_list.

(reads and modifies the va_list in memory)

Definition at line 29 of file X86ISelLowering.h.