30#define bfd_mach_x86_64_intel_syntax 0
31#define bfd_mach_x86_64 1
32#define bfd_mach_i386_i386_intel_syntax 2
33#define bfd_mach_i386_i386 3
34#define bfd_mach_i386_i8086 4
35#define abort() DbgBreakPoint();
37#define ATTRIBUTE_UNUSED
39#define sprintf_vma(BUF, VMA) sprintf(BUF, "0x%IX", VMA)
116 info.buffer_vma =
info.buffer_length = 0;
117 info.bytes_per_chunk = 0;
142 info.buffer_vma =
info.buffer_length = 0;
143 info.bytes_per_chunk = 0;
197#ifndef UNIXWARE_COMPAT
200#define UNIXWARE_COMPAT 1
210static int putop (
const char *,
int);
211static void oappend (
const char *);
215static void OP_E (
int,
int);
216static void OP_G (
int,
int);
220static int get16 (
void);
222static void OP_REG (
int,
int);
224static void OP_I (
int,
int);
225static void OP_I64 (
int,
int);
226static void OP_sI (
int,
int);
227static void OP_J (
int,
int);
238static void OP_Rd (
int,
int);
241static void OP_EM (
int,
int);
242static void OP_EX (
int,
int);
243static void OP_MS (
int,
int);
244static void OP_XS (
int,
int);
245static void OP_M (
int,
int);
254static void BadOp (
void);
267#define FWAIT_OPCODE (0x9b)
291#define USED_REX(value) \
294 rex_used |= (rex & value) ? (value) | 0x40 : 0; \
305#define PREFIX_REPNZ 2
308#define PREFIX_SS 0x10
309#define PREFIX_DS 0x20
310#define PREFIX_ES 0x40
311#define PREFIX_FS 0x80
312#define PREFIX_GS 0x100
313#define PREFIX_DATA 0x200
314#define PREFIX_ADDR 0x400
315#define PREFIX_FWAIT 0x800
320#define FETCH_DATA(info, addr) \
321 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
322 ? 1 : fetch_data ((info), (addr)))
352#define Eb OP_E, b_mode
353#define Ev OP_E, v_mode
354#define Ed OP_E, d_mode
355#define Edq OP_E, dq_mode
356#define indirEb OP_indirE, b_mode
357#define indirEv OP_indirE, v_mode
358#define Ew OP_E, w_mode
359#define Ma OP_E, v_mode
362#define Gb OP_G, b_mode
363#define Gv OP_G, v_mode
364#define Gd OP_G, d_mode
365#define Gw OP_G, w_mode
366#define Rd OP_Rd, d_mode
367#define Rm OP_Rd, m_mode
368#define Ib OP_I, b_mode
369#define sIb OP_sI, b_mode
370#define Iv OP_I, v_mode
371#define Iq OP_I, q_mode
372#define Iv64 OP_I64, v_mode
373#define Iw OP_I, w_mode
374#define Jb OP_J, b_mode
375#define Jv OP_J, v_mode
376#define Cm OP_C, m_mode
377#define Dm OP_D, m_mode
378#define Td OP_T, d_mode
380#define RMeAX OP_REG, eAX_reg
381#define RMeBX OP_REG, eBX_reg
382#define RMeCX OP_REG, eCX_reg
383#define RMeDX OP_REG, eDX_reg
384#define RMeSP OP_REG, eSP_reg
385#define RMeBP OP_REG, eBP_reg
386#define RMeSI OP_REG, eSI_reg
387#define RMeDI OP_REG, eDI_reg
388#define RMrAX OP_REG, rAX_reg
389#define RMrBX OP_REG, rBX_reg
390#define RMrCX OP_REG, rCX_reg
391#define RMrDX OP_REG, rDX_reg
392#define RMrSP OP_REG, rSP_reg
393#define RMrBP OP_REG, rBP_reg
394#define RMrSI OP_REG, rSI_reg
395#define RMrDI OP_REG, rDI_reg
396#define RMAL OP_REG, al_reg
397#define RMAL OP_REG, al_reg
398#define RMCL OP_REG, cl_reg
399#define RMDL OP_REG, dl_reg
400#define RMBL OP_REG, bl_reg
401#define RMAH OP_REG, ah_reg
402#define RMCH OP_REG, ch_reg
403#define RMDH OP_REG, dh_reg
404#define RMBH OP_REG, bh_reg
405#define RMAX OP_REG, ax_reg
406#define RMDX OP_REG, dx_reg
408#define eAX OP_IMREG, eAX_reg
409#define eBX OP_IMREG, eBX_reg
410#define eCX OP_IMREG, eCX_reg
411#define eDX OP_IMREG, eDX_reg
412#define eSP OP_IMREG, eSP_reg
413#define eBP OP_IMREG, eBP_reg
414#define eSI OP_IMREG, eSI_reg
415#define eDI OP_IMREG, eDI_reg
416#define AL OP_IMREG, al_reg
417#define AL OP_IMREG, al_reg
418#define CL OP_IMREG, cl_reg
419#define DL OP_IMREG, dl_reg
420#define BL OP_IMREG, bl_reg
421#define AH OP_IMREG, ah_reg
422#define CH OP_IMREG, ch_reg
423#define DH OP_IMREG, dh_reg
424#define BH OP_IMREG, bh_reg
425#define AX OP_IMREG, ax_reg
426#define DX OP_IMREG, dx_reg
427#define indirDX OP_IMREG, indir_dx_reg
429#define Sw OP_SEG, w_mode
431#define Ob OP_OFF, b_mode
432#define Ob64 OP_OFF64, b_mode
433#define Ov OP_OFF, v_mode
434#define Ov64 OP_OFF64, v_mode
435#define Xb OP_DSreg, eSI_reg
436#define Xv OP_DSreg, eSI_reg
437#define Yb OP_ESreg, eDI_reg
438#define Yv OP_ESreg, eDI_reg
439#define DSBX OP_DSreg, eBX_reg
441#define es OP_REG, es_reg
442#define ss OP_REG, ss_reg
443#define cs OP_REG, cs_reg
444#define ds OP_REG, ds_reg
445#define fs OP_REG, fs_reg
446#define gs OP_REG, gs_reg
450#define EM OP_EM, v_mode
451#define EX OP_EX, v_mode
452#define MS OP_MS, v_mode
453#define XS OP_XS, v_mode
454#define OPSUF OP_3DNowSuffix, 0
455#define OPSIMD OP_SIMD_Suffix, 0
457#define cond_jump_flag NULL, cond_jump_mode
458#define loop_jcxz_flag NULL, loop_jcxz_mode
461#define SUFFIX_ALWAYS 4
472#define cond_jump_mode 8
473#define loop_jcxz_mode 9
519#define indir_dx_reg 150
523#define USE_PREFIX_USER_TABLE 3
524#define X86_64_SPECIAL 4
526#define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0
528#define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0
529#define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0
530#define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0
531#define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0
532#define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0
533#define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0
534#define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0
535#define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0
536#define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0
537#define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0
538#define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0
539#define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0
540#define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0
541#define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0
542#define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0
543#define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0
544#define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0
545#define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0
546#define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0
547#define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0
548#define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0
549#define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0
550#define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0
551#define GRPPADLCK NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0
553#define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0
554#define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0
555#define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0
556#define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0
557#define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0
558#define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0
559#define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0
560#define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0
561#define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0
562#define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0
563#define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0
564#define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0
565#define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0
566#define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0
567#define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0
568#define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0
569#define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0
570#define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0
571#define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0
572#define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0
573#define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0
574#define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0
575#define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0
576#define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0
577#define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0
578#define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0
579#define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0
580#define PREGRP27 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0
581#define PREGRP28 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0
582#define PREGRP29 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0
583#define PREGRP30 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0
584#define PREGRP31 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0
585#define PREGRP32 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0
587#define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0
639 {
"push{T|}",
es,
XX,
XX },
640 {
"pop{T|}",
es,
XX,
XX },
648 {
"push{T|}",
cs,
XX,
XX },
657 {
"push{T|}",
ss,
XX,
XX },
666 {
"push{T|}",
ds,
XX,
XX },
667 {
"pop{T|}",
ds,
XX,
XX },
741 {
"pusha{P|}",
XX,
XX,
XX },
742 {
"popa{P|}",
XX,
XX,
XX },
743 {
"bound{S|}",
Gv,
Ma,
XX },
791 {
"leaS",
Gv,
M,
XX },
804 {
"cW{tR||tR|}",
XX,
XX,
XX },
805 {
"cR{tO||tO|}",
XX,
XX,
XX },
806 {
"lcall{T|}",
Ap,
XX,
XX },
810 {
"sahf{|}",
XX,
XX,
XX },
811 {
"lahf{|}",
XX,
XX,
XX },
817 {
"movs{b||b|}",
Yb,
Xb,
XX },
818 {
"movs{R||R|}",
Yv,
Xv,
XX },
819 {
"cmps{b||b|}",
Xb,
Yb,
XX },
820 {
"cmps{R||R|}",
Xv,
Yv,
XX },
853 {
"les{S|}",
Gv,
Mp,
XX },
864 {
"into{|}",
XX,
XX,
XX },
896 {
"ljmp{T|}",
Ap,
XX,
XX },
929 {
"syscall",
XX,
XX,
XX },
931 {
"sysretP",
XX,
XX,
XX },
946 {
"unpcklpX",
XM,
EX,
XX },
947 {
"unpckhpX",
XM,
EX,
XX },
972 {
"movntpX",
Ev,
XM,
XX },
982 {
"sysenter",
XX,
XX,
XX },
983 {
"sysexit",
XX,
XX,
XX },
1001 {
"cmovne",
Gv,
Ev,
XX },
1002 {
"cmovbe",
Gv,
Ev,
XX },
1006 {
"cmovns",
Gv,
Ev,
XX },
1008 {
"cmovnp",
Gv,
Ev,
XX },
1010 {
"cmovge",
Gv,
Ev,
XX },
1011 {
"cmovle",
Gv,
Ev,
XX },
1014 {
"movmskpX",
Gd,
XS,
XX },
1019 {
"andnpX",
XM,
EX,
XX },
1032 {
"punpcklbw",
MX,
EM,
XX },
1033 {
"punpcklwd",
MX,
EM,
XX },
1034 {
"punpckldq",
MX,
EM,
XX },
1035 {
"packsswb",
MX,
EM,
XX },
1036 {
"pcmpgtb",
MX,
EM,
XX },
1037 {
"pcmpgtw",
MX,
EM,
XX },
1038 {
"pcmpgtd",
MX,
EM,
XX },
1039 {
"packuswb",
MX,
EM,
XX },
1041 {
"punpckhbw",
MX,
EM,
XX },
1042 {
"punpckhwd",
MX,
EM,
XX },
1043 {
"punpckhdq",
MX,
EM,
XX },
1044 {
"packssdw",
MX,
EM,
XX },
1054 {
"pcmpeqb",
MX,
EM,
XX },
1055 {
"pcmpeqw",
MX,
EM,
XX },
1056 {
"pcmpeqd",
MX,
EM,
XX },
1122 {
"cmpxchgB",
Eb,
Gb,
XX },
1123 {
"cmpxchgS",
Ev,
Gv,
XX },
1128 {
"movz{bR|x|bR|x}",
Gv,
Eb,
XX },
1129 {
"movz{wR|x|wR|x}",
Gv,
Ew,
XX },
1137 {
"movs{bR|x|bR|x}",
Gv,
Eb,
XX },
1138 {
"movs{wR|x|wR|x}",
Gv,
Ew,
XX },
1143 {
"movntiS",
Ev,
Gv,
XX },
1144 {
"pinsrw",
MX,
Ed,
Ib },
1145 {
"pextrw",
Gd,
MS,
Ib },
1146 {
"shufpX",
XM,
EX,
Ib },
1163 {
"pmullw",
MX,
EM,
XX },
1165 {
"pmovmskb",
Gd,
MS,
XX },
1167 {
"psubusb",
MX,
EM,
XX },
1168 {
"psubusw",
MX,
EM,
XX },
1169 {
"pminub",
MX,
EM,
XX },
1171 {
"paddusb",
MX,
EM,
XX },
1172 {
"paddusw",
MX,
EM,
XX },
1173 {
"pmaxub",
MX,
EM,
XX },
1180 {
"pmulhuw",
MX,
EM,
XX },
1181 {
"pmulhw",
MX,
EM,
XX },
1185 {
"psubsb",
MX,
EM,
XX },
1186 {
"psubsw",
MX,
EM,
XX },
1187 {
"pminsw",
MX,
EM,
XX },
1189 {
"paddsb",
MX,
EM,
XX },
1190 {
"paddsw",
MX,
EM,
XX },
1191 {
"pmaxsw",
MX,
EM,
XX },
1198 {
"pmuludq",
MX,
EM,
XX },
1199 {
"pmaddwd",
MX,
EM,
XX },
1200 {
"psadbw",
MX,
EM,
XX },
1216 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1217 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1218 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1219 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1220 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1221 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1222 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
1223 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1224 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1225 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1226 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1227 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1228 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
1229 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1230 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1231 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
1239 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,
1240 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1241 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,
1242 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1243 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1244 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1245 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1246 1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,
1247 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1248 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1249 0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,
1250 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
1251 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1252 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1253 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1254 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
1262 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1263 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
1264 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,
1265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1266 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1267 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1268 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
1269 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1270 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1271 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1272 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1273 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1274 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
1275 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1276 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1277 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
1297#define MODRM_CHECK if (!need_modrm) abort ()
1308 "rax",
"rcx",
"rdx",
"rbx",
"rsp",
"rbp",
"rsi",
"rdi",
1309 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15"
1312 "eax",
"ecx",
"edx",
"ebx",
"esp",
"ebp",
"esi",
"edi",
1313 "r8d",
"r9d",
"r10d",
"r11d",
"r12d",
"r13d",
"r14d",
"r15d"
1316 "ax",
"cx",
"dx",
"bx",
"sp",
"bp",
"si",
"di",
1317 "r8w",
"r9w",
"r10w",
"r11w",
"r12w",
"r13w",
"r14w",
"r15w"
1320 "al",
"cl",
"dl",
"bl",
"ah",
"ch",
"dh",
"bh",
1323 "al",
"cl",
"dl",
"bl",
"spl",
"bpl",
"sil",
"dil",
1324 "r8b",
"r9b",
"r10b",
"r11b",
"r12b",
"r13b",
"r14b",
"r15b"
1327 "es",
"cs",
"ss",
"ds",
"fs",
"gs",
"?",
"?",
1330 "bx+si",
"bx+di",
"bp+si",
"bp+di",
"si",
"di",
"bp",
"bx"
1334 "%rax",
"%rcx",
"%rdx",
"%rbx",
"%rsp",
"%rbp",
"%rsi",
"%rdi",
1335 "%r8",
"%r9",
"%r10",
"%r11",
"%r12",
"%r13",
"%r14",
"%r15"
1338 "%eax",
"%ecx",
"%edx",
"%ebx",
"%esp",
"%ebp",
"%esi",
"%edi",
1339 "%r8d",
"%r9d",
"%r10d",
"%r11d",
"%r12d",
"%r13d",
"%r14d",
"%r15d"
1342 "%ax",
"%cx",
"%dx",
"%bx",
"%sp",
"%bp",
"%si",
"%di",
1343 "%r8w",
"%r9w",
"%r10w",
"%r11w",
"%r12w",
"%r13w",
"%r14w",
"%r15w"
1346 "%al",
"%cl",
"%dl",
"%bl",
"%ah",
"%ch",
"%dh",
"%bh",
1349 "%al",
"%cl",
"%dl",
"%bl",
"%spl",
"%bpl",
"%sil",
"%dil",
1350 "%r8b",
"%r9b",
"%r10b",
"%r11b",
"%r12b",
"%r13b",
"%r14b",
"%r15b"
1353 "%es",
"%cs",
"%ss",
"%ds",
"%fs",
"%gs",
"%?",
"%?",
1356 "%bx,%si",
"%bx,%di",
"%bp,%si",
"%bp,%di",
"%si",
"%di",
"%bp",
"%bx"
1516 {
"sgdtQ",
M,
XX,
XX },
1518 {
"lgdtQ",
M,
XX,
XX },
1519 {
"lidtQ",
M,
XX,
XX },
1539 {
"cmpxchg8b",
Ev,
XX,
XX },
1574 {
"psrldq",
MS,
Ib,
XX },
1578 {
"pslldq",
MS,
Ib,
XX },
1582 {
"fxsave",
Ev,
XX,
XX },
1583 {
"fxrstor",
Ev,
XX,
XX },
1584 {
"ldmxcsr",
Ev,
XX,
XX },
1585 {
"stmxcsr",
Ev,
XX,
XX },
1593 {
"prefetchnta",
Ev,
XX,
XX },
1594 {
"prefetcht0",
Ev,
XX,
XX },
1595 {
"prefetcht1",
Ev,
XX,
XX },
1596 {
"prefetcht2",
Ev,
XX,
XX },
1604 {
"prefetch",
Eb,
XX,
XX },
1605 {
"prefetchw",
Eb,
XX,
XX },
1643 {
"cvtpi2ps",
XM,
EM,
XX },
1644 {
"cvtsi2ssY",
XM,
Ev,
XX },
1645 {
"cvtpi2pd",
XM,
EM,
XX },
1646 {
"cvtsi2sdY",
XM,
Ev,
XX },
1650 {
"cvtps2pi",
MX,
EX,
XX },
1651 {
"cvtss2siY",
Gv,
EX,
XX },
1652 {
"cvtpd2pi",
MX,
EX,
XX },
1653 {
"cvtsd2siY",
Gv,
EX,
XX },
1657 {
"cvttps2pi",
MX,
EX,
XX },
1658 {
"cvttss2siY",
Gv,
EX,
XX },
1659 {
"cvttpd2pi",
MX,
EX,
XX },
1660 {
"cvttsd2siY",
Gv,
EX,
XX },
1685 {
"movups",
XM,
EX,
XX },
1687 {
"movupd",
XM,
EX,
XX },
1692 {
"movups",
EX,
XM,
XX },
1694 {
"movupd",
EX,
XM,
XX },
1713 {
"rsqrtps",
XM,
EX,
XX },
1714 {
"rsqrtss",
XM,
EX,
XX },
1720 {
"sqrtps",
XM,
EX,
XX },
1721 {
"sqrtss",
XM,
EX,
XX },
1722 {
"sqrtpd",
XM,
EX,
XX },
1723 {
"sqrtsd",
XM,
EX,
XX },
1735 {
"cvtdq2pd",
XM,
EX,
XX },
1736 {
"cvttpd2dq",
XM,
EX,
XX },
1737 {
"cvtpd2dq",
XM,
EX,
XX },
1741 {
"cvtdq2ps",
XM,
EX,
XX },
1742 {
"cvttps2dq",
XM,
EX,
XX },
1743 {
"cvtps2dq",
XM,
EX,
XX },
1748 {
"cvtps2pd",
XM,
EX,
XX },
1749 {
"cvtss2sd",
XM,
EX,
XX },
1750 {
"cvtpd2ps",
XM,
EX,
XX },
1751 {
"cvtsd2ss",
XM,
EX,
XX },
1755 {
"maskmovq",
MX,
MS,
XX },
1757 {
"maskmovdqu",
XM,
EX,
XX },
1763 {
"movdqu",
XM,
EX,
XX },
1764 {
"movdqa",
XM,
EX,
XX },
1770 {
"movdqu",
EX,
XM,
XX },
1771 {
"movdqa",
EX,
XM,
XX },
1777 {
"movq2dq",
XM,
MS,
XX },
1779 {
"movdq2q",
MX,
XS,
XX },
1783 {
"pshufw",
MX,
EM,
Ib },
1784 {
"pshufhw",
XM,
EX,
Ib },
1785 {
"pshufd",
XM,
EX,
Ib },
1786 {
"pshuflw",
XM,
EX,
Ib },
1799 {
"punpckhqdq",
XM,
EX,
XX },
1804 {
"movntq",
Ev,
MX,
XX },
1806 {
"movntdq",
Ev,
XM,
XX },
1813 {
"punpcklqdq",
XM,
EX,
XX },
1820 {
"addsubpd",
XM,
EX,
XX },
1821 {
"addsubps",
XM,
EX,
XX },
1827 {
"haddpd",
XM,
EX,
XX },
1828 {
"haddps",
XM,
EX,
XX },
1834 {
"hsubpd",
XM,
EX,
XX },
1835 {
"hsubps",
XM,
EX,
XX },
1840 {
"movsldup",
XM,
EX,
XX },
1841 {
"movlpd",
XM,
EX,
XX },
1842 {
"movddup",
XM,
EX,
XX },
1847 {
"movshdup",
XM,
EX,
XX },
1848 {
"movhpd",
XM,
EX,
XX },
1856 {
"lddqu",
XM,
M,
XX },
1863 {
"movs{||lq|xd}",
Gv,
Ed,
XX },
1867#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
2024 return (sizeflag &
DFLAG) ?
"data16" :
"data32";
2027 return (sizeflag &
AFLAG) ?
"addr32" :
"addr64";
2091 char *
first, *second, *third;
2093 unsigned char uses_SSE_prefix;
2116 for (
p =
info->disassembler_options;
p !=
NULL; )
2123 else if (
strncmp (
p,
"i386", 4) == 0)
2128 else if (
strncmp (
p,
"i8086", 5) == 0)
2133 else if (
strncmp (
p,
"intel", 5) == 0)
2137 else if (
strncmp (
p,
"att", 3) == 0)
2141 else if (
strncmp (
p,
"addr", 4) == 0)
2143 if (
p[4] ==
'1' &&
p[5] ==
'6')
2145 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2148 else if (
strncmp (
p,
"data", 4) == 0)
2150 if (
p[4] ==
'1' &&
p[5] ==
'6')
2152 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2155 else if (
strncmp (
p,
"suffix", 6) == 0)
2203 info->bytes_per_line = 7;
2205 info->private_data = &priv;
2236 (*
info->fprintf_func) (
info->stream,
".byte 0x%x",
2280 uses_SSE_prefix = 0;
2320 if (sizeflag &
DFLAG)
2458 (*
info->fprintf_func) (
info->stream,
",");
2462 (*
info->fprintf_func) (
info->stream,
"%s", second);
2468 (*
info->fprintf_func) (
info->stream,
",");
2472 (*
info->fprintf_func) (
info->stream,
"%s", third);
2474 for (
i = 0;
i < 3;
i++)
2477 (*
info->fprintf_func) (
info->stream,
" # ");
2635#define STi OP_STi, 0
2637#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0
2638#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0
2639#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0
2640#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0
2641#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0
2642#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0
2643#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0
2644#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0
2645#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0
2755 "fnop",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2760 "fchs",
"fabs",
"(bad)",
"(bad)",
"ftst",
"fxam",
"(bad)",
"(bad)",
2765 "fld1",
"fldl2t",
"fldl2e",
"fldpi",
"fldlg2",
"fldln2",
"fldz",
"(bad)",
2770 "f2xm1",
"fyl2x",
"fptan",
"fpatan",
"fxtract",
"fprem1",
"fdecstp",
"fincstp",
2775 "fprem",
"fyl2xp1",
"fsqrt",
"fsincos",
"frndint",
"fscale",
"fsin",
"fcos",
2780 "(bad)",
"fucompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2785 "feni(287 only)",
"fdisi(287 only)",
"fNclex",
"fNinit",
2786 "fNsetpm(287 only)",
"(bad)",
"(bad)",
"(bad)",
2791 "(bad)",
"fcompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2796 "fNstsw",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2804 unsigned char floatop;
2806 floatop =
codep[-1];
2810 int fp_indx = (floatop - 0xd8) * 8 +
reg;
2827 if (floatop == 0xdf &&
codep[-1] == 0xe0)
2858putop (
const char *
template,
int sizeflag)
2863 for (
p =
template; *
p;
p++)
2887 else if (*
p ==
'\0')
2917 if (sizeflag &
AFLAG)
2923 if (sizeflag &
AFLAG)
2932 if (sizeflag &
AFLAG)
2994 if (sizeflag &
DFLAG)
3021 if (sizeflag &
DFLAG)
3038 else if (sizeflag &
DFLAG)
3053 else if (sizeflag &
DFLAG)
3070 if (sizeflag &
DFLAG)
3100 else if (sizeflag &
DFLAG)
3111 if (sizeflag &
DFLAG)
3177 OP_E (bytemode, sizeflag);
3192 for (
i = 0; tmp[
i] ==
'0' && tmp[
i + 1];
i++);
3221 tmp[28 -
i] = (
v % 10) +
'0';
3331 if ((
base & 7) == 5)
3342 if ((disp & 0x80) != 0)
3351 if (
mod != 0 || (
base & 7) == 5)
3362 if (havebase || (havesib && (
index != 4 ||
scale != 0)))
3375 if (sizeflag &
DFLAG)
3439 if (
mod != 0 || (
base & 7) == 5)
3460 if (
mod != 0 || (
base & 7) == 5)
3483 if ((disp & 0x8000) != 0)
3490 if ((disp & 0x80) != 0)
3495 if ((disp & 0x8000) != 0)
3501 if (
mod != 0 || (
rm & 7) == 6)
3507 if (
mod != 0 || (
rm & 7) != 6)
3547 else if (sizeflag &
DFLAG)
3569 a |= (*
codep++ & 0xff) << 8;
3570 a |= (*
codep++ & 0xff) << 16;
3571 a |= (*
codep++ & 0xff) << 24;
3573 b |= (*
codep++ & 0xff) << 8;
3574 b |= (*
codep++ & 0xff) << 16;
3575 b |= (*
codep++ & 0xff) << 24;
3620 x |= (*
codep++ & 0xff) << 8;
3688 else if (sizeflag &
DFLAG)
3735 else if (sizeflag &
DFLAG)
3772 else if (sizeflag &
DFLAG)