Module: wine Branch: master Commit: 66d84158ead3a3652f71567547e90c391a0901e3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=66d84158ead3a3652f71567547...
Author: Jim Cameron jim_24601@btinternet.com Date: Sun May 2 13:34:16 2010 +0100
winedbg: Make disassembler properly print EMX and EXMM type operands.
---
programs/winedbg/db_disasm.c | 30 +++++++++++++++++------------- 1 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/programs/winedbg/db_disasm.c b/programs/winedbg/db_disasm.c index dc1cc3d..f5d6041 100644 --- a/programs/winedbg/db_disasm.c +++ b/programs/winedbg/db_disasm.c @@ -85,11 +85,12 @@ static BOOL db_display = FALSE; #define WORD 1 #define LONG 2 #define QUAD 3 -#define SNGL 4 -#define DBLR 5 -#define EXTR 6 -#define SDEP 7 -#define NONE 8 +#define DQUA 4 +#define SNGL 5 +#define DBLR 6 +#define EXTR 7 +#define SDEP 8 +#define NONE 9
/* * Addressing modes @@ -336,7 +337,7 @@ static const struct inst db_inst_0f6x[] = { /*6c*/ { "(bad)", TRUE, NONE, 0, 0 }, /*6d*/ { "(bad)", TRUE, NONE, 0, 0 }, /*6e*/ { "movd", TRUE, NONE, op2(E, MX), 0 }, -/*6f*/ { "movq", TRUE, NONE, op2(E, MX), 0 }, +/*6f*/ { "movq", TRUE, NONE, op2(EMX, MX), 0 }, };
static const struct inst db_inst_0f7x[] = { @@ -356,7 +357,7 @@ static const struct inst db_inst_0f7x[] = { /*7c*/ { "(bad)", TRUE, NONE, 0, 0 }, /*7d*/ { "(bad)", TRUE, NONE, 0, 0 }, /*7e*/ { "movd", TRUE, NONE, op2(E, MX), 0 }, -/*7f*/ { "movq", TRUE, NONE, op2(EMX, MX), 0 }, +/*7f*/ { "movq", TRUE, NONE, op2(MX, EMX), 0 }, };
static const struct inst db_inst_0f8x[] = { @@ -1040,10 +1041,12 @@ static const char * const db_index_reg_16[8] = { "%bx" };
-static const char * const db_reg[3][8] = { - { "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh" }, - { "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di" }, - { "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi" } +static const char * const db_reg[5][8] = { +/*BYTE*/{ "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh" }, +/*WORD*/{ "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di" }, +/*LONG*/{ "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi" }, +/*QUAD*/{ "%mm0", "%mm1", "%mm2", "%mm3", "%mm4", "%mm5", "%mm6", "%mm7" }, +/*DQUA*/{ "%xmm0","%xmm1","%xmm2","%xmm3","%xmm4","%xmm5","%xmm6","%xmm7" } };
static const char * const db_seg_reg[8] = { @@ -1058,6 +1061,7 @@ static const int db_lengths[] = { 2, /* WORD */ 4, /* LONG */ 8, /* QUAD */ + 16, /* DQUA */ 4, /* SNGL */ 8, /* DBLR */ 10, /* EXTR */ @@ -1561,7 +1565,7 @@ void be_i386_disasm_one_insn(ADDRESS64 *addr, int display) case EMX: if( db_display ) { - dbg_printf("%%mm%d", f_rm(regmodrm)); + db_print_address(seg, QUAD, &address, 0); } break; case XMM: @@ -1573,7 +1577,7 @@ void be_i386_disasm_one_insn(ADDRESS64 *addr, int display) case EXMM: if( db_display ) { - dbg_printf("%%xmm%d", f_rm(regmodrm)); + db_print_address(seg, DQUA, &address, 0); } break;