This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: __fixuns?fSI() lose if long is wider than SI
On Jan 31, 2001, Richard Henderson <rth@redhat.com> wrote:
> On Wed, Jan 31, 2001 at 01:51:43AM -0200, Alexandre Oliva wrote:
>> > BITS_PER_UNIT * 4
>>
>> It's not available in fp-bit.c. All it includes is fp-bit.h, that
>> includes nothing else. Is this enough of a reason to change it?
> I'd think, yes.
Ok to install, then? Compile-tested with the new port I'm working on.
Index: gcc/ChangeLog
from Alexandre Oliva <aoliva@redhat.com>
* config/fp-bit.c: Include hconfig.h
(float_to_si): Don't assume SImode is 32-bits wide.
(float_to_usi): Likewise.
Index: gcc/config/fp-bit.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/fp-bit.c,v
retrieving revision 1.22
diff -u -p -r1.22 fp-bit.c
--- gcc/config/fp-bit.c 2000/12/08 09:14:03 1.22
+++ gcc/config/fp-bit.c 2001/01/31 10:29:34
@@ -1,8 +1,8 @@
/* This is a software floating point library which can be used instead of
the floating point routines in libgcc1.c for targets without hardware
floating point.
- Copyright (C) 1994, 1995, 1996, 1997, 1998,
- 2000 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2001
+ Free Software Foundation, Inc.
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
@@ -45,6 +45,7 @@ Boston, MA 02111-1307, USA. */
to one copy, then compile both copies and add them to libgcc.a. */
#include "fp-bit.h"
+#include "hconfig.h"
/* The following macros can be defined to change the behaviour of this file:
FLOAT: Implement a `float', aka SFmode, fp library. If this is not
@@ -1222,7 +1223,7 @@ float_to_si (FLO_type arg_a)
/* it is a number, but a small one */
if (a.normal_exp < 0)
return 0;
- if (a.normal_exp > 30)
+ if (a.normal_exp > 4 * BITS_PER_UNIT - 2)
return a.sign ? (-MAX_SI_INT)-1 : MAX_SI_INT;
tmp = a.fraction.ll >> ((FRACBITS + NGARDS) - a.normal_exp);
return a.sign ? (-tmp) : (tmp);
@@ -1259,7 +1260,7 @@ float_to_usi (FLO_type arg_a)
/* it is a number, but a small one */
if (a.normal_exp < 0)
return 0;
- if (a.normal_exp > 31)
+ if (a.normal_exp > 4 * BITS_PER_UNIT - 1)
return MAX_USI_INT;
else if (a.normal_exp > (FRACBITS + NGARDS))
return a.fraction.ll << (a.normal_exp - (FRACBITS + NGARDS));
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist *Please* write to mailing lists, not to me