29#define bfd_mach_x86_64_intel_syntax 0
30#define bfd_mach_x86_64 1
31#define bfd_mach_i386_i386_intel_syntax 2
32#define bfd_mach_i386_i386 3
33#define bfd_mach_i386_i8086 4
34#define abort() DbgBreakPoint();
36#define ATTRIBUTE_UNUSED
38#define sprintf_vma(BUF, VMA) sprintf(BUF, "0x%IX", VMA)
115 info.buffer_vma =
info.buffer_length = 0;
116 info.bytes_per_chunk = 0;
141 info.buffer_vma =
info.buffer_length = 0;
142 info.bytes_per_chunk = 0;
196#ifndef UNIXWARE_COMPAT
199#define UNIXWARE_COMPAT 1
209static int putop (
const char *,
int);
210static void oappend (
const char *);
214static void OP_E (
int,
int);
215static void OP_G (
int,
int);
219static int get16 (
void);
221static void OP_REG (
int,
int);
223static void OP_I (
int,
int);
224static void OP_I64 (
int,
int);
225static void OP_sI (
int,
int);
226static void OP_J (
int,
int);
237static void OP_Rd (
int,
int);
240static void OP_EM (
int,
int);
241static void OP_EX (
int,
int);
242static void OP_MS (
int,
int);
243static void OP_XS (
int,
int);
244static void OP_M (
int,
int);
253static void BadOp (
void);
266#define FWAIT_OPCODE (0x9b)
290#define USED_REX(value) \
293 rex_used |= (rex & value) ? (value) | 0x40 : 0; \
304#define PREFIX_REPNZ 2
307#define PREFIX_SS 0x10
308#define PREFIX_DS 0x20
309#define PREFIX_ES 0x40
310#define PREFIX_FS 0x80
311#define PREFIX_GS 0x100
312#define PREFIX_DATA 0x200
313#define PREFIX_ADDR 0x400
314#define PREFIX_FWAIT 0x800
319#define FETCH_DATA(info, addr) \
320 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
321 ? 1 : fetch_data ((info), (addr)))
351#define Eb OP_E, b_mode
352#define Ev OP_E, v_mode
353#define Ed OP_E, d_mode
354#define Edq OP_E, dq_mode
355#define indirEb OP_indirE, b_mode
356#define indirEv OP_indirE, v_mode
357#define Ew OP_E, w_mode
358#define Ma OP_E, v_mode
361#define Gb OP_G, b_mode
362#define Gv OP_G, v_mode
363#define Gd OP_G, d_mode
364#define Gw OP_G, w_mode
365#define Rd OP_Rd, d_mode
366#define Rm OP_Rd, m_mode
367#define Ib OP_I, b_mode
368#define sIb OP_sI, b_mode
369#define Iv OP_I, v_mode
370#define Iq OP_I, q_mode
371#define Iv64 OP_I64, v_mode
372#define Iw OP_I, w_mode
373#define Jb OP_J, b_mode
374#define Jv OP_J, v_mode
375#define Cm OP_C, m_mode
376#define Dm OP_D, m_mode
377#define Td OP_T, d_mode
379#define RMeAX OP_REG, eAX_reg
380#define RMeBX OP_REG, eBX_reg
381#define RMeCX OP_REG, eCX_reg
382#define RMeDX OP_REG, eDX_reg
383#define RMeSP OP_REG, eSP_reg
384#define RMeBP OP_REG, eBP_reg
385#define RMeSI OP_REG, eSI_reg
386#define RMeDI OP_REG, eDI_reg
387#define RMrAX OP_REG, rAX_reg
388#define RMrBX OP_REG, rBX_reg
389#define RMrCX OP_REG, rCX_reg
390#define RMrDX OP_REG, rDX_reg
391#define RMrSP OP_REG, rSP_reg
392#define RMrBP OP_REG, rBP_reg
393#define RMrSI OP_REG, rSI_reg
394#define RMrDI OP_REG, rDI_reg
395#define RMAL OP_REG, al_reg
396#define RMAL OP_REG, al_reg
397#define RMCL OP_REG, cl_reg
398#define RMDL OP_REG, dl_reg
399#define RMBL OP_REG, bl_reg
400#define RMAH OP_REG, ah_reg
401#define RMCH OP_REG, ch_reg
402#define RMDH OP_REG, dh_reg
403#define RMBH OP_REG, bh_reg
404#define RMAX OP_REG, ax_reg
405#define RMDX OP_REG, dx_reg
407#define eAX OP_IMREG, eAX_reg
408#define eBX OP_IMREG, eBX_reg
409#define eCX OP_IMREG, eCX_reg
410#define eDX OP_IMREG, eDX_reg
411#define eSP OP_IMREG, eSP_reg
412#define eBP OP_IMREG, eBP_reg
413#define eSI OP_IMREG, eSI_reg
414#define eDI OP_IMREG, eDI_reg
415#define AL OP_IMREG, al_reg
416#define AL OP_IMREG, al_reg
417#define CL OP_IMREG, cl_reg
418#define DL OP_IMREG, dl_reg
419#define BL OP_IMREG, bl_reg
420#define AH OP_IMREG, ah_reg
421#define CH OP_IMREG, ch_reg
422#define DH OP_IMREG, dh_reg
423#define BH OP_IMREG, bh_reg
424#define AX OP_IMREG, ax_reg
425#define DX OP_IMREG, dx_reg
426#define indirDX OP_IMREG, indir_dx_reg
428#define Sw OP_SEG, w_mode
430#define Ob OP_OFF, b_mode
431#define Ob64 OP_OFF64, b_mode
432#define Ov OP_OFF, v_mode
433#define Ov64 OP_OFF64, v_mode
434#define Xb OP_DSreg, eSI_reg
435#define Xv OP_DSreg, eSI_reg
436#define Yb OP_ESreg, eDI_reg
437#define Yv OP_ESreg, eDI_reg
438#define DSBX OP_DSreg, eBX_reg
440#define es OP_REG, es_reg
441#define ss OP_REG, ss_reg
442#define cs OP_REG, cs_reg
443#define ds OP_REG, ds_reg
444#define fs OP_REG, fs_reg
445#define gs OP_REG, gs_reg
449#define EM OP_EM, v_mode
450#define EX OP_EX, v_mode
451#define MS OP_MS, v_mode
452#define XS OP_XS, v_mode
453#define OPSUF OP_3DNowSuffix, 0
454#define OPSIMD OP_SIMD_Suffix, 0
456#define cond_jump_flag NULL, cond_jump_mode
457#define loop_jcxz_flag NULL, loop_jcxz_mode
460#define SUFFIX_ALWAYS 4
471#define cond_jump_mode 8
472#define loop_jcxz_mode 9
518#define indir_dx_reg 150
522#define USE_PREFIX_USER_TABLE 3
523#define X86_64_SPECIAL 4
525#define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0
527#define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0
528#define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0
529#define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0
530#define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0
531#define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0
532#define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0
533#define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0
534#define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0
535#define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0
536#define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0
537#define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0
538#define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0
539#define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0
540#define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0
541#define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0
542#define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0
543#define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0
544#define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0
545#define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0
546#define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0
547#define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0
548#define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0
549#define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0
550#define GRPPADLCK NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0
552#define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0
553#define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0
554#define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0
555#define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0
556#define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0
557#define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0
558#define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0
559#define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0
560#define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0
561#define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0
562#define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0
563#define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0
564#define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0
565#define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0
566#define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0
567#define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0
568#define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0
569#define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0
570#define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0
571#define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0
572#define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0
573#define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0
574#define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0
575#define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0
576#define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0
577#define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0
578#define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0
579#define PREGRP27 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0
580#define PREGRP28 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0
581#define PREGRP29 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0
582#define PREGRP30 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0
583#define PREGRP31 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0
584#define PREGRP32 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0
586#define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0
638 {
"push{T|}",
es,
XX,
XX },
639 {
"pop{T|}",
es,
XX,
XX },
647 {
"push{T|}",
cs,
XX,
XX },
656 {
"push{T|}",
ss,
XX,
XX },
665 {
"push{T|}",
ds,
XX,
XX },
666 {
"pop{T|}",
ds,
XX,
XX },
740 {
"pusha{P|}",
XX,
XX,
XX },
741 {
"popa{P|}",
XX,
XX,
XX },
742 {
"bound{S|}",
Gv,
Ma,
XX },
790 {
"leaS",
Gv,
M,
XX },
803 {
"cW{tR||tR|}",
XX,
XX,
XX },
804 {
"cR{tO||tO|}",
XX,
XX,
XX },
805 {
"lcall{T|}",
Ap,
XX,
XX },
809 {
"sahf{|}",
XX,
XX,
XX },
810 {
"lahf{|}",
XX,
XX,
XX },
816 {
"movs{b||b|}",
Yb,
Xb,
XX },
817 {
"movs{R||R|}",
Yv,
Xv,
XX },
818 {
"cmps{b||b|}",
Xb,
Yb,
XX },
819 {
"cmps{R||R|}",
Xv,
Yv,
XX },
852 {
"les{S|}",
Gv,
Mp,
XX },
863 {
"into{|}",
XX,
XX,
XX },
895 {
"ljmp{T|}",
Ap,
XX,
XX },
928 {
"syscall",
XX,
XX,
XX },
930 {
"sysretP",
XX,
XX,
XX },
945 {
"unpcklpX",
XM,
EX,
XX },
946 {
"unpckhpX",
XM,
EX,
XX },
971 {
"movntpX",
Ev,
XM,
XX },
981 {
"sysenter",
XX,
XX,
XX },
982 {
"sysexit",
XX,
XX,
XX },
1000 {
"cmovne",
Gv,
Ev,
XX },
1001 {
"cmovbe",
Gv,
Ev,
XX },
1005 {
"cmovns",
Gv,
Ev,
XX },
1007 {
"cmovnp",
Gv,
Ev,
XX },
1009 {
"cmovge",
Gv,
Ev,
XX },
1010 {
"cmovle",
Gv,
Ev,
XX },
1013 {
"movmskpX",
Gd,
XS,
XX },
1018 {
"andnpX",
XM,
EX,
XX },
1031 {
"punpcklbw",
MX,
EM,
XX },
1032 {
"punpcklwd",
MX,
EM,
XX },
1033 {
"punpckldq",
MX,
EM,
XX },
1034 {
"packsswb",
MX,
EM,
XX },
1035 {
"pcmpgtb",
MX,
EM,
XX },
1036 {
"pcmpgtw",
MX,
EM,
XX },
1037 {
"pcmpgtd",
MX,
EM,
XX },
1038 {
"packuswb",
MX,
EM,
XX },
1040 {
"punpckhbw",
MX,
EM,
XX },
1041 {
"punpckhwd",
MX,
EM,
XX },
1042 {
"punpckhdq",
MX,
EM,
XX },
1043 {
"packssdw",
MX,
EM,
XX },
1053 {
"pcmpeqb",
MX,
EM,
XX },
1054 {
"pcmpeqw",
MX,
EM,
XX },
1055 {
"pcmpeqd",
MX,
EM,
XX },
1121 {
"cmpxchgB",
Eb,
Gb,
XX },
1122 {
"cmpxchgS",
Ev,
Gv,
XX },
1127 {
"movz{bR|x|bR|x}",
Gv,
Eb,
XX },
1128 {
"movz{wR|x|wR|x}",
Gv,
Ew,
XX },
1136 {
"movs{bR|x|bR|x}",
Gv,
Eb,
XX },
1137 {
"movs{wR|x|wR|x}",
Gv,
Ew,
XX },
1142 {
"movntiS",
Ev,
Gv,
XX },
1143 {
"pinsrw",
MX,
Ed,
Ib },
1144 {
"pextrw",
Gd,
MS,
Ib },
1145 {
"shufpX",
XM,
EX,
Ib },
1162 {
"pmullw",
MX,
EM,
XX },
1164 {
"pmovmskb",
Gd,
MS,
XX },
1166 {
"psubusb",
MX,
EM,
XX },
1167 {
"psubusw",
MX,
EM,
XX },
1168 {
"pminub",
MX,
EM,
XX },
1170 {
"paddusb",
MX,
EM,
XX },
1171 {
"paddusw",
MX,
EM,
XX },
1172 {
"pmaxub",
MX,
EM,
XX },
1179 {
"pmulhuw",
MX,
EM,
XX },
1180 {
"pmulhw",
MX,
EM,
XX },
1184 {
"psubsb",
MX,
EM,
XX },
1185 {
"psubsw",
MX,
EM,
XX },
1186 {
"pminsw",
MX,
EM,
XX },
1188 {
"paddsb",
MX,
EM,
XX },
1189 {
"paddsw",
MX,
EM,
XX },
1190 {
"pmaxsw",
MX,
EM,
XX },
1197 {
"pmuludq",
MX,
EM,
XX },
1198 {
"pmaddwd",
MX,
EM,
XX },
1199 {
"psadbw",
MX,
EM,
XX },
1215 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
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 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1220 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1221 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
1222 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1223 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1224 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
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 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
1228 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1229 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1230 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
1238 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,
1239 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1240 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,
1241 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1242 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
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,0,0,0,0,0,1,1,1,1,
1246 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1247 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1248 0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,
1249 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
1250 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1251 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
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,0
1261 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1262 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
1263 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,
1264 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1266 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1267 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
1268 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1269 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
1274 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1275 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1276 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
1296#define MODRM_CHECK if (!need_modrm) abort ()
1307 "rax",
"rcx",
"rdx",
"rbx",
"rsp",
"rbp",
"rsi",
"rdi",
1308 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15"
1311 "eax",
"ecx",
"edx",
"ebx",
"esp",
"ebp",
"esi",
"edi",
1312 "r8d",
"r9d",
"r10d",
"r11d",
"r12d",
"r13d",
"r14d",
"r15d"
1315 "ax",
"cx",
"dx",
"bx",
"sp",
"bp",
"si",
"di",
1316 "r8w",
"r9w",
"r10w",
"r11w",
"r12w",
"r13w",
"r14w",
"r15w"
1319 "al",
"cl",
"dl",
"bl",
"ah",
"ch",
"dh",
"bh",
1322 "al",
"cl",
"dl",
"bl",
"spl",
"bpl",
"sil",
"dil",
1323 "r8b",
"r9b",
"r10b",
"r11b",
"r12b",
"r13b",
"r14b",
"r15b"
1326 "es",
"cs",
"ss",
"ds",
"fs",
"gs",
"?",
"?",
1329 "bx+si",
"bx+di",
"bp+si",
"bp+di",
"si",
"di",
"bp",
"bx"
1333 "%rax",
"%rcx",
"%rdx",
"%rbx",
"%rsp",
"%rbp",
"%rsi",
"%rdi",
1334 "%r8",
"%r9",
"%r10",
"%r11",
"%r12",
"%r13",
"%r14",
"%r15"
1337 "%eax",
"%ecx",
"%edx",
"%ebx",
"%esp",
"%ebp",
"%esi",
"%edi",
1338 "%r8d",
"%r9d",
"%r10d",
"%r11d",
"%r12d",
"%r13d",
"%r14d",
"%r15d"
1341 "%ax",
"%cx",
"%dx",
"%bx",
"%sp",
"%bp",
"%si",
"%di",
1342 "%r8w",
"%r9w",
"%r10w",
"%r11w",
"%r12w",
"%r13w",
"%r14w",
"%r15w"
1345 "%al",
"%cl",
"%dl",
"%bl",
"%ah",
"%ch",
"%dh",
"%bh",
1348 "%al",
"%cl",
"%dl",
"%bl",
"%spl",
"%bpl",
"%sil",
"%dil",
1349 "%r8b",
"%r9b",
"%r10b",
"%r11b",
"%r12b",
"%r13b",
"%r14b",
"%r15b"
1352 "%es",
"%cs",
"%ss",
"%ds",
"%fs",
"%gs",
"%?",
"%?",
1355 "%bx,%si",
"%bx,%di",
"%bp,%si",
"%bp,%di",
"%si",
"%di",
"%bp",
"%bx"
1515 {
"sgdtQ",
M,
XX,
XX },
1517 {
"lgdtQ",
M,
XX,
XX },
1518 {
"lidtQ",
M,
XX,
XX },
1538 {
"cmpxchg8b",
Ev,
XX,
XX },
1573 {
"psrldq",
MS,
Ib,
XX },
1577 {
"pslldq",
MS,
Ib,
XX },
1581 {
"fxsave",
Ev,
XX,
XX },
1582 {
"fxrstor",
Ev,
XX,
XX },
1583 {
"ldmxcsr",
Ev,
XX,
XX },
1584 {
"stmxcsr",
Ev,
XX,
XX },
1592 {
"prefetchnta",
Ev,
XX,
XX },
1593 {
"prefetcht0",
Ev,
XX,
XX },
1594 {
"prefetcht1",
Ev,
XX,
XX },
1595 {
"prefetcht2",
Ev,
XX,
XX },
1603 {
"prefetch",
Eb,
XX,
XX },
1604 {
"prefetchw",
Eb,
XX,
XX },
1642 {
"cvtpi2ps",
XM,
EM,
XX },
1643 {
"cvtsi2ssY",
XM,
Ev,
XX },
1644 {
"cvtpi2pd",
XM,
EM,
XX },
1645 {
"cvtsi2sdY",
XM,
Ev,
XX },
1649 {
"cvtps2pi",
MX,
EX,
XX },
1650 {
"cvtss2siY",
Gv,
EX,
XX },
1651 {
"cvtpd2pi",
MX,
EX,
XX },
1652 {
"cvtsd2siY",
Gv,
EX,
XX },
1656 {
"cvttps2pi",
MX,
EX,
XX },
1657 {
"cvttss2siY",
Gv,
EX,
XX },
1658 {
"cvttpd2pi",
MX,
EX,
XX },
1659 {
"cvttsd2siY",
Gv,
EX,
XX },
1684 {
"movups",
XM,
EX,
XX },
1686 {
"movupd",
XM,
EX,
XX },
1691 {
"movups",
EX,
XM,
XX },
1693 {
"movupd",
EX,
XM,
XX },
1712 {
"rsqrtps",
XM,
EX,
XX },
1713 {
"rsqrtss",
XM,
EX,
XX },
1719 {
"sqrtps",
XM,
EX,
XX },
1720 {
"sqrtss",
XM,
EX,
XX },
1721 {
"sqrtpd",
XM,
EX,
XX },
1722 {
"sqrtsd",
XM,
EX,
XX },
1734 {
"cvtdq2pd",
XM,
EX,
XX },
1735 {
"cvttpd2dq",
XM,
EX,
XX },
1736 {
"cvtpd2dq",
XM,
EX,
XX },
1740 {
"cvtdq2ps",
XM,
EX,
XX },
1741 {
"cvttps2dq",
XM,
EX,
XX },
1742 {
"cvtps2dq",
XM,
EX,
XX },
1747 {
"cvtps2pd",
XM,
EX,
XX },
1748 {
"cvtss2sd",
XM,
EX,
XX },
1749 {
"cvtpd2ps",
XM,
EX,
XX },
1750 {
"cvtsd2ss",
XM,
EX,
XX },
1754 {
"maskmovq",
MX,
MS,
XX },
1756 {
"maskmovdqu",
XM,
EX,
XX },
1762 {
"movdqu",
XM,
EX,
XX },
1763 {
"movdqa",
XM,
EX,
XX },
1769 {
"movdqu",
EX,
XM,
XX },
1770 {
"movdqa",
EX,
XM,
XX },
1776 {
"movq2dq",
XM,
MS,
XX },
1778 {
"movdq2q",
MX,
XS,
XX },
1782 {
"pshufw",
MX,
EM,
Ib },
1783 {
"pshufhw",
XM,
EX,
Ib },
1784 {
"pshufd",
XM,
EX,
Ib },
1785 {
"pshuflw",
XM,
EX,
Ib },
1798 {
"punpckhqdq",
XM,
EX,
XX },
1803 {
"movntq",
Ev,
MX,
XX },
1805 {
"movntdq",
Ev,
XM,
XX },
1812 {
"punpcklqdq",
XM,
EX,
XX },
1819 {
"addsubpd",
XM,
EX,
XX },
1820 {
"addsubps",
XM,
EX,
XX },
1826 {
"haddpd",
XM,
EX,
XX },
1827 {
"haddps",
XM,
EX,
XX },
1833 {
"hsubpd",
XM,
EX,
XX },
1834 {
"hsubps",
XM,
EX,
XX },
1839 {
"movsldup",
XM,
EX,
XX },
1840 {
"movlpd",
XM,
EX,
XX },
1841 {
"movddup",
XM,
EX,
XX },
1846 {
"movshdup",
XM,
EX,
XX },
1847 {
"movhpd",
XM,
EX,
XX },
1855 {
"lddqu",
XM,
M,
XX },
1862 {
"movs{||lq|xd}",
Gv,
Ed,
XX },
1866#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
2023 return (sizeflag &
DFLAG) ?
"data16" :
"data32";
2026 return (sizeflag &
AFLAG) ?
"addr32" :
"addr64";
2090 char *
first, *second, *third;
2092 unsigned char uses_SSE_prefix;
2115 for (
p =
info->disassembler_options;
p !=
NULL; )
2122 else if (
strncmp (
p,
"i386", 4) == 0)
2127 else if (
strncmp (
p,
"i8086", 5) == 0)
2132 else if (
strncmp (
p,
"intel", 5) == 0)
2136 else if (
strncmp (
p,
"att", 3) == 0)
2140 else if (
strncmp (
p,
"addr", 4) == 0)
2142 if (
p[4] ==
'1' &&
p[5] ==
'6')
2144 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2147 else if (
strncmp (
p,
"data", 4) == 0)
2149 if (
p[4] ==
'1' &&
p[5] ==
'6')
2151 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2154 else if (
strncmp (
p,
"suffix", 6) == 0)
2202 info->bytes_per_line = 7;
2204 info->private_data = &priv;
2235 (*
info->fprintf_func) (
info->stream,
".byte 0x%x",
2279 uses_SSE_prefix = 0;
2319 if (sizeflag &
DFLAG)
2457 (*
info->fprintf_func) (
info->stream,
",");
2461 (*
info->fprintf_func) (
info->stream,
"%s", second);
2467 (*
info->fprintf_func) (
info->stream,
",");
2471 (*
info->fprintf_func) (
info->stream,
"%s", third);
2473 for (
i = 0;
i < 3;
i++)
2476 (*
info->fprintf_func) (
info->stream,
" # ");
2634#define STi OP_STi, 0
2636#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0
2637#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0
2638#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0
2639#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0
2640#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0
2641#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0
2642#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0
2643#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0
2644#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0
2754 "fnop",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2759 "fchs",
"fabs",
"(bad)",
"(bad)",
"ftst",
"fxam",
"(bad)",
"(bad)",
2764 "fld1",
"fldl2t",
"fldl2e",
"fldpi",
"fldlg2",
"fldln2",
"fldz",
"(bad)",
2769 "f2xm1",
"fyl2x",
"fptan",
"fpatan",
"fxtract",
"fprem1",
"fdecstp",
"fincstp",
2774 "fprem",
"fyl2xp1",
"fsqrt",
"fsincos",
"frndint",
"fscale",
"fsin",
"fcos",
2779 "(bad)",
"fucompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2784 "feni(287 only)",
"fdisi(287 only)",
"fNclex",
"fNinit",
2785 "fNsetpm(287 only)",
"(bad)",
"(bad)",
"(bad)",
2790 "(bad)",
"fcompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2795 "fNstsw",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2803 unsigned char floatop;
2805 floatop =
codep[-1];
2809 int fp_indx = (floatop - 0xd8) * 8 +
reg;
2826 if (floatop == 0xdf &&
codep[-1] == 0xe0)
2857putop (
const char *
template,
int sizeflag)
2862 for (
p =
template; *
p;
p++)
2886 else if (*
p ==
'\0')
2916 if (sizeflag &
AFLAG)
2922 if (sizeflag &
AFLAG)
2931 if (sizeflag &
AFLAG)
2993 if (sizeflag &
DFLAG)
3020 if (sizeflag &
DFLAG)
3037 else if (sizeflag &
DFLAG)
3052 else if (sizeflag &
DFLAG)
3069 if (sizeflag &
DFLAG)
3099 else if (sizeflag &
DFLAG)
3110 if (sizeflag &
DFLAG)
3176 OP_E (bytemode, sizeflag);
3191 for (
i = 0; tmp[
i] ==
'0' && tmp[
i + 1];
i++);
3220 tmp[28 -
i] = (
v % 10) +
'0';
3330 if ((
base & 7) == 5)
3341 if ((disp & 0x80) != 0)
3350 if (
mod != 0 || (
base & 7) == 5)
3361 if (havebase || (havesib && (
index != 4 ||
scale != 0)))
3374 if (sizeflag &
DFLAG)
3438 if (
mod != 0 || (
base & 7) == 5)
3459 if (
mod != 0 || (
base & 7) == 5)
3482 if ((disp & 0x8000) != 0)
3489 if ((disp & 0x80) != 0)
3494 if ((disp & 0x8000) != 0)
3500 if (
mod != 0 || (
rm & 7) == 6)
3506 if (
mod != 0 || (
rm & 7) != 6)
3546 else if (sizeflag &
DFLAG)
3568 a |= (*
codep++ & 0xff) << 8;
3569 a |= (*
codep++ & 0xff) << 16;
3570 a |= (*
codep++ & 0xff) << 24;
3572 b |= (*
codep++ & 0xff) << 8;
3573 b |= (*
codep++ & 0xff) << 16;
3574 b |= (*
codep++ & 0xff) << 24;
3619 x |= (*
codep++ & 0xff) << 8;
3687 else if (sizeflag &
DFLAG)
3734 else if (sizeflag &
DFLAG)
3771 else if (sizeflag &
DFLAG)