Added disassembly for 0x0f 0x5x opcodes.
This commit is contained in:
parent
1ce1bef859
commit
9107c6b09c
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue