Package jnr.x86asm
Class Assembler
- java.lang.Object
-
- jnr.x86asm.SerializerCore
-
- jnr.x86asm.SerializerIntrinsics
-
- jnr.x86asm.Serializer
-
- jnr.x86asm.Assembler
-
public final class Assembler extends Serializer
Low level code generation.
-
-
Field Summary
Fields Modifier and Type Field Description private CodeBuffer_bufferprivate Logger_loggerprivate int_propertiesprivate java.util.List<RelocData>_relocData(package private) int_trampolineSizeSize of possible trampolines.private CPUcpuprivate CpuInfocpuInfostatic CPUI386private static int[]nop1private static int[]nop10private static int[]nop11private static int[]nop2private static int[]nop3private static int[]nop4private static int[]nop5private static int[]nop6private static int[]nop7private static int[]nop8private static int[]nop9static CPUX86_64-
Fields inherited from class jnr.x86asm.SerializerCore
_cmovcctable, _jcctable, _none, _setcctable
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void_emitByte(int x)Emit Byte to internal buffer.(package private) LinkData_emitDisplacement(Label label, long inlinedDisplacement, int size)(package private) 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) void_emitInt32(int x)Emit Int32 (4 bytes) to internal buffer.(package private) void_emitJmpOrCallReloc(InstructionGroup instruction, long target)(package private) void_emitMmu(int opCode, int rexw, int opReg, Operand src, int immSize)(package private) void_emitMod(int m, int o, int r)Emit MODR/M byte.(package private) void_emitModM(int opReg, Mem mem, int immSize)(package private) void_emitModR(int opReg, int r)Emit Register / Register - calls _emitMod(3, opReg, r)(package private) void_emitModR(int opReg, BaseReg r)Emit Register / Register - calls _emitMod(3, opReg, r.code())(package private) void_emitModRM(int opReg, Operand op, int immSize)(package private) void_emitOpCode(int opCode)(package private) 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_emitSegmentPrefix(Operand rm)(package private) void_emitSib(int s, int i, int b)Emit SIB byte.(package private) void_emitSysInt(long x)Emit system signed integer (4 or 8 bytes) to internal buffer.(package private) void_emitWord(int x)Emit Word (2 bytes) to internal buffer.(package private) void_emitX86(INST_CODE code, Operand o1, Operand o2, Operand o3)(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)voidalign(long m)intcodeSize()Gets the required size of memory required to store all the generated codebytegetByteAt(int pos)intgetDWordAt(int pos)intgetInt32At(int pos)longgetQWordAt(int pos)shortgetWordAt(int pos)private static intintValue(boolean b)(package private) booleanis64()intoffset()voidrelocCode(java.nio.ByteBuffer buffer, long address)voidsetByteAt(int pos, byte x)voidsetDWordAt(int pos, int x)voidsetInt32At(int pos, long x)voidsetQWordAt(int pos, long x)voidsetVarAt(int pos, long i, boolean isUnsigned, int size)voidsetWordAt(int pos, short x)(package private) inttrampolineSize()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 Detail
-
_buffer
private final CodeBuffer _buffer
-
_relocData
private final java.util.List<RelocData> _relocData
-
cpuInfo
private final CpuInfo cpuInfo
-
_properties
private int _properties
-
_trampolineSize
int _trampolineSize
Size of possible trampolines.
-
_logger
private final Logger _logger
-
cpu
private final CPU cpu
-
I386
public static final CPU I386
-
X86_64
public static final CPU 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 Detail
-
Assembler
public Assembler(CPU cpu)
-
-
Method Detail
-
is64
boolean is64()
- Specified by:
is64in 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
void _emitSegmentPrefix(Operand rm)
-
_emitImmediate
void _emitImmediate(Immediate imm, int size)
-
_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
void _emitRexRM(int w, int opReg, Operand rm)Emit REX prefix (64 bit mode only).
-
_emitRexRM
void _emitRexRM(boolean w, int opReg, Operand rm)
-
_emitModM
void _emitModM(int opReg, Mem mem, int immSize)
-
_emitX86Inl
void _emitX86Inl(int opCode, boolean i16bit, boolean rexw, int reg)
-
_emitX86Inl
void _emitX86Inl(int opCode, boolean i16bit, int rexw, int reg)
-
_emitModRM
void _emitModRM(int opReg, Operand op, int immSize)
-
_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
void _emitModR(int opReg, BaseReg r)Emit Register / Register - calls _emitMod(3, opReg, r.code())
-
_emitX86RM
void _emitX86RM(int opCode, boolean i16bit, boolean rexw, int o, Operand op, int immSize)
-
_emitX86RM
void _emitX86RM(int opCode, boolean i16bit, int rexw, int o, Operand op, int immSize)
-
_emitX86
void _emitX86(INST_CODE code, Operand o1, Operand o2, Operand o3)
- Specified by:
_emitX86in classSerializerCore
-
_emitFpu
void _emitFpu(int opCode)
-
_emitFpuSTI
void _emitFpuSTI(int opCode, int sti)
-
_emitFpuMEM
void _emitFpuMEM(int opCode, int opReg, Mem mem)
-
_emitMmu
void _emitMmu(int opCode, int rexw, int opReg, Operand src, int immSize)
-
_emitJmpOrCallReloc
void _emitJmpOrCallReloc(InstructionGroup instruction, long target)
-
relocCode
public void relocCode(java.nio.ByteBuffer buffer, long address)
-
align
public void align(long m)
-
-