IndexX86 Backendasmjit::x86::EmitterExplicitT< This >

asmjit::x86::EmitterExplicitT< This > Struct Template Reference [¶]

Inheritance diagram for asmjit::x86::EmitterExplicitT< This >:
asmjit::x86::EmitterImplicitT< This >
template<typename This>
struct asmjit::x86::EmitterExplicitT< This >

Emitter (X86 - explicit).

Member Functions

Native Registers

Native Pointers

Embed

Short/Long Form Options

Encoding Options

Prefix Options

REX Options

VEX and EVEX Options

AVX-512 Options & Masking

Core Instructions

Core Instructions (Aliases)

Deprecated 32-bit Instructions

ENTER/LEAVE Instructions

IN/OUT Instructions

Clear/Set CF/DF Instructions

ADX Instructions

CPUID Instruction

LAHF/SAHF Instructions

BMI Instructions

BMI2 Instructions

CMPCCXADD Instructions

CacheLine Instructions

CRC32 Instructions (SSE4.2)

FENCE Instructions (SSE and SSE2)

LZCNT Instructions

MOVBE Instructions

MOVDIRI & MOVDIR64B Instructions

MXCSR Instructions (SSE)

POPCNT Instructions

PREFETCH Instructions

PREFETCHI Instructions

RAO_INT Instructions

RDPID Instruction

RDPRU/RDPKRU Instructions

RDTSC/RDTSCP Instructions

SERIALIZE Instruction

TBM Instructions

Other User-Mode Instructions

FSGSBASE Instructions

FXSR Instructions

XSAVE Instructions

MPX Extensions

MONITORX Instructions

MCOMMIT Instruction

PTWRITE Instruction

ENQCMD Instructions

WAITPKG Instructions

RDRAND & RDSEED Instructions

LWP Instructions

RTM & TSX Instructions

TSXLDTRK Instructions

CET-IBT Instructions

CET-SS Instructions

HRESET Instructions

UINTR Instructions

Core Privileged Instructions

INVLPGB Instructions

MONITOR Instructions (Privileged)

SMAP Instructions (Privileged)

SKINIT Instructions (Privileged)

SNP Instructions (Privileged)

VMX Instructions (All privileged except vmfunc)

SVM Instructions (All privileged except vmmcall)

SEV_ES Instructions

FPU Instructions

MMX & SSE+ Instructions

3DNOW and GEODE Instructions (Deprecated)

EMMS/FEMMS Instructions

AESNI Instructions

SHA Instructions

GFNI Instructions

AVX, FMA, and AVX512 Instructions

FMA4 Instructions

XOP Instructions (Deprecated)

AVX_NE_CONVERT Instructions

AVX_VNNI_INT8 Instructions

AVX_VNNI_INT16 Instructions

AVX+SHA512 Instructions

AVX+SM3 Instructions

AVX+SM4 Instructions

AVX512_FP16 Instructions

AMX_TILE Instructions

AMX_BF16 Instructions

AMX_COMPLEX Instructions

AMX_FP16 Instructions

AMX_INT8 Instructions

template<typename This>
Gp x86::EmitterExplicitT<This>::gpz(
uint32_t id
) constnoexcept[1/2][¶]

Returns either 32-bit or 64-bit GP register of the given id depending on the emitter's architecture.

template<typename This>
Gp x86::EmitterExplicitT<This>::gpz(
const Gp& reg
) constnoexcept[2/2][¶]

Clones the given reg to either 32-bit or 64-bit GP register depending on the emitter's architecture.

template<typename This>
Mem x86::EmitterExplicitT<This>::ptr_base(
uint32_t base_id,
int32_t off = 0,
uint32_t size = 0
) constnoexcept[¶]

Creates a target dependent pointer of which base register's id is base_id.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Gp& base,
int32_t offset = 0
) constnoexcept[1/9][¶]

