fpgnulib.c (__extendsfdf2): Handle negative zero.
2005-12-29 Paul Brook <paul@codesourcery.com> * config/m68k/fpgnulib.c (__extendsfdf2): Handle negative zero. (__truncdfsf2): Ditto. (__extenddfxf2): Ditto. (__truncxfdf2): Ditto. * config/m68k/lb1sf68.asm (__addsf3): Return -0.0 for -0.0 + -0.0. (__adddf3): Ditto. From-SVN: r109143
This commit is contained in:
parent
338276300e
commit
75a75b8850
|
@ -1,3 +1,12 @@
|
||||||
|
2005-12-29 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
* config/m68k/fpgnulib.c (__extendsfdf2): Handle negative zero.
|
||||||
|
(__truncdfsf2): Ditto.
|
||||||
|
(__extenddfxf2): Ditto.
|
||||||
|
(__truncxfdf2): Ditto.
|
||||||
|
* config/m68k/lb1sf68.asm (__addsf3): Return -0.0 for -0.0 + -0.0.
|
||||||
|
(__adddf3): Ditto.
|
||||||
|
|
||||||
2005-12-29 Daniel Jacobowitz <dan@codesourcery.com>
|
2005-12-29 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
Paul Brook <paul@codesourcery.com>
|
Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
|
|
|
@ -241,13 +241,13 @@ __extendsfdf2 (float a1)
|
||||||
|
|
||||||
fl1.f = a1;
|
fl1.f = a1;
|
||||||
|
|
||||||
if (!fl1.l)
|
dl.l.upper = SIGN (fl1.l);
|
||||||
|
if ((fl1.l & ~SIGNBIT) == 0)
|
||||||
{
|
{
|
||||||
dl.l.upper = dl.l.lower = 0;
|
dl.l.lower = 0;
|
||||||
return dl.d;
|
return dl.d;
|
||||||
}
|
}
|
||||||
|
|
||||||
dl.l.upper = SIGN (fl1.l);
|
|
||||||
exp = EXP(fl1.l);
|
exp = EXP(fl1.l);
|
||||||
mant = MANT (fl1.l) & ~HIDDEN;
|
mant = MANT (fl1.l) & ~HIDDEN;
|
||||||
if (exp == 0)
|
if (exp == 0)
|
||||||
|
@ -280,8 +280,11 @@ __truncdfsf2 (double a1)
|
||||||
|
|
||||||
dl1.d = a1;
|
dl1.d = a1;
|
||||||
|
|
||||||
if (!dl1.l.upper && !dl1.l.lower)
|
if ((dl1.l.upper & ~SIGNBIT) == 0 && !dl1.l.lower)
|
||||||
return 0;
|
{
|
||||||
|
fl.l = SIGND(dl1);
|
||||||
|
return fl.f;
|
||||||
|
}
|
||||||
|
|
||||||
exp = EXPD (dl1) - EXCESSD + EXCESS;
|
exp = EXPD (dl1) - EXCESSD + EXCESS;
|
||||||
|
|
||||||
|
@ -398,10 +401,14 @@ __extenddfxf2 (double d)
|
||||||
dl.d = d;
|
dl.d = d;
|
||||||
/*printf ("dfxf in: %g\n", d);*/
|
/*printf ("dfxf in: %g\n", d);*/
|
||||||
|
|
||||||
if (!dl.l.upper && !dl.l.lower)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ldl.l.upper = SIGND (dl);
|
ldl.l.upper = SIGND (dl);
|
||||||
|
if ((dl.l.upper & ~SIGNBIT) == 0 && !dl.l.lower)
|
||||||
|
{
|
||||||
|
ldl.l.middle = 0;
|
||||||
|
ldl.l.lower = 0;
|
||||||
|
return ldl.ld;
|
||||||
|
}
|
||||||
|
|
||||||
exp = EXPD (dl) - EXCESSD + EXCESSX;
|
exp = EXPD (dl) - EXCESSD + EXCESSX;
|
||||||
ldl.l.upper |= exp << 16;
|
ldl.l.upper |= exp << 16;
|
||||||
ldl.l.middle = HIDDENX;
|
ldl.l.middle = HIDDENX;
|
||||||
|
@ -427,14 +434,17 @@ __truncxfdf2 (long double ld)
|
||||||
ldl.ld = ld;
|
ldl.ld = ld;
|
||||||
/*printf ("xfdf in: %s\n", dumpxf (ld));*/
|
/*printf ("xfdf in: %s\n", dumpxf (ld));*/
|
||||||
|
|
||||||
if (!ldl.l.upper && !ldl.l.middle && !ldl.l.lower)
|
dl.l.upper = SIGNX (ldl);
|
||||||
return 0;
|
if ((ldl.l.upper & ~SIGNBIT) == 0 && !ldl.l.middle && !ldl.l.lower)
|
||||||
|
{
|
||||||
|
dl.l.lower = 0;
|
||||||
|
return dl.d;
|
||||||
|
}
|
||||||
|
|
||||||
exp = EXPX (ldl) - EXCESSX + EXCESSD;
|
exp = EXPX (ldl) - EXCESSX + EXCESSD;
|
||||||
/* ??? quick and dirty: keep `exp' sane */
|
/* ??? quick and dirty: keep `exp' sane */
|
||||||
if (exp >= EXPDMASK)
|
if (exp >= EXPDMASK)
|
||||||
exp = EXPDMASK - 1;
|
exp = EXPDMASK - 1;
|
||||||
dl.l.upper = SIGNX (ldl);
|
|
||||||
dl.l.upper |= exp << (32 - (EXPDBITS + 1));
|
dl.l.upper |= exp << (32 - (EXPDBITS + 1));
|
||||||
/* +1-1: add one for sign bit, but take one off for explicit-integer-bit */
|
/* +1-1: add one for sign bit, but take one off for explicit-integer-bit */
|
||||||
dl.l.upper |= (ldl.l.middle & MANTXMASK) >> (EXPDBITS + 1 - 1);
|
dl.l.upper |= (ldl.l.middle & MANTXMASK) >> (EXPDBITS + 1 - 1);
|
||||||
|
|
|
@ -1285,7 +1285,12 @@ Ladddf$b:
|
||||||
| Return b (if a is zero)
|
| Return b (if a is zero)
|
||||||
movel d2,d0
|
movel d2,d0
|
||||||
movel d3,d1
|
movel d3,d1
|
||||||
bra 1f
|
bne 1f | Check if b is -0
|
||||||
|
cmpl IMM (0x80000000),d0
|
||||||
|
bne 1f
|
||||||
|
andl IMM (0x80000000),d7 | Use the sign of a
|
||||||
|
clrl d0
|
||||||
|
bra Ladddf$ret
|
||||||
Ladddf$a:
|
Ladddf$a:
|
||||||
movel a6@(8),d0
|
movel a6@(8),d0
|
||||||
movel a6@(12),d1
|
movel a6@(12),d1
|
||||||
|
@ -2570,16 +2575,13 @@ SYM (__addsf3):
|
||||||
#endif
|
#endif
|
||||||
movel a6@(8),d0 | get first operand
|
movel a6@(8),d0 | get first operand
|
||||||
movel a6@(12),d1 | get second operand
|
movel a6@(12),d1 | get second operand
|
||||||
movel d0,d6 | get d0's sign bit '
|
movel d0,a0 | get d0's sign bit '
|
||||||
addl d0,d0 | check and clear sign bit of a
|
addl d0,d0 | check and clear sign bit of a
|
||||||
beq Laddsf$b | if zero return second operand
|
beq Laddsf$b | if zero return second operand
|
||||||
movel d1,d7 | save b's sign bit '
|
movel d1,a1 | save b's sign bit '
|
||||||
addl d1,d1 | get rid of sign bit
|
addl d1,d1 | get rid of sign bit
|
||||||
beq Laddsf$a | if zero return first operand
|
beq Laddsf$a | if zero return first operand
|
||||||
|
|
||||||
movel d6,a0 | save signs in address registers
|
|
||||||
movel d7,a1 | so we can use d6 and d7
|
|
||||||
|
|
||||||
| Get the exponents and check for denormalized and/or infinity.
|
| Get the exponents and check for denormalized and/or infinity.
|
||||||
|
|
||||||
movel IMM (0x00ffffff),d4 | mask to get fraction
|
movel IMM (0x00ffffff),d4 | mask to get fraction
|
||||||
|
@ -2950,7 +2952,12 @@ Laddsf$b$den:
|
||||||
Laddsf$b:
|
Laddsf$b:
|
||||||
| Return b (if a is zero).
|
| Return b (if a is zero).
|
||||||
movel a6@(12),d0
|
movel a6@(12),d0
|
||||||
bra 1f
|
cmpl IMM (0x80000000),d0 | Check if b is -0
|
||||||
|
bne 1f
|
||||||
|
movel a0,d7
|
||||||
|
andl IMM (0x80000000),d7 | Use the sign of a
|
||||||
|
clrl d0
|
||||||
|
bra Laddsf$ret
|
||||||
Laddsf$a:
|
Laddsf$a:
|
||||||
| Return a (if b is zero).
|
| Return a (if b is zero).
|
||||||
movel a6@(8),d0
|
movel a6@(8),d0
|
||||||
|
|
Loading…
Reference in New Issue