mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 11:33:45 +08:00
(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.
This commit is contained in:
parent
d1a310e7f4
commit
128437e69f
@ -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.
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
/* Valid. */
|
||||
return (0x00);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Special. */
|
||||
return (0x10);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fraction[0] == 0x0000 && fraction[1] == 0x0000 && !integer)
|
||||
{
|
||||
/* Zero. */
|
||||
return (0x01);
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Special. */
|
||||
return (0x10);
|
||||
return (2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (integer)
|
||||
{
|
||||
/* Valid. */
|
||||
return (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Special. */
|
||||
return (2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user