Creates an intptr_t memory operand depending on the current architecture.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Gp& base,
const Gp& index,
uint32_t shift = 0,
int32_t offset = 0
) constnoexcept[2/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Gp& base,
const Vec& index,
uint32_t shift = 0,
int32_t offset = 0
) constnoexcept[3/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Label& base,
int32_t offset = 0
) constnoexcept[4/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Label& base,
const Gp& index,
uint32_t shift,
int32_t offset = 0
) constnoexcept[5/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Label& base,
const Vec& index,
uint32_t shift,
int32_t offset = 0
) constnoexcept[6/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
const Rip& rip,
int32_t offset = 0
) constnoexcept[7/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
uint64_t base
) constnoexcept[8/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr(
uint64_t base,
const Gp& index,
uint32_t shift = 0
) constnoexcept[9/9][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr_abs(
uint64_t base
) constnoexcept[1/2][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Mem x86::EmitterExplicitT<This>::intptr_ptr_abs(
uint64_t base,
const Gp& index,
uint32_t shift = 0
) constnoexcept[2/2][¶]

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

template<typename This>
Error x86::EmitterExplicitT<This>::db(
uint8_t x,
size_t repeat_count = 1
)[¶]

Embeds 8-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dw(
uint16_t x,
size_t repeat_count = 1
)[¶]

Embeds 16-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dd(
uint32_t x,
size_t repeat_count = 1
)[¶]

Embeds 32-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dq(
uint64_t x,
size_t repeat_count = 1
)[¶]

Embeds 64-bit integer data.

template<typename This>
template<typename T>
Error x86::EmitterExplicitT<This>::dstruct(
const T& x
)[¶]

Adds data in a given structure instance to the CodeBuffer.

template<typename This>
This& x86::EmitterExplicitT<This>::short_()noexcept[¶]

Force short form of jmp/jcc instruction.

template<typename This>
This& x86::EmitterExplicitT<This>::long_()noexcept[¶]

Force long form of jmp/jcc instruction.

template<typename This>
This& x86::EmitterExplicitT<This>::mod_rm()noexcept[¶]

Prefer MOD/RM encoding when both MOD/RM and MOD/MR forms are applicable.

template<typename This>
This& x86::EmitterExplicitT<This>::mod_mr()noexcept[¶]

Prefer MOD/MR encoding when both MOD/RM and MOD/MR forms are applicable.

template<typename This>
This& x86::EmitterExplicitT<This>::taken()noexcept[¶]

Condition is likely to be taken (has only benefit on P4).

template<typename This>
This& x86::EmitterExplicitT<This>::not_taken()noexcept[¶]

Condition is unlikely to be taken (has only benefit on P4).

template<typename This>
This& x86::EmitterExplicitT<This>::lock()noexcept[¶]

Use LOCK prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::xacquire()noexcept[¶]

Use XACQUIRE prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::xrelease()noexcept[¶]

Use XRELEASE prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::bnd()noexcept[¶]

Use BND/REPNE prefix.

Note

This is the same as using repne() or repnz() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::rep(
const Gp& zcx
)noexcept[¶]

Use REP/REPZ prefix.

Note

This is the same as using repe() or repz() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::repe(
const Gp& zcx
)noexcept[¶]

Use REP/REPE prefix.

Note

This is the same as using rep() or repz() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::repz(
const Gp& zcx
)noexcept[¶]

Use REP/REPE prefix.

Note

This is the same as using rep() or repe() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::repne(
const Gp& zcx
)noexcept[¶]

Use REPNE prefix.

Note

This is the same as using bnd() or repnz() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::repnz(
const Gp& zcx
)noexcept[¶]

Use REPNE prefix.

Note

This is the same as using bnd() or repne() prefix.

template<typename This>
This& x86::EmitterExplicitT<This>::rex()noexcept[¶]

Force REX prefix to be emitted even when it's not needed (X86_64).

Note

Don't use when using high 8-bit registers as REX prefix makes them inaccessible and x86::Assembler would fail to encode such instruction.

template<typename This>
This& x86::EmitterExplicitT<This>::vex()noexcept[¶]

Use VEX prefix instead of EVEX prefix (useful to select AVX_VNNI instruction instead of AVX512_VNNI).

template<typename This>
This& x86::EmitterExplicitT<This>::vex3()noexcept[¶]

Force 3-byte VEX prefix (AVX+).

template<typename This>
This& x86::EmitterExplicitT<This>::evex()noexcept[¶]

Force 4-byte EVEX prefix (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::k(
const KReg& kreg
)noexcept[¶]

Use masking {k} (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::z()noexcept[¶]

Use zeroing instead of merging (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::sae()noexcept[¶]

Suppress all exceptions (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::rn_sae()noexcept[¶]

Static rounding mode {rn} (round-to-nearest even) and {sae} (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::rd_sae()noexcept[¶]

Static rounding mode {rd} (round-down, toward -inf) and {sae} (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::ru_sae()noexcept[¶]

Static rounding mode {ru} (round-up, toward +inf) and {sae} (AVX512+).

template<typename This>
This& x86::EmitterExplicitT<This>::rz_sae()noexcept[¶]

Static rounding mode {rz} (round-toward-zero, truncate) and {sae} (AVX512+).

template<typename This>
Error x86::EmitterExplicitT<This>::imul(
const Gp& o0,
const Imm& o1
)[¶]

The imul(Gp, Imm) instruction is an alias of imul(Gp, Gp, Imm) instruction.