Added disassembly for 0x0f 0x5x opcodes.

diff --git a/debugger/db_disasm.c b/debugger/db_disasm.c
index 2861ed0..fcbd6d3 100644
--- a/debugger/db_disasm.c
+++ b/debugger/db_disasm.c
@@ -128,8 +128,10 @@
 #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_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 @@
 /*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 @@
 	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 @@
 		      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: