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%X", VMA) 112 info.buffer_vma =
info.buffer_length = 0;
113 info.bytes_per_chunk = 0;
138 info.buffer_vma =
info.buffer_length = 0;
139 info.bytes_per_chunk = 0;
193 #ifndef UNIXWARE_COMPAT 196 #define UNIXWARE_COMPAT 1 204 static void OP_ST (
int,
int);
205 static void OP_STi (
int,
int);
206 static int putop (
const char *,
int);
207 static void oappend (
const char *);
211 static void OP_E (
int,
int);
212 static void OP_G (
int,
int);
216 static int get16 (
void);
218 static void OP_REG (
int,
int);
220 static void OP_I (
int,
int);
221 static void OP_I64 (
int,
int);
222 static void OP_sI (
int,
int);
223 static void OP_J (
int,
int);
224 static void OP_SEG (
int,
int);
225 static void OP_DIR (
int,
int);
226 static void OP_OFF (
int,
int);
228 static void ptr_reg (
int,
int);
231 static void OP_C (
int,
int);
232 static void OP_D (
int,
int);
233 static void OP_T (
int,
int);
234 static void OP_Rd (
int,
int);
235 static void OP_MMX (
int,
int);
236 static void OP_XMM (
int,
int);
237 static void OP_EM (
int,
int);
238 static void OP_EX (
int,
int);
239 static void OP_MS (
int,
int);
240 static void OP_XS (
int,
int);
241 static void OP_M (
int,
int);
242 static void OP_0fae (
int,
int);
243 static void OP_0f07 (
int,
int);
250 static void BadOp (
void);
263 #define FWAIT_OPCODE (0x9b) 283 #define USED_REX(value) \ 286 rex_used |= (rex & value) ? (value) | 0x40 : 0; \ 296 #define PREFIX_REPZ 1 297 #define PREFIX_REPNZ 2 298 #define PREFIX_LOCK 4 300 #define PREFIX_SS 0x10 301 #define PREFIX_DS 0x20 302 #define PREFIX_ES 0x40 303 #define PREFIX_FS 0x80 304 #define PREFIX_GS 0x100 305 #define PREFIX_DATA 0x200 306 #define PREFIX_ADDR 0x400 307 #define PREFIX_FWAIT 0x800 312 #define FETCH_DATA(info, addr) \ 313 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \ 314 ? 1 : fetch_data ((info), (addr))) 344 #define Eb OP_E, b_mode 345 #define Ev OP_E, v_mode 346 #define Ed OP_E, d_mode 347 #define Edq OP_E, dq_mode 348 #define indirEb OP_indirE, b_mode 349 #define indirEv OP_indirE, v_mode 350 #define Ew OP_E, w_mode 351 #define Ma OP_E, v_mode 354 #define Gb OP_G, b_mode 355 #define Gv OP_G, v_mode 356 #define Gd OP_G, d_mode 357 #define Gw OP_G, w_mode 358 #define Rd OP_Rd, d_mode 359 #define Rm OP_Rd, m_mode 360 #define Ib OP_I, b_mode 361 #define sIb OP_sI, b_mode 362 #define Iv OP_I, v_mode 363 #define Iq OP_I, q_mode 364 #define Iv64 OP_I64, v_mode 365 #define Iw OP_I, w_mode 366 #define Jb OP_J, b_mode 367 #define Jv OP_J, v_mode 368 #define Cm OP_C, m_mode 369 #define Dm OP_D, m_mode 370 #define Td OP_T, d_mode 372 #define RMeAX OP_REG, eAX_reg 373 #define RMeBX OP_REG, eBX_reg 374 #define RMeCX OP_REG, eCX_reg 375 #define RMeDX OP_REG, eDX_reg 376 #define RMeSP OP_REG, eSP_reg 377 #define RMeBP OP_REG, eBP_reg 378 #define RMeSI OP_REG, eSI_reg 379 #define RMeDI OP_REG, eDI_reg 380 #define RMrAX OP_REG, rAX_reg 381 #define RMrBX OP_REG, rBX_reg 382 #define RMrCX OP_REG, rCX_reg 383 #define RMrDX OP_REG, rDX_reg 384 #define RMrSP OP_REG, rSP_reg 385 #define RMrBP OP_REG, rBP_reg 386 #define RMrSI OP_REG, rSI_reg 387 #define RMrDI OP_REG, rDI_reg 388 #define RMAL OP_REG, al_reg 389 #define RMAL OP_REG, al_reg 390 #define RMCL OP_REG, cl_reg 391 #define RMDL OP_REG, dl_reg 392 #define RMBL OP_REG, bl_reg 393 #define RMAH OP_REG, ah_reg 394 #define RMCH OP_REG, ch_reg 395 #define RMDH OP_REG, dh_reg 396 #define RMBH OP_REG, bh_reg 397 #define RMAX OP_REG, ax_reg 398 #define RMDX OP_REG, dx_reg 400 #define eAX OP_IMREG, eAX_reg 401 #define eBX OP_IMREG, eBX_reg 402 #define eCX OP_IMREG, eCX_reg 403 #define eDX OP_IMREG, eDX_reg 404 #define eSP OP_IMREG, eSP_reg 405 #define eBP OP_IMREG, eBP_reg 406 #define eSI OP_IMREG, eSI_reg 407 #define eDI OP_IMREG, eDI_reg 408 #define AL OP_IMREG, al_reg 409 #define AL OP_IMREG, al_reg 410 #define CL OP_IMREG, cl_reg 411 #define DL OP_IMREG, dl_reg 412 #define BL OP_IMREG, bl_reg 413 #define AH OP_IMREG, ah_reg 414 #define CH OP_IMREG, ch_reg 415 #define DH OP_IMREG, dh_reg 416 #define BH OP_IMREG, bh_reg 417 #define AX OP_IMREG, ax_reg 418 #define DX OP_IMREG, dx_reg 419 #define indirDX OP_IMREG, indir_dx_reg 421 #define Sw OP_SEG, w_mode 423 #define Ob OP_OFF, b_mode 424 #define Ob64 OP_OFF64, b_mode 425 #define Ov OP_OFF, v_mode 426 #define Ov64 OP_OFF64, v_mode 427 #define Xb OP_DSreg, eSI_reg 428 #define Xv OP_DSreg, eSI_reg 429 #define Yb OP_ESreg, eDI_reg 430 #define Yv OP_ESreg, eDI_reg 431 #define DSBX OP_DSreg, eBX_reg 433 #define es OP_REG, es_reg 434 #define ss OP_REG, ss_reg 435 #define cs OP_REG, cs_reg 436 #define ds OP_REG, ds_reg 437 #define fs OP_REG, fs_reg 438 #define gs OP_REG, gs_reg 442 #define EM OP_EM, v_mode 443 #define EX OP_EX, v_mode 444 #define MS OP_MS, v_mode 445 #define XS OP_XS, v_mode 446 #define OPSUF OP_3DNowSuffix, 0 447 #define OPSIMD OP_SIMD_Suffix, 0 449 #define cond_jump_flag NULL, cond_jump_mode 450 #define loop_jcxz_flag NULL, loop_jcxz_mode 453 #define SUFFIX_ALWAYS 4 464 #define cond_jump_mode 8 465 #define loop_jcxz_mode 9 511 #define indir_dx_reg 150 515 #define USE_PREFIX_USER_TABLE 3 516 #define X86_64_SPECIAL 4 518 #define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0 520 #define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0 521 #define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0 522 #define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0 523 #define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0 524 #define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0 525 #define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0 526 #define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0 527 #define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0 528 #define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0 529 #define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0 530 #define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0 531 #define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0 532 #define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0 533 #define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0 534 #define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0 535 #define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0 536 #define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0 537 #define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0 538 #define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0 539 #define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0 540 #define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0 541 #define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0 542 #define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0 543 #define GRPPADLCK NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0 545 #define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0 546 #define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0 547 #define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0 548 #define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0 549 #define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0 550 #define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0 551 #define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0 552 #define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0 553 #define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0 554 #define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0 555 #define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0 556 #define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0 557 #define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0 558 #define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0 559 #define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0 560 #define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0 561 #define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0 562 #define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0 563 #define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0 564 #define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0 565 #define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0 566 #define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0 567 #define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0 568 #define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0 569 #define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0 570 #define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0 571 #define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0 572 #define PREGRP27 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0 573 #define PREGRP28 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0 574 #define PREGRP29 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0 575 #define PREGRP30 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0 576 #define PREGRP31 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0 577 #define PREGRP32 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0 579 #define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0 631 {
"push{T|}",
es,
XX,
XX },
632 {
"pop{T|}",
es,
XX,
XX },
640 {
"push{T|}",
cs,
XX,
XX },
649 {
"push{T|}",
ss,
XX,
XX },
658 {
"push{T|}",
ds,
XX,
XX },
659 {
"pop{T|}",
ds,
XX,
XX },
733 {
"pusha{P|}",
XX,
XX,
XX },
734 {
"popa{P|}",
XX,
XX,
XX },
735 {
"bound{S|}",
Gv,
Ma,
XX },
783 {
"leaS",
Gv,
M,
XX },
796 {
"cW{tR||tR|}",
XX,
XX,
XX },
797 {
"cR{tO||tO|}",
XX,
XX,
XX },
798 {
"lcall{T|}",
Ap,
XX,
XX },
802 {
"sahf{|}",
XX,
XX,
XX },
803 {
"lahf{|}",
XX,
XX,
XX },
809 {
"movs{b||b|}",
Yb,
Xb,
XX },
810 {
"movs{R||R|}",
Yv,
Xv,
XX },
811 {
"cmps{b||b|}",
Xb,
Yb,
XX },
812 {
"cmps{R||R|}",
Xv,
Yv,
XX },
845 {
"les{S|}",
Gv,
Mp,
XX },
856 {
"into{|}",
XX,
XX,
XX },
888 {
"ljmp{T|}",
Ap,
XX,
XX },
921 {
"syscall",
XX,
XX,
XX },
923 {
"sysretP",
XX,
XX,
XX },
938 {
"unpcklpX",
XM,
EX,
XX },
939 {
"unpckhpX",
XM,
EX,
XX },
964 {
"movntpX",
Ev,
XM,
XX },
974 {
"sysenter",
XX,
XX,
XX },
975 {
"sysexit",
XX,
XX,
XX },
1000 {
"cmovnp",
Gv,
Ev,
XX },
1002 {
"cmovge",
Gv,
Ev,
XX },
1003 {
"cmovle",
Gv,
Ev,
XX },
1006 {
"movmskpX",
Gd,
XS,
XX },
1011 {
"andnpX",
XM,
EX,
XX },
1024 {
"punpcklbw",
MX,
EM,
XX },
1025 {
"punpcklwd",
MX,
EM,
XX },
1026 {
"punpckldq",
MX,
EM,
XX },
1027 {
"packsswb",
MX,
EM,
XX },
1028 {
"pcmpgtb",
MX,
EM,
XX },
1029 {
"pcmpgtw",
MX,
EM,
XX },
1030 {
"pcmpgtd",
MX,
EM,
XX },
1031 {
"packuswb",
MX,
EM,
XX },
1033 {
"punpckhbw",
MX,
EM,
XX },
1034 {
"punpckhwd",
MX,
EM,
XX },
1035 {
"punpckhdq",
MX,
EM,
XX },
1036 {
"packssdw",
MX,
EM,
XX },
1046 {
"pcmpeqb",
MX,
EM,
XX },
1047 {
"pcmpeqw",
MX,
EM,
XX },
1048 {
"pcmpeqd",
MX,
EM,
XX },
1114 {
"cmpxchgB",
Eb,
Gb,
XX },
1115 {
"cmpxchgS",
Ev,
Gv,
XX },
1120 {
"movz{bR|x|bR|x}",
Gv,
Eb,
XX },
1121 {
"movz{wR|x|wR|x}",
Gv,
Ew,
XX },
1129 {
"movs{bR|x|bR|x}",
Gv,
Eb,
XX },
1130 {
"movs{wR|x|wR|x}",
Gv,
Ew,
XX },
1135 {
"movntiS",
Ev,
Gv,
XX },
1136 {
"pinsrw",
MX,
Ed,
Ib },
1137 {
"pextrw",
Gd,
MS,
Ib },
1138 {
"shufpX",
XM,
EX,
Ib },
1155 {
"pmullw",
MX,
EM,
XX },
1157 {
"pmovmskb",
Gd,
MS,
XX },
1159 {
"psubusb",
MX,
EM,
XX },
1160 {
"psubusw",
MX,
EM,
XX },
1161 {
"pminub",
MX,
EM,
XX },
1163 {
"paddusb",
MX,
EM,
XX },
1164 {
"paddusw",
MX,
EM,
XX },
1165 {
"pmaxub",
MX,
EM,
XX },
1172 {
"pmulhuw",
MX,
EM,
XX },
1173 {
"pmulhw",
MX,
EM,
XX },
1177 {
"psubsb",
MX,
EM,
XX },
1178 {
"psubsw",
MX,
EM,
XX },
1179 {
"pminsw",
MX,
EM,
XX },
1181 {
"paddsb",
MX,
EM,
XX },
1182 {
"paddsw",
MX,
EM,
XX },
1183 {
"pmaxsw",
MX,
EM,
XX },
1190 {
"pmuludq",
MX,
EM,
XX },
1191 {
"pmaddwd",
MX,
EM,
XX },
1192 {
"psadbw",
MX,
EM,
XX },
1208 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1209 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1210 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1211 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1212 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1213 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1214 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
1215 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1216 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1217 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1218 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1219 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1220 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
1221 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1222 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1223 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
1231 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,
1232 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1233 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,
1234 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1235 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1236 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1237 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1238 1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,
1239 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1240 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1241 0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,
1242 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
1243 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
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,1,1,1,1,1,1,1,1,0
1254 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1255 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
1256 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,
1257 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1258 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1259 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1260 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
1261 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1262 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1263 0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
1267 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1268 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1269 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
1289 #define MODRM_CHECK if (!need_modrm) abort () 1300 "rax",
"rcx",
"rdx",
"rbx",
"rsp",
"rbp",
"rsi",
"rdi",
1301 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15" 1304 "eax",
"ecx",
"edx",
"ebx",
"esp",
"ebp",
"esi",
"edi",
1305 "r8d",
"r9d",
"r10d",
"r11d",
"r12d",
"r13d",
"r14d",
"r15d" 1308 "ax",
"cx",
"dx",
"bx",
"sp",
"bp",
"si",
"di",
1309 "r8w",
"r9w",
"r10w",
"r11w",
"r12w",
"r13w",
"r14w",
"r15w" 1312 "al",
"cl",
"dl",
"bl",
"ah",
"ch",
"dh",
"bh",
1315 "al",
"cl",
"dl",
"bl",
"spl",
"bpl",
"sil",
"dil",
1316 "r8b",
"r9b",
"r10b",
"r11b",
"r12b",
"r13b",
"r14b",
"r15b" 1319 "es",
"cs",
"ss",
"ds",
"fs",
"gs",
"?",
"?",
1322 "bx+si",
"bx+di",
"bp+si",
"bp+di",
"si",
"di",
"bp",
"bx" 1326 "%rax",
"%rcx",
"%rdx",
"%rbx",
"%rsp",
"%rbp",
"%rsi",
"%rdi",
1327 "%r8",
"%r9",
"%r10",
"%r11",
"%r12",
"%r13",
"%r14",
"%r15" 1330 "%eax",
"%ecx",
"%edx",
"%ebx",
"%esp",
"%ebp",
"%esi",
"%edi",
1331 "%r8d",
"%r9d",
"%r10d",
"%r11d",
"%r12d",
"%r13d",
"%r14d",
"%r15d" 1334 "%ax",
"%cx",
"%dx",
"%bx",
"%sp",
"%bp",
"%si",
"%di",
1335 "%r8w",
"%r9w",
"%r10w",
"%r11w",
"%r12w",
"%r13w",
"%r14w",
"%r15w" 1338 "%al",
"%cl",
"%dl",
"%bl",
"%ah",
"%ch",
"%dh",
"%bh",
1341 "%al",
"%cl",
"%dl",
"%bl",
"%spl",
"%bpl",
"%sil",
"%dil",
1342 "%r8b",
"%r9b",
"%r10b",
"%r11b",
"%r12b",
"%r13b",
"%r14b",
"%r15b" 1345 "%es",
"%cs",
"%ss",
"%ds",
"%fs",
"%gs",
"%?",
"%?",
1348 "%bx,%si",
"%bx,%di",
"%bp,%si",
"%bp,%di",
"%si",
"%di",
"%bp",
"%bx" 1508 {
"sgdtQ",
M,
XX,
XX },
1510 {
"lgdtQ",
M,
XX,
XX },
1511 {
"lidtQ",
M,
XX,
XX },
1531 {
"cmpxchg8b",
Ev,
XX,
XX },
1566 {
"psrldq",
MS,
Ib,
XX },
1570 {
"pslldq",
MS,
Ib,
XX },
1574 {
"fxsave",
Ev,
XX,
XX },
1575 {
"fxrstor",
Ev,
XX,
XX },
1576 {
"ldmxcsr",
Ev,
XX,
XX },
1577 {
"stmxcsr",
Ev,
XX,
XX },
1585 {
"prefetchnta",
Ev,
XX,
XX },
1586 {
"prefetcht0",
Ev,
XX,
XX },
1587 {
"prefetcht1",
Ev,
XX,
XX },
1588 {
"prefetcht2",
Ev,
XX,
XX },
1596 {
"prefetch",
Eb,
XX,
XX },
1597 {
"prefetchw",
Eb,
XX,
XX },
1635 {
"cvtpi2ps",
XM,
EM,
XX },
1636 {
"cvtsi2ssY",
XM,
Ev,
XX },
1637 {
"cvtpi2pd",
XM,
EM,
XX },
1638 {
"cvtsi2sdY",
XM,
Ev,
XX },
1642 {
"cvtps2pi",
MX,
EX,
XX },
1643 {
"cvtss2siY",
Gv,
EX,
XX },
1644 {
"cvtpd2pi",
MX,
EX,
XX },
1645 {
"cvtsd2siY",
Gv,
EX,
XX },
1649 {
"cvttps2pi",
MX,
EX,
XX },
1650 {
"cvttss2siY",
Gv,
EX,
XX },
1651 {
"cvttpd2pi",
MX,
EX,
XX },
1652 {
"cvttsd2siY",
Gv,
EX,
XX },
1677 {
"movups",
XM,
EX,
XX },
1679 {
"movupd",
XM,
EX,
XX },
1684 {
"movups",
EX,
XM,
XX },
1686 {
"movupd",
EX,
XM,
XX },
1705 {
"rsqrtps",
XM,
EX,
XX },
1706 {
"rsqrtss",
XM,
EX,
XX },
1712 {
"sqrtps",
XM,
EX,
XX },
1713 {
"sqrtss",
XM,
EX,
XX },
1714 {
"sqrtpd",
XM,
EX,
XX },
1715 {
"sqrtsd",
XM,
EX,
XX },
1727 {
"cvtdq2pd",
XM,
EX,
XX },
1728 {
"cvttpd2dq",
XM,
EX,
XX },
1729 {
"cvtpd2dq",
XM,
EX,
XX },
1733 {
"cvtdq2ps",
XM,
EX,
XX },
1734 {
"cvttps2dq",
XM,
EX,
XX },
1735 {
"cvtps2dq",
XM,
EX,
XX },
1740 {
"cvtps2pd",
XM,
EX,
XX },
1741 {
"cvtss2sd",
XM,
EX,
XX },
1742 {
"cvtpd2ps",
XM,
EX,
XX },
1743 {
"cvtsd2ss",
XM,
EX,
XX },
1747 {
"maskmovq",
MX,
MS,
XX },
1749 {
"maskmovdqu",
XM,
EX,
XX },
1755 {
"movdqu",
XM,
EX,
XX },
1756 {
"movdqa",
XM,
EX,
XX },
1762 {
"movdqu",
EX,
XM,
XX },
1763 {
"movdqa",
EX,
XM,
XX },
1769 {
"movq2dq",
XM,
MS,
XX },
1771 {
"movdq2q",
MX,
XS,
XX },
1775 {
"pshufw",
MX,
EM,
Ib },
1776 {
"pshufhw",
XM,
EX,
Ib },
1777 {
"pshufd",
XM,
EX,
Ib },
1778 {
"pshuflw",
XM,
EX,
Ib },
1791 {
"punpckhqdq",
XM,
EX,
XX },
1796 {
"movntq",
Ev,
MX,
XX },
1798 {
"movntdq",
Ev,
XM,
XX },
1805 {
"punpcklqdq",
XM,
EX,
XX },
1812 {
"addsubpd",
XM,
EX,
XX },
1813 {
"addsubps",
XM,
EX,
XX },
1819 {
"haddpd",
XM,
EX,
XX },
1820 {
"haddps",
XM,
EX,
XX },
1826 {
"hsubpd",
XM,
EX,
XX },
1827 {
"hsubps",
XM,
EX,
XX },
1832 {
"movsldup",
XM,
EX,
XX },
1833 {
"movlpd",
XM,
EX,
XX },
1834 {
"movddup",
XM,
EX,
XX },
1839 {
"movshdup",
XM,
EX,
XX },
1840 {
"movhpd",
XM,
EX,
XX },
1848 {
"lddqu",
XM,
M,
XX },
1855 {
"movs{||lq|xd}",
Gv,
Ed,
XX },
1859 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>") 2016 return (sizeflag &
DFLAG) ?
"data16" :
"data32";
2019 return (sizeflag &
AFLAG) ?
"addr32" :
"addr64";
2083 char *
first, *second, *third;
2085 unsigned char uses_SSE_prefix;
2108 for (
p =
info->disassembler_options;
p !=
NULL; )
2115 else if (
strncmp (
p,
"i386", 4) == 0)
2120 else if (
strncmp (
p,
"i8086", 5) == 0)
2125 else if (
strncmp (
p,
"intel", 5) == 0)
2129 else if (
strncmp (
p,
"att", 3) == 0)
2133 else if (
strncmp (
p,
"addr", 4) == 0)
2135 if (
p[4] ==
'1' &&
p[5] ==
'6')
2137 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2140 else if (
strncmp (
p,
"data", 4) == 0)
2142 if (
p[4] ==
'1' &&
p[5] ==
'6')
2144 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2147 else if (
strncmp (
p,
"suffix", 6) == 0)
2191 info->bytes_per_line = 7;
2193 info->private_data = &priv;
2224 (*
info->fprintf_func) (
info->stream,
".byte 0x%x",
2268 uses_SSE_prefix = 0;
2308 if (sizeflag &
DFLAG)
2446 (*
info->fprintf_func) (
info->stream,
",");
2450 (*
info->fprintf_func) (
info->stream,
"%s", second);
2456 (*
info->fprintf_func) (
info->stream,
",");
2460 (*
info->fprintf_func) (
info->stream,
"%s", third);
2462 for (
i = 0;
i < 3;
i++)
2465 (*
info->fprintf_func) (
info->stream,
" # ");
2623 #define STi OP_STi, 0 2625 #define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0 2626 #define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0 2627 #define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0 2628 #define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0 2629 #define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0 2630 #define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0 2631 #define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0 2632 #define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0 2633 #define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0 2743 "fnop",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2748 "fchs",
"fabs",
"(bad)",
"(bad)",
"ftst",
"fxam",
"(bad)",
"(bad)",
2753 "fld1",
"fldl2t",
"fldl2e",
"fldpi",
"fldlg2",
"fldln2",
"fldz",
"(bad)",
2758 "f2xm1",
"fyl2x",
"fptan",
"fpatan",
"fxtract",
"fprem1",
"fdecstp",
"fincstp",
2763 "fprem",
"fyl2xp1",
"fsqrt",
"fsincos",
"frndint",
"fscale",
"fsin",
"fcos",
2768 "(bad)",
"fucompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2773 "feni(287 only)",
"fdisi(287 only)",
"fNclex",
"fNinit",
2774 "fNsetpm(287 only)",
"(bad)",
"(bad)",
"(bad)",
2779 "(bad)",
"fcompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2784 "fNstsw",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2792 unsigned char floatop;
2794 floatop =
codep[-1];
2798 int fp_indx = (floatop - 0xd8) * 8 +
reg;
2815 if (floatop == 0xdf &&
codep[-1] == 0xe0)
2846 putop (
const char *
template,
int sizeflag)
2851 for (
p =
template; *
p;
p++)
2875 else if (*
p ==
'\0')
2905 if (sizeflag &
AFLAG)
2911 if (sizeflag &
AFLAG)
2920 if (sizeflag &
AFLAG)
2982 if (sizeflag &
DFLAG)
3009 if (sizeflag &
DFLAG)
3026 else if (sizeflag &
DFLAG)
3041 else if (sizeflag &
DFLAG)
3058 if (sizeflag &
DFLAG)
3088 else if (sizeflag &
DFLAG)
3099 if (sizeflag &
DFLAG)
3165 OP_E (bytemode, sizeflag);
3180 for (
i = 0; tmp[
i] ==
'0' && tmp[
i + 1];
i++);
3209 tmp[28 -
i] = (
v % 10) +
'0';
3319 if ((
base & 7) == 5)
3330 if ((disp & 0x80) != 0)
3339 if (
mod != 0 || (
base & 7) == 5)
3350 if (havebase || (havesib && (
index != 4 ||
scale != 0)))
3363 if (sizeflag &
DFLAG)
3427 if (
mod != 0 || (
base & 7) == 5)
3448 if (
mod != 0 || (
base & 7) == 5)
3471 if ((disp & 0x8000) != 0)
3478 if ((disp & 0x80) != 0)
3483 if ((disp & 0x8000) != 0)
3489 if (
mod != 0 || (
rm & 7) == 6)
3495 if (
mod != 0 || (
rm & 7) != 6)
3535 else if (sizeflag &
DFLAG)
3557 a |= (*
codep++ & 0xff) << 8;
3558 a |= (*
codep++ & 0xff) << 16;
3559 a |= (*
codep++ & 0xff) << 24;
3561 b |= (*
codep++ & 0xff) << 8;
3562 b |= (*
codep++ & 0xff) << 16;
3563 b |= (*
codep++ & 0xff) << 24;
3608 x |= (*
codep++ & 0xff) << 8;
3676 else if (sizeflag &
DFLAG)
3723 else if (sizeflag &
DFLAG)
3760 else if (sizeflag &
DFLAG)
3796 OP_I (bytemode, sizeflag);
3811 else if (sizeflag &
DFLAG)
3850 if ((
op & 0x80) != 0)
3858 else if (sizeflag &
DFLAG)
3867 if ((
op & 0x8000) != 0)
3875 if ((
op & 0x8000) != 0)
3899 if ((disp & 0x80) != 0)
3903 if (sizeflag &
DFLAG)
3935 if (sizeflag &
DFLAG)
3985 OP_OFF (bytemode, sizeflag);
4015 if (!(sizeflag &
AFLAG))
4020 else if (sizeflag &
AFLAG)
4087 OP_E (bytemode, sizeflag);
4124 OP_E (bytemode, sizeflag);
4148 OP_E (bytemode, sizeflag);