Added disassembly for 0x0f 0x5x opcodes.

This commit is contained in:
Alexandre Julliard 2001-07-11 17:33:47 +00:00
parent 1ce1bef859
commit 9107c6b09c
1 changed files with 53 additions and 19 deletions

View File

@ -128,8 +128,10 @@ static BOOL db_display = FALSE;
#define STI 32 /* FP stack */
#define X 33 /* extended FP op */
#define XA 34 /* for 'fstcw %ax' */
#define MX 35 /* special register (mmx) */
#define EMX 36 /* special register (mmx) */
#define MX 35 /* special register (MMX reg %mm0-7) */
#define EMX 36 /* special register (MMX reg %mm0-7) */
#define XMM 37 /* special register (floating point reg %xmm0-7) */
#define EXMM 38 /* special register (floating point reg %xmm0-7) */
struct inst {
const char *i_name; /* name */
@ -258,23 +260,23 @@ static const struct inst db_inst_0f2x[] = {
};
static const struct inst db_inst_0f3x[] = {
/*20*/ { "wrmsr", FALSE, NONE, 0, 0 },
/*21*/ { "rdtsc", FALSE, NONE, 0, 0 },
/*22*/ { "rdmsr", FALSE, NONE, 0, 0 },
/*23*/ { "rdpmc", FALSE, NONE, 0, 0 },
/*24*/ { "sysenter",FALSE,NONE, 0, 0 },
/*25*/ { "sysexit",FALSE,NONE, 0, 0 },
/*26*/ { "(bad)", FALSE, NONE, 0, 0 },
/*27*/ { "(bad)", FALSE, NONE, 0, 0 },
/*30*/ { "wrmsr", FALSE, NONE, 0, 0 },
/*31*/ { "rdtsc", FALSE, NONE, 0, 0 },
/*32*/ { "rdmsr", FALSE, NONE, 0, 0 },
/*33*/ { "rdpmc", FALSE, NONE, 0, 0 },
/*34*/ { "sysenter",FALSE,NONE, 0, 0 },
/*35*/ { "sysexit",FALSE,NONE, 0, 0 },
/*36*/ { "(bad)", FALSE, NONE, 0, 0 },
/*37*/ { "(bad)", FALSE, NONE, 0, 0 },
/*28*/ { "(bad)",FALSE, NONE, 0, 0 },
/*29*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2a*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2b*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2c*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2d*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2e*/ { "(bad)",FALSE, NONE, 0, 0 },
/*2f*/ { "(bad)",FALSE, NONE, 0, 0 },
/*38*/ { "(bad)",FALSE, NONE, 0, 0 },
/*39*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3a*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3b*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3c*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3d*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3e*/ { "(bad)",FALSE, NONE, 0, 0 },
/*3f*/ { "(bad)",FALSE, NONE, 0, 0 },
};
static const struct inst db_inst_0f4x[] = {
@ -297,6 +299,26 @@ static const struct inst db_inst_0f4x[] = {
/*4f*/ { "cmovnle",TRUE, NONE, op2(E, R), 0 },
};
static const struct inst db_inst_0f5x[] = {
/*50*/ { "movmskps",TRUE, NONE, op2(E, XMM), 0 },
/*51*/ { "sqrtps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*52*/ { "rsqrtps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*53*/ { "rcpps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*54*/ { "andps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*55*/ { "andnps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*56*/ { "orps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*57*/ { "xorps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*58*/ { "addps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*59*/ { "mulps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*5a*/ { "(bad)", FALSE, NONE, 0, 0 },
/*5b*/ { "(bad)", FALSE, NONE, 0, 0 },
/*5c*/ { "subps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*5d*/ { "minps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*5e*/ { "divps", TRUE, NONE, op2(XMM, EXMM), 0 },
/*5f*/ { "maxps", TRUE, NONE, op2(XMM, EXMM), 0 },
};
static const struct inst db_inst_0f6x[] = {
/*60*/ { "punpcklbw", TRUE, NONE, op2(E, MX), 0 },
/*61*/ { "punpcklwd", TRUE, NONE, op2(E, MX), 0 },
@ -499,7 +521,7 @@ static const struct inst * const db_inst_0f[] = {
db_inst_0f2x,
db_inst_0f3x,
db_inst_0f4x,
0,
db_inst_0f5x,
db_inst_0f6x,
db_inst_0f7x,
db_inst_0f8x,
@ -1554,6 +1576,18 @@ void DEBUG_Disasm( DBG_ADDR *addr, int display )
DEBUG_Printf(DBG_CHN_MESG,"%%mm%d", f_rm(regmodrm));
}
break;
case XMM:
if( db_display )
{
DEBUG_Printf(DBG_CHN_MESG,"%%xmm%d", f_reg(regmodrm));
}
break;
case EXMM:
if( db_display )
{
DEBUG_Printf(DBG_CHN_MESG,"%%xmm%d", f_rm(regmodrm));
}
break;
case Rw: