(Changes from Kevin Buettner, with minor update by Don Howard.)
authorDon Howard <dhoward@redhat.com>
Fri, 27 Apr 2001 16:06:53 +0000 (16:06 +0000)
committerDon Howard <dhoward@redhat.com>
Fri, 27 Apr 2001 16:06:53 +0000 (16:06 +0000)
* i387-nat.c (i387_supply_fxsave, i387_fill_fxsave, i387_tag): Fix
typos in which hexadecimal constants were really intended to be
binary constants.
(i387_tag): Swap logic regarding zero vs non-zero exponents.

gdb/ChangeLog
gdb/i387-nat.c

index ff7eb76aac20d4f98ebeda11d605e15cb1e52f34..a2e304e5154fc5adaeb7adad9994467053df3944 100644 (file)
@@ -1,5 +1,11 @@
 2001-04-27  Don Howard  <dhoward@redhat.com>
 
+       (Changes from Kevin Buettner, with minor update by Don Howard.)
+       
+       * i387-nat.c (i387_supply_fxsave, i387_fill_fxsave, i387_tag): Fix
+       typos in which hexadecimal constants were really intended to be
+       binary constants.
+       (i387_tag): Swap logic regarding zero vs non-zero exponents.
        * MAINTAINERS (Misc): Added myself to the write-after-approval
        list.
 
index f22b4078c2104cadd6611b44de50c705124f8611..5cb1a04c694ec547e3ce92d1887325203e3248aa 100644 (file)
@@ -210,17 +210,19 @@ i387_supply_fxsave (char *fxsave)
              int top;
 
              fstat = *(unsigned short *) (FXSAVE_ADDR (fxsave, FSTAT_REGNUM));
-             top = ((fstat >> 11) & 0x111);
+             top = ((fstat >> 11) & 0x7);
 
              for (fpreg = 7; fpreg >= 0; fpreg--)
                {
-                 int tag = 0x11;
+                 int tag;
 
                  if (val & (1 << fpreg))
                    {
                      int regnum = (fpreg + 8 - top) % 8 + FP0_REGNUM;
                      tag = i387_tag (FXSAVE_ADDR (fxsave, regnum));
                    }
+                 else
+                   tag = 3;            /* Empty */
 
                  ftag |= tag << (2 * fpreg);
                }
@@ -275,10 +277,10 @@ i387_fill_fxsave (char *fxsave, int regnum)
 
                for (fpreg = 7; fpreg >= 0; fpreg--)
                  {
-                   int tag = (ftag >> (fpreg * 2)) & 0x11;
+                   int tag = (ftag >> (fpreg * 2)) & 3;
 
-                   if (tag != 0x11)
-                     val |= (1 << fpreg);
+                   if (tag != 3)
+                     val |= (1 << (fpreg * 2));
                  }
 
                memcpy (FXSAVE_ADDR (fxsave, i), &val, 2);
@@ -312,32 +314,32 @@ i387_tag (unsigned char *raw)
   if (exponent == 0x7fff)
     {
       /* Special.  */
-      return (0x10);
+      return (2);
     }
   else if (exponent == 0x0000)
     {
-      if (integer)
+      if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
        {
-         /* Valid.  */
-         return (0x00);
+         /* Zero.  */
+         return (1);
        }
       else
        {
          /* Special.  */
-         return (0x10);
+         return (2);
        }
     }
   else
     {
-      if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
+      if (integer)
        {
-         /* Zero.  */
-         return (0x01);
+         /* Valid.  */
+         return (0);
        }
       else
        {
          /* Special.  */
-         return (0x10);
+         return (2);
        }
     }
 }