Package jnr.x86asm
Class Assembler
java.lang.Object
jnr.x86asm.SerializerCore
jnr.x86asm.SerializerIntrinsics
jnr.x86asm.Serializer
jnr.x86asm.Assembler
Low level code generation.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final CodeBuffer
private final Logger
private int
(package private) int
Size of possible trampolines.private final CPU
private final CpuInfo
static final CPU
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
private static final int[]
static final CPU
Fields inherited from class jnr.x86asm.SerializerCore
_cmovcctable, _jcctable, _none, _setcctable
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) final void
_emitByte
(int x) Emit Byte to internal buffer.(package private) LinkData
_emitDisplacement
(Label label, long inlinedDisplacement, int size) (package private) final void
_emitDWord
(int x) Emit DWord (4 bytes) to internal buffer.(package private) void
_emitFpu
(int opCode) (package private) void
_emitFpuMEM
(int opCode, int opReg, Mem mem) (package private) void
_emitFpuSTI
(int opCode, int sti) (package private) void
_emitImmediate
(Immediate imm, int size) (package private) final void
_emitInt32
(int x) Emit Int32 (4 bytes) to internal buffer.(package private) void
_emitJmpOrCallReloc
(InstructionGroup instruction, long target) (package private) void
(package private) void
_emitMod
(int m, int o, int r) Emit MODR/M byte.(package private) void
(package private) void
_emitModR
(int opReg, int r) Emit Register / Register - calls _emitMod(3, opReg, r)(package private) void
Emit Register / Register - calls _emitMod(3, opReg, r.code())(package private) void
_emitModRM
(int opReg, Operand op, int immSize) (package private) final void
_emitOpCode
(int opCode) (package private) final void
_emitQWord
(long x) Emit QWord (8 bytes) to internal buffer.(package private) void
_emitRexR
(boolean w, int opReg, int regCode) (package private) void
_emitRexR
(int w, int opReg, int regCode) Emit REX prefix (64 bit mode only).(package private) void
_emitRexRM
(boolean w, int opReg, Operand rm) (package private) void
_emitRexRM
(int w, int opReg, Operand rm) Emit REX prefix (64 bit mode only).(package private) void
(package private) void
_emitSib
(int s, int i, int b) Emit SIB byte.(package private) final void
_emitSysInt
(long x) Emit system signed integer (4 or 8 bytes) to internal buffer.(package private) final void
_emitWord
(int x) Emit Word (2 bytes) to internal buffer.(package private) void
(package private) void
_emitX86Inl
(int opCode, boolean i16bit, boolean rexw, int reg) (package private) void
_emitX86Inl
(int opCode, boolean i16bit, int rexw, int reg) (package private) void
_emitX86RM
(int opCode, boolean i16bit, boolean rexw, int o, Operand op, int immSize) (package private) void
_emitX86RM
(int opCode, boolean i16bit, int rexw, int o, Operand op, int immSize) void
align
(long m) final int
codeSize()
Gets the required size of memory required to store all the generated codefinal byte
getByteAt
(int pos) final int
getDWordAt
(int pos) final int
getInt32At
(int pos) final long
getQWordAt
(int pos) final short
getWordAt
(int pos) private static final int
intValue
(boolean b) (package private) boolean
is64()
final int
offset()
void
relocCode
(ByteBuffer buffer, long address) final void
setByteAt
(int pos, byte x) final void
setDWordAt
(int pos, int x) final void
setInt32At
(int pos, long x) final void
setQWordAt
(int pos, long x) final void
setVarAt
(int pos, long i, boolean isUnsigned, int size) final void
setWordAt
(int pos, short x) (package private) int
Return size of all possible trampolines needed to successfuly generate relative jumps to absolute addresses.Methods inherited from class jnr.x86asm.SerializerIntrinsics
adc, adc, adc, adc, adc, add, add, add, add, add, addpd, addpd, addps, addps, addsd, addsd, addss, addss, addsubpd, addsubpd, addsubps, addsubps, amd_prefetch, amd_prefetchw, and_, and_, and_, and_, and_, andnpd, andnpd, andnps, andnps, andpd, andpd, andps, andps, blendpd, blendpd, blendps, blendps, blendvpd, blendvpd, blendvps, blendvps, bsf, bsf, bsr, bsr, bswap, bt, bt, bt, bt, btc, btc, btc, btc, btr, btr, btr, btr, bts, bts, bts, bts, call, call, call, call, call, cbw, cdqe, clc, cld, clflush, cmc, cmov, cmov, cmova, cmova, cmovae, cmovae, cmovb, cmovb, cmovbe, cmovbe, cmovc, cmovc, cmove, cmove, cmovg, cmovg, cmovge, cmovge, cmovl, cmovl, cmovle, cmovle, cmovna, cmovna, cmovnae, cmovnae, cmovnb, cmovnb, cmovnbe, cmovnbe, cmovnc, cmovnc, cmovne, cmovne, cmovng, cmovng, cmovnge, cmovnge, cmovnl, cmovnl, cmovnle, cmovnle, cmovno, cmovno, cmovnp, cmovnp, cmovns, cmovns, cmovnz, cmovnz, cmovo, cmovo, cmovp, cmovp, cmovpe, cmovpe, cmovpo, cmovpo, cmovs, cmovs, cmovz, cmovz, cmp, cmp, cmp, cmp, cmp, cmppd, cmppd, cmpps, cmpps, cmpsd, cmpsd, cmpss, cmpss, cmpxchg, cmpxchg, cmpxchg16b, cmpxchg8b, comisd, comisd, comiss, comiss, cpuid, crc32, crc32, cvtdq2pd, cvtdq2pd, cvtdq2ps, cvtdq2ps, cvtpd2dq, cvtpd2dq, cvtpd2pi, cvtpd2pi, cvtpd2ps, cvtpd2ps, cvtpi2pd, cvtpi2pd, cvtpi2ps, cvtpi2ps, cvtps2dq, cvtps2dq, cvtps2pd, cvtps2pd, cvtps2pi, cvtps2pi, cvtsd2si, cvtsd2si, cvtsd2ss, cvtsd2ss, cvtsi2sd, cvtsi2sd, cvtsi2ss, cvtsi2ss, cvtss2sd, cvtss2sd, cvtss2si, cvtss2si, cvttpd2dq, cvttpd2dq, cvttpd2pi, cvttpd2pi, cvttps2dq, cvttps2dq, cvttps2pi, cvttps2pi, cvttsd2si, cvttsd2si, cvttss2si, cvttss2si, cwde, daa, das, dec, dec, div, div, divpd, divpd, divps, divps, divsd, divsd, divss, divss, dppd, dppd, dpps, dpps, emms, enter, extractps, extractps, f2xm1, fabs, fadd, fadd, faddp, faddp, fbld, fbstp, fchs, fclex, fcmovb, fcmovbe, fcmove, fcmovnb, fcmovnbe, fcmovne, fcmovnu, fcmovu, fcom, fcom, fcom, fcomi, fcomip, fcomp, fcomp, fcomp, fcompp, fcos, fdecstp, fdiv, fdiv, fdivp, fdivp, fdivr, fdivr, fdivrp, fdivrp, femms, ffree, fiadd, ficom, ficomp, fidiv, fidivr, fild, fimul, fincstp, finit, fist, fistp, fisttp, fisub, fisubr, fld, fld, fld1, fldcw, fldenv, fldl2e, fldl2t, fldlg2, fldln2, fldpi, fldz, fmul, fmul, fmulp, fmulp, fnclex, fninit, fnop, fnsave, fnstcw, fnstenv, fnstsw, fnstsw, fpatan, fprem, fprem1, fptan, frndint, frstor, fsave, fscale, fsin, fsincos, fsqrt, fst, fst, fstcw, fstenv, fstp, fstp, fstsw, fstsw, fsub, fsub, fsubp, fsubp, fsubr, fsubr, fsubrp, fsubrp, ftst, fucom, fucom, fucomi, fucomip, fucomip, fucomp, fucomp, fucompp, fwait, fxam, fxch, fxch, fxrstor, fxsave, fxtract, fyl2x, fyl2xp1, haddpd, haddpd, haddps, haddps, hsubpd, hsubpd, hsubps, hsubps, idiv, idiv, imul, imul, imul, imul, imul, imul, imul, inc, inc, int3, j, j_short, ja, ja_short, jae, jae_short, jb, jb_short, jbe, jbe_short, jc, jc_short, je, je_short, jg, jg_short, jge, jge_short, jl, jl_short, jle, jle_short, jmp, jmp, jmp, jmp, jmp, jmp_short, jna, jna_short, jnae, jnae_short, jnb, jnb_short, jnbe, jnbe_short, jnc, jnc_short, jne, jne_short, jng, jng_short, jnge, jnge_short, jnl, jnl_short, jnle, jnle_short, jno, jno_short, jnp, jnp_short, jns, jns_short, jnz, jnz_short, jo, jo_short, jp, jp_short, jpe, jpe_short, jpo, jpo_short, js, js_short, jz, jz_short, lddqu, ldmxcsr, lea, leave, lfence, lock, maskmovdqu, maskmovq, maxpd, maxpd, maxps, maxps, maxsd, maxsd, maxss, maxss, mfence, minpd, minpd, minps, minps, minsd, minsd, minss, minss, monitor, mov, mov, mov, mov, mov, mov_ptr, mov_ptr, movapd, movapd, movapd, movaps, movaps, movaps, movbe, movbe, movd, movd, movd, movd, movd, movd, movd, movd, movddup, movddup, movdq2q, movdqa, movdqa, movdqa, movdqu, movdqu, movdqu, movhlps, movhpd, movhpd, movhps, movhps, movlhps, movlpd, movlpd, movlps, movlps, movmskpd, movmskps, movntdq, movntdqa, movnti, movntpd, movntps, movntq, movq, movq, movq, movq, movq, movq, movq, movq, movq, movq, movq2dq, movsd, movsd, movsd, movshdup, movshdup, movsldup, movsldup, movss, movss, movss, movsx, movsx, movsxd, movsxd, movupd, movupd, movups, movups, movups, movzx, movzx, mpsadbw, mpsadbw, mul, mul, mulpd, mulpd, mulps, mulps, mulsd, mulsd, mulss, mulss, mwait, neg, neg, nop, not_, not_, or_, or_, or_, or_, or_, orpd, orpd, orps, orps, pabsb, pabsb, pabsb, pabsb, pabsd, pabsd, pabsd, pabsd, pabsw, pabsw, pabsw, pabsw, packssdw, packssdw, packsswb, packsswb, packusdw, packusdw, packuswb, packuswb, packuswb, packuswb, paddb, paddb, paddb, paddb, paddd, paddd, paddd, paddd, paddq, paddq, paddq, paddq, paddsb, paddsb, paddsb, paddsb, paddsw, paddsw, paddsw, paddsw, paddusb, paddusb, paddusb, paddusb, paddusw, paddusw, paddusw, paddusw, paddw, paddw, paddw, paddw, palignr, palignr, palignr, palignr, pand, pand, pand, pand, pandn, pandn, pandn, pandn, pause, pavgb, pavgb, pavgb, pavgb, pavgw, pavgw, pavgw, pavgw, pblendvb, pblendvb, pblendw, pblendw, pcmpeqb, pcmpeqb, pcmpeqb, pcmpeqb, pcmpeqd, pcmpeqd, pcmpeqd, pcmpeqd, pcmpeqq, pcmpeqq, pcmpeqw, pcmpeqw, pcmpeqw, pcmpeqw, pcmpestri, pcmpestri, pcmpestrm, pcmpestrm, pcmpgtb, pcmpgtb, pcmpgtb, pcmpgtb, pcmpgtd, pcmpgtd, pcmpgtd, pcmpgtd, pcmpgtq, pcmpgtq, pcmpgtw, pcmpgtw, pcmpgtw, pcmpgtw, pcmpistri, pcmpistri, pcmpistrm, pcmpistrm, pextrb, pextrb, pextrd, pextrd, pextrq, pextrq, pextrw, pextrw, pextrw, pf2id, pf2id, pf2iw, pf2iw, pfacc, pfacc, pfadd, pfadd, pfcmpeq, pfcmpeq, pfcmpge, pfcmpge, pfcmpgt, pfcmpgt, pfmax, pfmax, pfmin, pfmin, pfmul, pfmul, pfnacc, pfnacc, pfpnacc, pfpnaxx, pfrcp, pfrcp, pfrcpit1, pfrcpit1, pfrcpit2, pfrcpit2, pfrsqit1, pfrsqit1, pfrsqrt, pfrsqrt, pfsub, pfsub, pfsubr, pfsubr, phaddd, phaddd, phaddd, phaddd, phaddsw, phaddsw, phaddsw, phaddsw, phaddw, phaddw, phaddw, phaddw, phminposuw, phminposuw, phsubd, phsubd, phsubd, phsubd, phsubsw, phsubsw, phsubsw, phsubsw, phsubw, phsubw, phsubw, phsubw, pi2fd, pi2fd, pi2fw, pi2fw, pinsrb, pinsrb, pinsrd, pinsrd, pinsrq, pinsrq, pinsrw, pinsrw, pinsrw, pinsrw, pmaddubsw, pmaddubsw, pmaddubsw, pmaddubsw, pmaddwd, pmaddwd, pmaddwd, pmaddwd, pmaxsb, pmaxsb, pmaxsd, pmaxsd, pmaxsw, pmaxsw, pmaxsw, pmaxsw, pmaxub, pmaxub, pmaxub, pmaxub, pmaxud, pmaxud, pmaxuw, pmaxuw, pminsb, pminsb, pminsd, pminsd, pminsw, pminsw, pminsw, pminsw, pminub, pminub, pminub, pminub, pminud, pminud, pminuw, pminuw, pmovmskb, pmovmskb, pmovsxbd, pmovsxbd, pmovsxbq, pmovsxbq, pmovsxbw, pmovsxbw, pmovsxdq, pmovsxdq, pmovsxwd, pmovsxwd, pmovsxwq, pmovsxwq, pmovzxbd, pmovzxbd, pmovzxbq, pmovzxbq, pmovzxbw, pmovzxbw, pmovzxdq, pmovzxdq, pmovzxwd, pmovzxwd, pmovzxwq, pmovzxwq, pmuldq, pmuldq, pmulhrsw, pmulhrsw, pmulhrsw, pmulhrsw, pmulhuw, pmulhuw, pmulhuw, pmulhuw, pmulhw, pmulhw, pmulhw, pmulhw, pmulld, pmulld, pmullw, pmullw, pmullw, pmullw, pmuludq, pmuludq, pmuludq, pmuludq, pop, pop, popad, popcnt, popcnt, popf, popfd, popfq, por, por, por, por, prefetch, psadbw, psadbw, psadbw, psadbw, pshufb, pshufb, pshufb, pshufb, pshufd, pshufd, pshufhw, pshufhw, pshuflw, pshuflw, pshufw, pshufw, psignb, psignb, psignb, psignb, psignd, psignd, psignd, psignd, psignw, psignw, psignw, psignw, pslld, pslld, pslld, pslld, pslld, pslld, pslldq, psllq, psllq, psllq, psllq, psllq, psllq, psllw, psllw, psllw, psllw, psllw, psllw, psrad, psrad, psrad, psrad, psrad, psrad, psraw, psraw, psraw, psraw, psraw, psraw, psrld, psrld, psrld, psrld, psrld, psrld, psrldq, psrlq, psrlq, psrlq, psrlq, psrlq, psrlq, psrlw, psrlw, psrlw, psrlw, psrlw, psrlw, psubb, psubb, psubb, psubb, psubd, psubd, psubd, psubd, psubq, psubq, psubq, psubq, psubsb, psubsb, psubsb, psubsb, psubsw, psubsw, psubsw, psubsw, psubusb, psubusb, psubusb, psubusb, psubusw, psubusw, psubusw, psubusw, psubw, psubw, psubw, psubw, pswapd, pswapd, ptest, ptest, punpckhbw, punpckhbw, punpckhbw, punpckhbw, punpckhdq, punpckhdq, punpckhdq, punpckhdq, punpckhqdq, punpckhqdq, punpckhwd, punpckhwd, punpckhwd, punpckhwd, punpcklbw, punpcklbw, punpcklbw, punpcklbw, punpckldq, punpckldq, punpckldq, punpckldq, punpcklqdq, punpcklqdq, punpcklwd, punpcklwd, punpcklwd, punpcklwd, push, push, push, pushad, pushf, pushfd, pushfq, pxor, pxor, pxor, pxor, rcl, rcl, rcl, rcl, rcpps, rcpps, rcpss, rcpss, rcr, rcr, rcr, rcr, rdtsc, rdtscp, ret, ret, rol, rol, rol, rol, ror, ror, ror, ror, roundpd, roundpd, roundps, roundps, roundsd, roundsd, roundss, roundss, rsqrtps, rsqrtps, rsqrtss, rsqrtss, sahf, sal, sal, sal, sal, sar, sar, sar, sar, sbb, sbb, sbb, sbb, sbb, set, set, seta, seta, setae, setae, setb, setb, setbe, setbe, setc, setc, sete, sete, setg, setg, setge, setge, setl, setl, setle, setle, setna, setna, setnae, setnae, setnb, setnb, setnbe, setnbe, setnc, setnc, setne, setne, setng, setng, setnge, setnge, setnl, setnl, setnle, setnle, setno, setno, setnp, setnp, setns, setns, setnz, setnz, seto, seto, setp, setp, setpe, setpe, setpo, setpo, sets, sets, setz, setz, sfence, shl, shl, shl, shl, shld, shld, shld, shld, shr, shr, shr, shr, shrd, shrd, shrd, shrd, shufps, shufps, sqrtpd, sqrtpd, sqrtps, sqrtps, sqrtsd, sqrtsd, sqrtss, sqrtss, stc, std, stmxcsr, sub, sub, sub, sub, sub, subpd, subpd, subps, subps, subsd, subsd, subss, subss, test, test, test, test, ucomisd, ucomisd, ucomiss, ucomiss, ud2, unpckhpd, unpckhpd, unpckhps, unpckhps, unpcklpd, unpcklpd, unpcklps, unpcklps, xadd, xadd, xchg, xchg, xchg, xor_, xor_, xor_, xor_, xor_, xorpd, xorpd, xorps, xorps
Methods inherited from class jnr.x86asm.SerializerCore
_emitJcc, _emitJcc, conditionToCMovCC, conditionToJCC, conditionToSetCC, emitX86, emitX86, emitX86, emitX86
-
Field Details
-
_buffer
-
_relocData
-
cpuInfo
-
_properties
private int _properties -
_trampolineSize
int _trampolineSizeSize of possible trampolines. -
_logger
-
cpu
-
I386
-
X86_64
-
nop1
private static final int[] nop1 -
nop2
private static final int[] nop2 -
nop3
private static final int[] nop3 -
nop4
private static final int[] nop4 -
nop5
private static final int[] nop5 -
nop6
private static final int[] nop6 -
nop7
private static final int[] nop7 -
nop8
private static final int[] nop8 -
nop9
private static final int[] nop9 -
nop10
private static final int[] nop10 -
nop11
private static final int[] nop11
-
-
Constructor Details
-
Assembler
-
-
Method Details
-
is64
boolean is64()- Specified by:
is64
in classSerializerCore
-
intValue
private static final int intValue(boolean b) -
offset
public final int offset() -
codeSize
public final int codeSize()Gets the required size of memory required to store all the generated code -
trampolineSize
int trampolineSize()Return size of all possible trampolines needed to successfuly generate relative jumps to absolute addresses. This value is only non-zero if jmp of call instructions were used with immediate operand (this means jump or call absolute address directly). Currently only _emitJmpOrCallReloc() method can increase trampoline size value. -
getByteAt
public final byte getByteAt(int pos) -
getWordAt
public final short getWordAt(int pos) -
getDWordAt
public final int getDWordAt(int pos) -
getQWordAt
public final long getQWordAt(int pos) -
setByteAt
public final void setByteAt(int pos, byte x) -
setWordAt
public final void setWordAt(int pos, short x) -
setDWordAt
public final void setDWordAt(int pos, int x) -
setQWordAt
public final void setQWordAt(int pos, long x) -
getInt32At
public final int getInt32At(int pos) -
setInt32At
public final void setInt32At(int pos, long x) -
setVarAt
public final void setVarAt(int pos, long i, boolean isUnsigned, int size) -
_emitByte
final void _emitByte(int x) Emit Byte to internal buffer. -
_emitWord
final void _emitWord(int x) Emit Word (2 bytes) to internal buffer. -
_emitDWord
final void _emitDWord(int x) Emit DWord (4 bytes) to internal buffer. -
_emitQWord
final void _emitQWord(long x) Emit QWord (8 bytes) to internal buffer. -
_emitInt32
final void _emitInt32(int x) Emit Int32 (4 bytes) to internal buffer. -
_emitSysInt
final void _emitSysInt(long x) Emit system signed integer (4 or 8 bytes) to internal buffer. -
_emitOpCode
final void _emitOpCode(int opCode) -
_emitSegmentPrefix
-
_emitImmediate
-
_emitRexR
void _emitRexR(int w, int opReg, int regCode) Emit REX prefix (64 bit mode only). -
_emitRexR
void _emitRexR(boolean w, int opReg, int regCode) -
_emitRexRM
Emit REX prefix (64 bit mode only). -
_emitRexRM
-
_emitModM
-
_emitX86Inl
void _emitX86Inl(int opCode, boolean i16bit, boolean rexw, int reg) -
_emitX86Inl
void _emitX86Inl(int opCode, boolean i16bit, int rexw, int reg) -
_emitModRM
-
_emitMod
void _emitMod(int m, int o, int r) Emit MODR/M byte. -
_emitSib
void _emitSib(int s, int i, int b) Emit SIB byte. -
_emitModR
void _emitModR(int opReg, int r) Emit Register / Register - calls _emitMod(3, opReg, r) -
_emitModR
Emit Register / Register - calls _emitMod(3, opReg, r.code()) -
_emitX86RM
-
_emitX86RM
-
_emitX86
- Specified by:
_emitX86
in classSerializerCore
-
_emitFpu
void _emitFpu(int opCode) -
_emitFpuSTI
void _emitFpuSTI(int opCode, int sti) -
_emitFpuMEM
-
_emitMmu
-
_emitDisplacement
-
_emitJmpOrCallReloc
-
relocCode
-
align
public void align(long m)
-