Fixed decoding of x87 instructions to handle those taking 16 bit
integer arguments.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2339 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/vg_to_ucode.c b/coregrind/vg_to_ucode.c
index 41ea9c2..6e5a4e2 100644
--- a/coregrind/vg_to_ucode.c
+++ b/coregrind/vg_to_ucode.c
@@ -2487,14 +2487,14 @@
 
       case 0xDA:
          switch ((second_byte >> 3) & 7) {
-            case 0: /* FIADD */
-            case 1: /* FIMUL */
-            case 2: /* FICOM */
-            case 3: /* FICOMP */
-            case 4: /* FISUB */
-            case 5: /* FISUBR */
-            case 6: /* FIDIV */
-            case 7: /* FIDIVR */
+            case 0: /* FIADD dword-integer */
+            case 1: /* FIMUL dword-integer */
+            case 2: /* FICOM dword-integer */
+            case 3: /* FICOMP dword-integer */
+            case 4: /* FISUB dword-integer */
+            case 5: /* FISUBR dword-integer */
+            case 6: /* FIDIV dword-integer */
+            case 7: /* FIDIVR dword-integer */
                return dis_fpu_mem(cb, sorb, 4, rd, eip, first_byte); 
             default: 
                goto unhandled;
@@ -2552,6 +2552,22 @@
          }
          break;
 
+      case 0xDE:
+         switch ((second_byte >> 3) & 7) {
+            case 0: /* FIADD word-integer */
+            case 1: /* FIMUL word-integer */
+            case 2: /* FICOM word-integer */
+            case 3: /* FICOMP word-integer */
+            case 4: /* FISUB word-integer */
+            case 5: /* FISUBR word-integer */
+            case 6: /* FIDIV word-integer */
+            case 7: /* FIDIVR word-integer */
+               return dis_fpu_mem(cb, sorb, 2, rd, eip, first_byte); 
+            default: 
+               goto unhandled;
+         }
+         break;
+
       case 0xDF:
          switch ((second_byte >> 3) & 7) {
             case 0: /* FILD word-integer */