sa-jdi

14), new InstructionDecoder("larS", 5, 2, 1, 3), new InstructionDecoder("lslS", 5, 2, 1, 3), null, null, new InstructionDecoder("clts"), null, new InstructionDecoder("invd"), new InstructionDecoder("wbinvd"), null, null, null, null, null, null, new SSEMoveDecoder("movups", 21, 8, 19, 8), new SSEMoveDecoder("movups", 19, 8, 21, 8), new SSEMoveDecoder("movlps", 19, 11, 21, 11), new SSEMoveDecoder("movlps", 21, 11, 19, 11), new SSEInstructionDecoder("unpcklps", 21, 8, 19, 11), new SSEInstructionDecoder("unpckhps", 21, 8, 19, 11), new SSEMoveDecoder("movhps", 21, 11, 19, 11), new SSEMoveDecoder("movhps", 19, 11, 21, 11), new GRPDecoder(null, 21), null, null, null, null, null, null, null, new MoveDecoder("movl", 13, 4, 14, 4), new MoveDecoder("movl", 13, 4, 15, 4), new MoveDecoder("movl", 14, 4, 13, 4), new MoveDecoder("movl", 15, 4, 13, 4), new MoveDecoder("movl", 13, 4, 16, 4), null, new MoveDecoder("movl", 16, 4, 13, 4), null, new SSEMoveDecoder("movaps", 21, 8, 19, 8), new SSEMoveDecoder("movaps", 19, 8, 21, 8), new SSEInstructionDecoder("cvtpi2ps", 21, 8, 20, 11), new SSEMoveDecoder("movntps", 19, 8, 21, 8), new SSEInstructionDecoder("cvttps2pi", 20, 11, 19, 8), new SSEInstructionDecoder("cvtps2pi", 20, 11, 19, 8), new SSEInstructionDecoder("ucomiss", 21, 12, 19, 12), new SSEInstructionDecoder("comiss", 21, 8, 19, 8), new SSEInstructionDecoder("wrmsr"), new SSEInstructionDecoder("rtdsc"), new SSEInstructionDecoder("rdmsr"), new SSEInstructionDecoder("rdpmc"), new SSEInstructionDecoder("sysenter"), new SSEInstructionDecoder("sysexit"), null, null, null, null, null, null, new SSEMoveDecoder("movnti", 5, 2, 1, 2), null, null, null, new MoveDecoder("cmovo", 5, 2, 1, 2), new MoveDecoder("cmovno", 5, 2, 1, 2), new MoveDecoder("cmovb", 5, 2, 1, 2), new MoveDecoder("cmovae", 5, 2, 1, 2), new MoveDecoder("cmove", 5, 2, 1, 2), new MoveDecoder("cmovne", 5, 2, 1, 2), new MoveDecoder("cmovbe", 5, 2, 1, 2), new MoveDecoder("cmova", 5, 2, 1, 2), new MoveDecoder("cmovs", 5, 2, 1, 2), new MoveDecoder("cmovns", 5, 2, 1, 2), new MoveDecoder("cmovp", 5, 2, 1, 2), new MoveDecoder("cmovnp", 5, 2, 1, 2), new MoveDecoder("cmovl", 5, 2, 1, 2), new MoveDecoder("cmovge", 5, 2, 1, 2), new MoveDecoder("cmovle", 5, 2, 1, 2), new MoveDecoder("cmovg", 5, 2, 1, 2), new SSEMoveDecoder("movmskps", 1, 4, 21, 8), new SSEInstructionDecoder("sqrtps", 21, 8, 19, 8), new SSEInstructionDecoder("rsqrtps", 21, 8, 19, 8), new SSEInstructionDecoder("rcpps", 21, 8, 19, 8), new SSELogicalDecoder("andps", 21, 8, 19, 8, 8), new SSELogicalDecoder("andnps", 21, 8, 19, 8, 8), new SSELogicalDecoder("orps", 21, 8, 19, 8, 9), new SSELogicalDecoder("xorps", 21, 8, 19, 8, 13), new SSEArithmeticDecoder("addps", 21, 8, 19, 8, 0), new SSEArithmeticDecoder("mulps", 21, 8, 19, 8, 4), new SSEInstructionDecoder("cvtps2pd", 21, 9, 19, 8), new SSEInstructionDecoder("cvtdq2ps", 21, 8, 19, 6), new SSEArithmeticDecoder("subps", 21, 8, 19, 8, 2), new SSEInstructionDecoder("minps", 21, 8, 19, 8), new SSEArithmeticDecoder("divps", 21, 8, 19, 8, 6), new SSEInstructionDecoder("maxps", 21, 8, 19, 8), new SSEInstructionDecoder("punpcklbw", 22, 11, 20, 4), new SSEInstructionDecoder("punpcklwd", 22, 11, 20, 4), new SSEInstructionDecoder("punpckldq", 22, 11, 20, 4), new SSEInstructionDecoder("packsswb", 22, 11, 20, 11), new SSEInstructionDecoder("pcmpgtb", 22, 11, 20, 11), new SSEInstructionDecoder("pcmpgtw", 22, 11, 20, 11), new SSEInstructionDecoder("pcmpgtd", 22, 11, 20, 11), new SSEInstructionDecoder("packuswb", 22, 11, 20, 11), new SSEInstructionDecoder("punpckhbw", 22, 11, 20, 4), new SSEInstructionDecoder("punpckhwd", 22, 11, 20, 4), new SSEInstructionDecoder("punpckhdq", 22, 11, 20, 4), new SSEInstructionDecoder("packssdw", 22, 11, 20, 4), null, null, new SSEMoveDecoder("movd", 22, 4, 1, 4), new SSEMoveDecoder("movq", 22, 11, 1, 11), new SSEInstructionDecoder("pshufw", 22, 11, 20, 11, 2, 1), new GRPDecoder(null, 17), new GRPDecoder(null, 18), new GRPDecoder(null, 19), new SSEInstructionDecoder("pcmpeqb", 22, 11, 20, 11), new SSEInstructionDecoder("pcmpeqw", 22, 11, 20, 11), new SSEInstructionDecoder("pcmpeqd", 22, 11, 20, 11), new SSEInstructionDecoder("emms"), null, null, null, null, null, null, new SSEMoveDecoder("movd", 1, 4, 22, 4), new SSEMoveDecoder("movq", 20, 11, 22, 11), new ConditionalJmpDecoder("jo", 4, 2), new ConditionalJmpDecoder("jno", 4, 2), new ConditionalJmpDecoder("jb", 4, 2), new ConditionalJmpDecoder("jae", 4, 2), new ConditionalJmpDecoder("je", 4, 2), new ConditionalJmpDecoder("jne", 4, 2), new ConditionalJmpDecoder("jbe", 4, 2), new ConditionalJmpDecoder("ja", 4, 2), new ConditionalJmpDecoder("js", 4, 2), new ConditionalJmpDecoder("jns", 4, 2), new ConditionalJmpDecoder("jp", 4, 2), new ConditionalJmpDecoder("jnp", 4, 2), new ConditionalJmpDecoder("jl", 4, 2), new ConditionalJmpDecoder("jge", 4, 2), new ConditionalJmpDecoder("jle", 4, 2), new ConditionalJmpDecoder("jg", 4, 2), new InstructionDecoder("seto", 1, 1), new InstructionDecoder("setno", 1, 1), new InstructionDecoder("setb", 1, 1), new InstructionDecoder("setae", 1, 1), new InstructionDecoder("sete", 1, 1), new InstructionDecoder("setne", 1, 1), new InstructionDecoder("setbe", 1, 1), new InstructionDecoder("seta", 1, 1), new InstructionDecoder("sets", 1, 1), new InstructionDecoder("setns", 1, 1), new InstructionDecoder("setp", 1, 1), new InstructionDecoder("setnp", 1, 1), new InstructionDecoder("setl", 1, 1), new InstructionDecoder("setge", 1, 1), new InstructionDecoder("setle", 1, 1), new InstructionDecoder("setg", 1, 1), new InstructionDecoder("pushl", 6, 28), new InstructionDecoder("popl", 6, 28), null, new InstructionDecoder("btS", 1, 2, 5, 2), new InstructionDecoder("shldS", 1, 2, 5, 2, 2, 1), new InstructionDecoder("shldS", 1, 2, 5, 2, 6, 17), null, null, new InstructionDecoder("pushl", 6, 29), new InstructionDecoder("popl", 6, 29), new SSEInstructionDecoder("rsm"), new InstructionDecoder("btsS", 1, 2, 5, 2), new InstructionDecoder("shrdS", 1, 2, 5, 2, 2, 1), new InstructionDecoder("shrdS", 1, 2, 5, 2, 6, 17), new GRPDecoder(null, 20), new ArithmeticDecoder("imulS", 5, 2, 1, 2, 4), new InstructionDecoder("cmpxchgb", 1, 1, 5, 1), new InstructionDecoder("cmpxchgS", 1, 2, 5, 2), new InstructionDecoder("lssS", 5, 2, 17, 5), new InstructionDecoder("btrS", 1, 2, 5, 2), new InstructionDecoder("lfsS", 5, 2, 17, 5), new InstructionDecoder("lgsS", 5, 2, 17, 5), new MoveDecoder("movzbS", 5, 2, 1, 1), new MoveDecoder("movzwS", 5, 2, 1, 3), null, null, new GRPDecoder(null, 15), new InstructionDecoder("btcS", 1, 2, 5, 2), new InstructionDecoder("bsfS", 5, 2, 1, 2), new InstructionDecoder("bsrS", 5, 2, 1, 2), new MoveDecoder("movsbS", 5, 2, 1, 1), new MoveDecoder("movswS", 5, 2, 1, 3), new ArithmeticDecoder("xaddb", 1, 1, 5, 1, 0), new ArithmeticDecoder("xaddS", 1, 2, 5, 2, 0), new SSEInstructionDecoder("cmpps", 21, 8, 19, 8, 2, 1), new SSEMoveDecoder("movnti", 1, 4, 5, 4), new SSEInstructionDecoder("pinsrw", 22, 11, 1, 4, 2, 1), new SSEInstructionDecoder("pextrw", 5, 4, 22, 11, 2, 1), new SSEInstructionDecoder("shufps", 21, 8, 19, 8, 2, 1), new GRPDecoder(null, 16), new InstructionDecoder("bswap", 6, 0), new InstructionDecoder("bswap", 6, 1), new InstructionDecoder("bswap", 6, 2), new InstructionDecoder("bswap", 6, 3), new InstructionDecoder("bswap", 6, 4), new InstructionDecoder("bswap", 6, 5), new InstructionDecoder("bswap", 6, 6), new InstructionDecoder("bswap", 6, 7), null, new SSEShiftDecoder("psrlw", 22, 11, 20, 11, 15), new SSEShiftDecoder("psrld", 22, 11, 20, 11, 15), new SSEShiftDecoder("psrlq", 22, 11, 20, 11, 15), new SSEArithmeticDecoder("paddq", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("pmullw", 22, 11, 20, 11, 4), null, new SSEMoveDecoder("pmovmskb", 5, 4, 22, 11), new SSEArithmeticDecoder("psubusb", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("psubusw", 22, 11, 20, 11, 2), new SSEInstructionDecoder("pminub", 22, 11, 20, 11), new SSELogicalDecoder("pand", 22, 11, 20, 11, 8), new SSEArithmeticDecoder("paddusb", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("paddusw", 22, 11, 20, 11, 0), new SSEInstructionDecoder("pmaxub", 22, 11, 20, 11), new SSELogicalDecoder("pandn", 22, 11, 20, 11, 8), new SSEInstructionDecoder("pavgb", 22, 11, 20, 11), new SSEInstructionDecoder("psraw", 22, 11, 20, 11), new SSEInstructionDecoder("psrad", 22, 11, 20, 11), new SSEInstructionDecoder("pavgw", 22, 11, 20, 11), new SSEArithmeticDecoder("pmulhuw", 22, 11, 20, 11, 5), new SSEArithmeticDecoder("pmulhw", 22, 11, 20, 11, 4), null, new SSEMoveDecoder("movntq", 19, 11, 21, 11), new SSEArithmeticDecoder("psubsb", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("psubsw", 22, 11, 20, 11, 2), new SSEInstructionDecoder("pminsw", 22, 11, 20, 11), new SSELogicalDecoder("por", 22, 11, 20, 11, 9), new SSEArithmeticDecoder("paddsb", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("paddsw", 22, 11, 20, 11, 0), new SSEInstructionDecoder("pmaxsw", 22, 11, 20, 11), new SSELogicalDecoder("pxor", 22, 11, 20, 11, 13), null, new SSEShiftDecoder("psllw", 22, 11, 20, 11, 17), new SSEShiftDecoder("pslld", 22, 11, 20, 11, 17), new SSEShiftDecoder("psllq", 22, 11, 20, 11, 17), new SSEArithmeticDecoder("pmuludq", 22, 11, 20, 11, 5), new SSEArithmeticDecoder("pmaddwd", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("psadbw", 22, 11, 20, 11, 0), new SSEMoveDecoder("maskmoveq", 22, 7, 20, 7), new SSEArithmeticDecoder("psubb", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("psubw", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("psubd", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("psubq", 22, 11, 20, 11, 2), new SSEArithmeticDecoder("paddb", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("paddw", 22, 11, 20, 11, 0), new SSEArithmeticDecoder("paddd", 22, 11, 20, 11, 0), null };
  private static final InstructionDecoder[] twoBytePrefixF2Table = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movsd", 21, 10, 19, 10), new SSEMoveDecoder("movsd", 21, 10, 19, 10), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cvtsi2sd", 21, 10, 1, 4), null, new SSEInstructionDecoder("cvttsd2si", 5, 4, 19, 10), new SSEInstructionDecoder("cvtsd2si", 5, 4, 19, 10), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("sqrtsd", 21, 10, 19, 10), null, null, null, null, null, null, new SSEArithmeticDecoder("addsd", 21, 10, 19, 10, 0), new SSEArithmeticDecoder("mulsd", 21, 10, 19, 10, 4), new SSEInstructionDecoder("cvtsd2ss", 21, 10, 19, 10), null, new SSEArithmeticDecoder("subsd", 21, 10, 19, 10, 2), new SSEInstructionDecoder("minsd", 21, 10, 19, 10), new SSEArithmeticDecoder("divsd", 21, 10, 19, 10, 6), new SSEInstructionDecoder("maxsd", 21, 10, 19, 10), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("pshuflw", 21, 6, 19, 6, 2, 1), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cmpsd", 21, 10, 19, 10, 2, 1), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movdq2q", 22, 11, 19, 11), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cvtpd2dq", 21, 6, 19, 9), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null };
  private static final InstructionDecoder[] twoBytePrefixF3Table = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movss", 21, 12, 19, 12), new SSEMoveDecoder("movss", 19, 12, 21, 12), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cvtsi2ss", 21, 12, 1, 4), null, new SSEInstructionDecoder("cvttss2si", 5, 4, 19, 12), new SSEInstructionDecoder("cvtss2si", 5, 4, 19, 12), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("sqrtss", 21, 12, 19, 12), new SSEInstructionDecoder("rsqrtss", 21, 12, 19, 12), new SSEInstructionDecoder("rcpss", 21, 12, 19, 12), null, null, null, null, new SSEArithmeticDecoder("addss", 21, 12, 19, 12, 0), new SSEArithmeticDecoder("mulss", 21, 12, 19, 12, 4), new SSEInstructionDecoder("cvtss2sd", 21, 12, 19, 12), new SSEInstructionDecoder("cvttps2dq", 21, 6, 19, 8), new SSEArithmeticDecoder("subss", 21, 12, 19, 12, 2), new SSEInstructionDecoder("minss", 21, 12, 19, 12), new SSEArithmeticDecoder("divss", 21, 12, 19, 12, 6), new SSEInstructionDecoder("maxss", 21, 12, 19, 12), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movdqu", 21, 6, 19, 6), new SSEInstructionDecoder("pshufhw", 21, 6, 19, 6, 2, 1), null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movq", 21, 11, 19, 11), new SSEMoveDecoder("movdqu", 19, 6, 21, 6), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cmpss", 21, 12, 19, 12, 2, 1), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movq2dq", 21, 6, 20, 11), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cvtdq2pd", 21, 9, 19, 6), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null };
  private static final InstructionDecoder[] twoBytePrefix66Table = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movupd", 21, 9, 19, 9), new SSEMoveDecoder("movupd", 19, 9, 21, 9), new SSEMoveDecoder("movlpd", 21, 11, 19, 14), new SSEMoveDecoder("movlpd", 21, 11, 19, 11), new SSEInstructionDecoder("unpcklpd", 21, 9, 19, 11), new SSEInstructionDecoder("unpckhpd", 21, 9, 19, 11), new SSEMoveDecoder("movhpd", 21, 11, 19, 11), new SSEMoveDecoder("movhpd", 19, 11, 21, 11), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movapd", 21, 9, 19, 9), new SSEMoveDecoder("movapd", 19, 9, 21, 9), new SSEInstructionDecoder("cvtpi2pd", 21, 9, 20, 6), new SSEMoveDecoder("movntpd", 19, 9, 21, 9), new SSEInstructionDecoder("cvttpd2pi", 20, 6, 19, 9), new SSEInstructionDecoder("cvtpd2pi", 20, 6, 19, 9), new SSEInstructionDecoder("ucomisd", 21, 10, 19, 10), new SSEInstructionDecoder("comisd", 21, 10, 19, 10), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEMoveDecoder("movmskpd", 1, 4, 21, 9), new SSEInstructionDecoder("sqrtpd", 21, 9, 19, 9), null, null, new SSELogicalDecoder("andpd", 21, 9, 19, 9, 8), new SSELogicalDecoder("andnpd", 21, 9, 19, 9, 8), new SSELogicalDecoder("orpd", 21, 9, 19, 9, 9), new SSELogicalDecoder("xorpd", 21, 9, 19, 9, 13), new SSEArithmeticDecoder("addpd", 21, 9, 19, 9, 0), new SSEArithmeticDecoder("mulpd", 21, 9, 19, 9, 4), new SSEInstructionDecoder("cvtpd2ps", 21, 8, 19, 9), new SSEInstructionDecoder("cvtps2dq", 21, 6, 19, 8), new SSEArithmeticDecoder("subpd", 21, 9, 19, 9, 2), new SSEInstructionDecoder("minpd", 21, 9, 19, 9), new SSEArithmeticDecoder("divpd", 21, 9, 19, 9, 6), new SSEInstructionDecoder("maxpd", 21, 9, 19, 9), new SSEInstructionDecoder("punpcklbw", 21, 6, 19, 6), new SSEInstructionDecoder("punpcklwd", 21, 6, 19, 6), new SSEInstructionDecoder("punpckldq", 21, 6, 19, 6), new SSEInstructionDecoder("packsswb", 21, 6, 19, 6), new SSEInstructionDecoder("pcmpgtb", 21, 6, 19, 6), new SSEInstructionDecoder("pcmpgtw", 21, 6, 19, 6), new SSEInstructionDecoder("pcmpgtd", 21, 6, 19, 6), new SSEInstructionDecoder("packuswb", 21, 6, 19, 6), new SSEInstructionDecoder("punpckhbw", 22, 6, 20, 6), new SSEInstructionDecoder("punpckhwd", 22, 6, 20, 6), new SSEInstructionDecoder("punpckhdq", 22, 6, 20, 6), new SSEInstructionDecoder("packssdw", 22, 6, 20, 6), new SSEInstructionDecoder("punpcklqdq", 21, 6, 19, 6), new SSEInstructionDecoder("punpckhqdq", 21, 6, 19, 6), new SSEMoveDecoder("movd", 21, 6, 1, 4), new SSEMoveDecoder("movdqa", 21, 6, 19, 6), new SSEInstructionDecoder("pshufd", 21, 6, 19, 6, 2, 1), new GRPDecoder(null, 22), new GRPDecoder(null, 23), new GRPDecoder(null, 24), new SSEInstructionDecoder("pcmpeqb", 21, 6, 19, 6), new SSEInstructionDecoder("pcmpeqw", 21, 6, 19, 6), new SSEInstructionDecoder("pcmpeqd", 21, 6, 19, 6), null, null, null, null, null, null, null, new SSEMoveDecoder("movd", 1, 4, 21, 6), new SSEMoveDecoder("movdqa", 19, 6, 21, 6), null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, new SSEInstructionDecoder("cmppd", 21, 9, 19, 9, 2, 1), null, new SSEInstructionDecoder("pinsrw", 21, 6, 1, 4, 2, 1), new SSEInstructionDecoder("pextrw", 5, 4, 21, 6, 2, 1), new SSEInstructionDecoder("shufpd", 21, 9, 19, 9, 2, 1), null, null, null, null, null, null, null, null, null, null, new SSEShiftDecoder("psrlw", 21, 6, 19, 6, 15), new SSEShiftDecoder("psrld", 21, 6, 19, 6, 15), new SSEShiftDecoder("psrlq", 21, 6, 19, 6, 15), new SSEArithmeticDecoder("paddq", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("pmullw", 21, 6, 19, 6, 4), new SSEMoveDecoder("movq", 19, 11, 21, 11), new SSEMoveDecoder("pmovmskb", 5, 4, 21, 6), new SSEArithmeticDecoder("psubusb", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("psubusw", 21, 6, 19, 6, 2), new SSEInstructionDecoder("pminub", 21, 6, 19, 6), new SSELogicalDecoder("pand", 21, 6, 19, 6, 8), new SSEArithmeticDecoder("paddusb", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("paddusw", 21, 6, 19, 6, 0), new SSEInstructionDecoder("pmaxub", 21, 6, 19, 6), new SSELogicalDecoder("pandn", 21, 6, 19, 6, 8), new SSEInstructionDecoder("pavgb", 21, 6, 19, 6), new SSEInstructionDecoder("psraw", 21, 6, 19, 6), new SSEInstructionDecoder("psrad", 21, 6, 19, 6), new SSEInstructionDecoder("pavgw", 21, 6, 19, 6), new SSEArithmeticDecoder("pmulhuw", 21, 6, 19, 6, 5), new SSEArithmeticDecoder("pmulhw", 21, 6, 19, 6, 4), new SSEInstructionDecoder("cvttpd2dq", 21, 6, 19, 9), new SSEMoveDecoder("movntdq", 19, 6, 21, 6), new SSEArithmeticDecoder("psubusb", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("psubusw", 21, 6, 19, 6, 2), new SSEInstructionDecoder("pminsw", 21, 6, 19, 6), new SSELogicalDecoder("por", 21, 6, 19, 6, 9), new SSEArithmeticDecoder("paddsb", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("paddsw", 21, 6, 19, 6, 0), new SSEInstructionDecoder("pmaxsw", 21, 6, 19, 6), new SSELogicalDecoder("pxor", 21, 6, 19, 6, 13), null, new SSEShiftDecoder("psllw", 21, 6, 19, 6, 17), new SSEShiftDecoder("pslld", 21, 6, 19, 6, 17), new SSEShiftDecoder("psllq", 21, 6, 19, 6, 17), new SSEArithmeticDecoder("pmuludq", 21, 6, 19, 6, 5), new SSEArithmeticDecoder("pmaddwd", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("psadbw", 21, 6, 19, 6, 0), new SSEMoveDecoder("maskmovdqu", 21, 6, 19, 6), new SSEArithmeticDecoder("psubb", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("psubw", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("psubd", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("psubq", 21, 6, 19, 6, 2), new SSEArithmeticDecoder("paddb", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("paddw", 21, 6, 19, 6, 0), new SSEArithmeticDecoder("paddd", 21, 6, 19, 6, 0), null };
  
  public void decode(InstructionVisitor visitor)
  {
    int enter_instruction = 0;
    Instruction instr = null;
    visitor.prologue();
    InstructionDecoder instrDecoder = null;
    try
    {
      byteIndex = 0;
      int len = 0;
      int instrStartIndex = 0;
      while (len < code.length)
      {
        int prefixes = 0;
        instrStartIndex = byteIndex;
        
        prefixes = getPrefixes();
        int segmentOverride = 1;
        if (code[byteIndex] == 200) {
          enter_instruction = 1;
        } else {
          enter_instruction = 0;
        }
        int opcode = InstructionDecoder.readByte(code, byteIndex);
        byteIndex += 1;
        if (opcode == 15)
        {
          opcode = InstructionDecoder.readByte(code, byteIndex);
          byteIndex += 1;
          if ((prefixes & 0x2) != 0) {
            instrDecoder = twoBytePrefixF2Table[opcode];
          } else if ((prefixes & 0x1) != 0) {
            instrDecoder = twoBytePrefixF3Table[opcode];
          } else if ((prefixes & 0x200) != 0) {
            instrDecoder = twoBytePrefix66Table[opcode];
          } else {
            instrDecoder = twoByteTable[opcode];
          }
        }
        else
        {
          instrDecoder = oneByteTable[opcode];
        }
        if (instrDecoder != null)
        {
          instr = instrDecoder.decode(code, byteIndex, instrStartIndex, segmentOverride, prefixes, factory);
          visitor.visit(startPc + len, instr);
          len = instrDecoder.getCurrentIndex();
        }
        else
        {
          len++;
        }
        byteIndex = len;
      }
    }
    catch (Exception exp)
    {
      visitor.epilogue();
    }
  }
  
  private int getPrefixes()
  {
    int prefixByte = 0;
    int prefixes = 0;
    boolean isPrefix = true;
    while (isPrefix)
    {
      prefixByte = InstructionDecoder.readByte(code, byteIndex);
      switch (prefixByte)
      {
      case 243: 
        prefixes |= 0x1;
        break;
      case 242: 
        prefixes |= 0x2;
        break;
      case 240: 
        prefixes |= 0x4;
        break;
      case 46: 
        prefixes |= 0x8;
        break;
      case 54: 
        prefixes |= 0x10;
        break;
      case 62: 
        prefixes |= 0x20;
        break;
      case 38: 
        prefixes |= 0x40;
        break;
      case 100: 
        prefixes |= 0x80;
        break;
      case 101: 
        prefixes |= 0x100;
        break;
      case 102: 
        prefixes |= 0x200;
        break;
      case 103: 
        prefixes |= 0x400;
        break;
      case 155: 
        prefixes |= 0x800;
        break;
      default: 
        isPrefix = false;
      }
      if (isPrefix) {
        byteIndex += 1;
      }
    }
    return prefixes;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86Disassembler
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Register;

public class X86FloatRegister
  extends Register
{
  public X86FloatRegister(int number)
  {
    super(number);
  }
  
  public int getNumber()
  {
    return number;
  }
  
  public int getNumberOfRegisters()
  {
    return X86FloatRegisters.getNumRegisters();
  }
  
  public boolean isFloat()
  {
    return true;
  }
  
  public boolean isFramePointer()
  {
    return false;
  }
  
  public boolean isStackPointer()
  {
    return false;
  }
  
  public boolean isValid()
  {
    return (number >= 0) && (number < X86FloatRegisters.getNumRegisters());
  }
  
  public String toString()
  {
    return X86FloatRegisters.getRegisterName(number);
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FloatRegister
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.utilities.Assert;

public class X86FloatRegisters
{
  public static int getNumRegisters()
  {
    return 8;
  }
  
  public static X86FloatRegister getRegister(int regNum)
  {
    if (Assert.ASSERTS_ENABLED) {
      Assert.that((regNum > -1) && (regNum < 8), "invalid float register number!");
    }
    return registers[regNum];
  }
  
  public static String getRegisterName(int i)
  {
    return "ST(" + i + ")";
  }
  
  public static final X86FloatRegister ST0 = new X86FloatRegister(0);
  public static final X86FloatRegister ST1 = new X86FloatRegister(1);
  public static final X86FloatRegister ST2 = new X86FloatRegister(2);
  public static final X86FloatRegister ST3 = new X86FloatRegister(3);
  public static final X86FloatRegister ST4 = new X86FloatRegister(4);
  public static final X86FloatRegister ST5 = new X86FloatRegister(5);
  public static final X86FloatRegister ST6 = new X86FloatRegister(6);
  public static final X86FloatRegister ST7 = new X86FloatRegister(7);
  public static final int NUM_REGISTERS = 8;
  private static final X86FloatRegister[] registers = { ST0, ST1, ST2, ST3, ST4, ST5, ST6, ST7 };
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FloatRegisters
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.ArithmeticInstruction;
import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.SymbolFinder;

public class X86FPArithmeticInstruction
  extends X86FPInstruction
  implements ArithmeticInstruction
{
  private final int operation;
  private final Operand operand1;
  private final Operand operand2;
  private final String description;
  
  public X86FPArithmeticInstruction(String name, int operation, Operand op1, Operand op2, int size, int prefixes)
  {
    super(name, size, prefixes);
    this.operation = operation;
    operand1 = op1;
    operand2 = op2;
    description = initDescription();
  }
  
  protected String initDescription()
  {
    StringBuffer buf = new StringBuffer();
    buf.append(getPrefixString());
    buf.append(getName());
    buf.append(spaces);
    if (operand1 != null) {
      buf.append(getOperandAsString(operand1));
    }
    if (operand2 != null)
    {
      buf.append(comma);
      buf.append(getOperandAsString(operand2));
    }
    return buf.toString();
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    return description;
  }
  
  public Operand getArithmeticDestination()
  {
    return operand1;
  }
  
  public Operand getOperand1()
  {
    return operand1;
  }
  
  public Operand getOperand2()
  {
    return operand2;
  }
  
  public Operand[] getArithmeticSources()
  {
    return new Operand[] { operand1, operand2 };
  }
  
  public int getOperation()
  {
    return operation;
  }
  
  public boolean isArithmetic()
  {
    return true;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FPArithmeticInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.SymbolFinder;

public class X86FPInstruction
  extends X86Instruction
{
  private final Operand operand1;
  private final String description;
  
  public X86FPInstruction(String name, int size, int prefixes)
  {
    super(name, size, prefixes);
    operand1 = null;
    description = initDescription();
  }
  
  public X86FPInstruction(String name, Operand op1, int size, int prefixes)
  {
    super(name, size, prefixes);
    operand1 = op1;
    description = initDescription();
  }
  
  protected String initDescription()
  {
    StringBuffer buf = new StringBuffer();
    buf.append(getPrefixString());
    buf.append(getName());
    buf.append(spaces);
    if (operand1 != null) {
      buf.append(getOperandAsString(operand1));
    }
    return buf.toString();
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    return description;
  }
  
  public Operand getOperand1()
  {
    return operand1;
  }
  
  public boolean isFloat()
  {
    return true;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FPInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.SymbolFinder;

public class X86FPLoadInstruction
  extends X86FPInstruction
{
  private final Operand source;
  
  public X86FPLoadInstruction(String name, Operand operand, int size, int prefixes)
  {
    super(name, size, prefixes);
    source = operand;
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    StringBuffer buf = new StringBuffer();
    buf.append(getPrefixString());
    buf.append(getName());
    buf.append(spaces);
    buf.append(source.toString());
    return buf.toString();
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FPLoadInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.SymbolFinder;

public class X86FPStoreInstruction
  extends X86FPInstruction
{
  private final Operand dest;
  
  public X86FPStoreInstruction(String name, Operand op, int size, int prefixes)
  {
    super(name, size, prefixes);
    dest = op;
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    StringBuffer buf = new StringBuffer();
    buf.append(getPrefixString());
    buf.append(getName());
    buf.append(spaces);
    buf.append(dest.toString());
    return buf.toString();
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86FPStoreInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.SymbolFinder;

public class X86GeneralInstruction
  extends X86Instruction
{
  private final Operand operand1;
  private final Operand operand2;
  private final Operand operand3;
  private final String description;
  
  public X86GeneralInstruction(String name, Operand op1, Operand op2, Operand op3, int size, int prefixes)
  {
    super(name, size, prefixes);
    operand1 = op1;
    operand2 = op2;
    operand3 = op3;
    description = initDescription();
  }
  
  public X86GeneralInstruction(String name, Operand op1, Operand op2, int size, int prefixes)
  {
    this(name, op1, op2, null, size, prefixes);
  }
  
  public X86GeneralInstruction(String name, Operand op1, int size, int prefixes)
  {
    this(name, op1, null, null, size, prefixes);
  }
  
  protected String initDescription()
  {
    StringBuffer buf = new StringBuffer();
    buf.append(getPrefixString());
    buf.append(getName());
    buf.append(spaces);
    if (operand1 != null) {
      buf.append(getOperandAsString(operand1));
    }
    if (operand2 != null)
    {
      buf.append(comma);
      buf.append(getOperandAsString(operand2));
    }
    if (operand3 != null)
    {
      buf.append(comma);
      buf.append(getOperandAsString(operand3));
    }
    return buf.toString();
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    return description;
  }
  
  public Operand getOperand1()
  {
    return operand1;
  }
  
  public Operand getOperand2()
  {
    return operand2;
  }
  
  public Operand getOperand3()
  {
    return operand3;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86GeneralInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.CPUHelper;
import sun.jvm.hotspot.asm.Disassembler;
import sun.jvm.hotspot.asm.Register;

public class X86Helper
  implements CPUHelper
{
  public Disassembler createDisassembler(long startPc, byte[] code)
  {
    return new X86Disassembler(startPc, code);
  }
  
  public Register getIntegerRegister(int num)
  {
    return X86Registers.getRegister32(num);
  }
  
  public Register getFloatRegister(int num)
  {
    return X86FloatRegisters.getRegister(num);
  }
  
  public Register getStackPointer()
  {
    return X86Registers.ESP;
  }
  
  public Register getFramePointer()
  {
    return X86Registers.EBP;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86Helper
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.SymbolFinder;

public final class X86IllegalInstruction
  extends X86Instruction
{
  private final String description;
  
  public X86IllegalInstruction()
  {
    super("illegal", 1, 0);
    description = "bad opcode";
  }
  
  public String asString(long currentPc, SymbolFinder symFinder)
  {
    return description;
  }
  
  public boolean isIllegal()
  {
    return true;
  }
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86IllegalInstruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Address;
import sun.jvm.hotspot.asm.Immediate;
import sun.jvm.hotspot.asm.Instruction;
import sun.jvm.hotspot.asm.Operand;
import sun.jvm.hotspot.asm.Register;
import sun.jvm.hotspot.asm.SymbolFinder;

public abstract class X86Instruction
  implements Instruction, X86Opcodes
{
  private final String name;
  private final int size;
  private final int prefixes;
  
  public X86Instruction(String name, int size, int prefixes)
  {
    this.name = name;
    this.size = size;
    this.prefixes = prefixes;
  }
  
  public abstract String asString(long paramLong, SymbolFinder paramSymbolFinder);
  
  public String getName()
  {
    return name;
  }
  
  public String getPrefixString()
  {
    StringBuffer buf = new StringBuffer();
    if ((prefixes & 0x1) != 0) {
      buf.append("repz ");
    }
    if ((prefixes & 0x2) != 0) {
      buf.append("repnz ");
    }
    if ((prefixes & 0x4) != 0) {
      buf.append("lock ");
    }
    return buf.toString();
  }
  
  protected String getOperandAsString(Operand op)
  {
    StringBuffer buf = new StringBuffer();
    if (((op instanceof Register)) || ((op instanceof Address)))
    {
      buf.append(op.toString());
    }
    else
    {
      Number number = ((Immediate)op).getNumber();
      buf.append("0x");
      buf.append(Integer.toHexString(number.intValue()));
    }
    return buf.toString();
  }
  
  public int getSize()
  {
    return size;
  }
  
  public boolean isArithmetic()
  {
    return false;
  }
  
  public boolean isBranch()
  {
    return false;
  }
  
  public boolean isCall()
  {
    return false;
  }
  
  public boolean isFloat()
  {
    return false;
  }
  
  public boolean isIllegal()
  {
    return false;
  }
  
  public boolean isLoad()
  {
    return false;
  }
  
  public boolean isLogical()
  {
    return false;
  }
  
  public boolean isMove()
  {
    return false;
  }
  
  public boolean isReturn()
  {
    return false;
  }
  
  public boolean isShift()
  {
    return false;
  }
  
  public boolean isStore()
  {
    return false;
  }
  
  public boolean isTrap()
  {
    return false;
  }
  
  public boolean isNoop()
  {
    return false;
  }
  
  protected static String comma = ", ";
  protected static String spaces = "\t";
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86Instruction
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Address;
import sun.jvm.hotspot.asm.ImmediateOrRegister;
import sun.jvm.hotspot.asm.Operand;

public abstract interface X86InstructionFactory
{
  public abstract X86Instruction newCallInstruction(String paramString, Address paramAddress, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newJmpInstruction(String paramString, Address paramAddress, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newCondJmpInstruction(String paramString, X86PCRelativeAddress paramX86PCRelativeAddress, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newMoveInstruction(String paramString, X86Register paramX86Register, ImmediateOrRegister paramImmediateOrRegister, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newMoveLoadInstruction(String paramString, X86Register paramX86Register, Address paramAddress, int paramInt1, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newMoveStoreInstruction(String paramString, Address paramAddress, X86Register paramX86Register, int paramInt1, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newArithmeticInstruction(String paramString, int paramInt1, Operand paramOperand1, Operand paramOperand2, Operand paramOperand3, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newArithmeticInstruction(String paramString, int paramInt1, Operand paramOperand1, Operand paramOperand2, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newLogicInstruction(String paramString, int paramInt1, Operand paramOperand1, Operand paramOperand2, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newBranchInstruction(String paramString, X86PCRelativeAddress paramX86PCRelativeAddress, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newShiftInstruction(String paramString, int paramInt1, Operand paramOperand, ImmediateOrRegister paramImmediateOrRegister, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newRotateInstruction(String paramString, Operand paramOperand, ImmediateOrRegister paramImmediateOrRegister, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newFPLoadInstruction(String paramString, Operand paramOperand, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newFPStoreInstruction(String paramString, Operand paramOperand, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newFPArithmeticInstruction(String paramString, int paramInt1, Operand paramOperand1, Operand paramOperand2, int paramInt2, int paramInt3);
  
  public abstract X86Instruction newGeneralInstruction(String paramString, Operand paramOperand1, Operand paramOperand2, Operand paramOperand3, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newGeneralInstruction(String paramString, Operand paramOperand1, Operand paramOperand2, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newGeneralInstruction(String paramString, Operand paramOperand, int paramInt1, int paramInt2);
  
  public abstract X86Instruction newIllegalInstruction();
}

/* Location:
 * Qualified Name:     sun.jvm.hotspot.asm.x86.X86InstructionFactory
 * Java Class Version: 1.4 (48.0)
 * JD-Core Version:    0.7.1
 */
package sun.jvm.hotspot.asm.x86;

import sun.jvm.hotspot.asm.Address;
import sun.jvm.hotspot.asm.ImmediateOrRegister;
import sun.jvm.hotspot.asm.Operand;

public class X86InstructionFactoryImpl
  implements X86InstructionFactory
{
  public X86Instruction newCallInstruction(String name, Address addr, int size, int prefixes)
  {
    return new X86CallInstruction(name, addr, size, prefixes);
  }
  
  public X86Instruction newJmpInstruction(St
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

Further reading...

For more information on Java 1.5 Tiger, you may find Java 1.5 Tiger, A developer's Notebook by D. Flanagan and B. McLaughlin from O'Reilly of interest.

New!JAR listings


Copyright 2006-2019. Infinite Loop Ltd