winedbg: Make disassembler properly print EMX and EXMM type operands.

This commit is contained in:
Jim Cameron 2010-05-02 13:34:16 +01:00 committed by Alexandre Julliard
parent 6fc4954457
commit 66d84158ea
1 changed files with 17 additions and 13 deletions

View File

@ -85,11 +85,12 @@ static BOOL db_display = FALSE;
#define WORD 1 #define WORD 1
#define LONG 2 #define LONG 2
#define QUAD 3 #define QUAD 3
#define SNGL 4 #define DQUA 4
#define DBLR 5 #define SNGL 5
#define EXTR 6 #define DBLR 6
#define SDEP 7 #define EXTR 7
#define NONE 8 #define SDEP 8
#define NONE 9
/* /*
* Addressing modes * Addressing modes
@ -336,7 +337,7 @@ static const struct inst db_inst_0f6x[] = {
/*6c*/ { "(bad)", TRUE, NONE, 0, 0 }, /*6c*/ { "(bad)", TRUE, NONE, 0, 0 },
/*6d*/ { "(bad)", TRUE, NONE, 0, 0 }, /*6d*/ { "(bad)", TRUE, NONE, 0, 0 },
/*6e*/ { "movd", TRUE, NONE, op2(E, MX), 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[] = { static const struct inst db_inst_0f7x[] = {
@ -356,7 +357,7 @@ static const struct inst db_inst_0f7x[] = {
/*7c*/ { "(bad)", TRUE, NONE, 0, 0 }, /*7c*/ { "(bad)", TRUE, NONE, 0, 0 },
/*7d*/ { "(bad)", TRUE, NONE, 0, 0 }, /*7d*/ { "(bad)", TRUE, NONE, 0, 0 },
/*7e*/ { "movd", TRUE, NONE, op2(E, MX), 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[] = { static const struct inst db_inst_0f8x[] = {
@ -1040,10 +1041,12 @@ static const char * const db_index_reg_16[8] = {
"%bx" "%bx"
}; };
static const char * const db_reg[3][8] = { static const char * const db_reg[5][8] = {
{ "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh" }, /*BYTE*/{ "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh" },
{ "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di" }, /*WORD*/{ "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di" },
{ "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi" } /*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] = { static const char * const db_seg_reg[8] = {
@ -1058,6 +1061,7 @@ static const int db_lengths[] = {
2, /* WORD */ 2, /* WORD */
4, /* LONG */ 4, /* LONG */
8, /* QUAD */ 8, /* QUAD */
16, /* DQUA */
4, /* SNGL */ 4, /* SNGL */
8, /* DBLR */ 8, /* DBLR */
10, /* EXTR */ 10, /* EXTR */
@ -1561,7 +1565,7 @@ void be_i386_disasm_one_insn(ADDRESS64 *addr, int display)
case EMX: case EMX:
if( db_display ) if( db_display )
{ {
dbg_printf("%%mm%d", f_rm(regmodrm)); db_print_address(seg, QUAD, &address, 0);
} }
break; break;
case XMM: case XMM:
@ -1573,7 +1577,7 @@ void be_i386_disasm_one_insn(ADDRESS64 *addr, int display)
case EXMM: case EXMM:
if( db_display ) if( db_display )
{ {
dbg_printf("%%xmm%d", f_rm(regmodrm)); db_print_address(seg, DQUA, &address, 0);
} }
break; break;