asmjit::x86::EmitterExplicitT< This > Struct Template Reference
Inheritance diagram for asmjit::x86::EmitterExplicitT< This >:
asmjit::x86::EmitterImplicitT< Assembler > asmjit::x86::EmitterImplicitT< Builder > asmjit::x86::EmitterImplicitT< Emitter > asmjit::x86::Compiler asmjit::x86::EmitterImplicitT< This > asmjit::x86::Assembler asmjit::x86::Builder asmjit::x86::Emitter
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

Member Function Documentation

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 baseId, int32_t off = 0, uint32_t size = 0) constnoexcept◆ 

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

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 repeatCount = 1)◆ 

Embeds 8-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dw(uint16_t x, size_t repeatCount = 1)◆ 

Embeds 16-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dd(uint32_t x, size_t repeatCount = 1)◆ 

Embeds 32-bit integer data.

template<typename This>
Error x86::EmitterExplicitT<This>::dq(uint64_t x, size_t repeatCount = 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>::notTaken()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>::rex_b()noexcept◆ 

Force REX.B prefix (X64) [It exists for special purposes only].

template<typename This>
This& x86::EmitterExplicitT<This>::rex_x()noexcept◆ 

Force REX.X prefix (X64) [It exists for special purposes only].

template<typename This>
This& x86::EmitterExplicitT<This>::rex_r()noexcept◆ 

Force REX.R prefix (X64) [It exists for special purposes only].

template<typename This>
This& x86::EmitterExplicitT<This>::rex_w()noexcept◆ 

Force REX.W prefix (X64) [It exists for special purposes only].

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.