This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]