This is the mail archive of the gcc@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]
Other format: [Raw text]

Re: [PATCH][4.3] Deprecate -ftrapv


On Sun, Mar 2, 2008 at 2:00 PM, Joseph S. Myers <joseph@codesourcery.com> wrote:
> On Sat, 1 Mar 2008, Richard Guenther wrote:
>
>  > I missed once point noticed by Joseph also, that the libgcc implementation
>  > uses signed types in the implementation of the trapping arithmetics.
>  > Where we of course optimize away the overflow check, so the libgcc
>  > routines will never trap.  (if it does work in some cases then this
>  > would be a missed optimization, so sooner or later it is going to
>  > break more)
>
>  This is of course trivial to fix.  OK to commit the following patch?
>  Bootstrapped with no regressions on i686-pc-linux-gnu.

Ok.

Thanks,
Richard.

>  2008-03-02  Joseph Myers  <joseph@codesourcery.com>
>
>         * libgcc2.c (__addvSI3, __addvsi3, __addvDI3, __subvSI3,
>         __subvsi3, __subvDI3, __negvSI2, __negvsi2, __negvDI2, __absvSI2,
>         __absvsi2, __absvDI2): Use unsigned arithmetic.
>
>  Index: libgcc2.c
>  ===================================================================
>  --- libgcc2.c   (revision 132803)
>  +++ libgcc2.c   (working copy)
>  @@ -84,7 +84,7 @@
>   Wtype
>   __addvSI3 (Wtype a, Wtype b)
>   {
>  -  const Wtype w = a + b;
>  +  const Wtype w = (UWtype) a + (UWtype) b;
>
>    if (b >= 0 ? w < a : w > a)
>      abort ();
>  @@ -95,7 +95,7 @@
>   SItype
>   __addvsi3 (SItype a, SItype b)
>   {
>  -  const SItype w = a + b;
>  +  const SItype w = (USItype) a + (USItype) b;
>
>    if (b >= 0 ? w < a : w > a)
>      abort ();
>  @@ -109,7 +109,7 @@
>   DWtype
>   __addvDI3 (DWtype a, DWtype b)
>   {
>  -  const DWtype w = a + b;
>  +  const DWtype w = (UDWtype) a + (UDWtype) b;
>
>    if (b >= 0 ? w < a : w > a)
>      abort ();
>  @@ -122,7 +122,7 @@
>   Wtype
>   __subvSI3 (Wtype a, Wtype b)
>   {
>  -  const Wtype w = a - b;
>  +  const Wtype w = (UWtype) a - (UWtype) b;
>
>    if (b >= 0 ? w > a : w < a)
>      abort ();
>  @@ -133,7 +133,7 @@
>   SItype
>   __subvsi3 (SItype a, SItype b)
>   {
>  -  const SItype w = a - b;
>  +  const SItype w = (USItype) a - (USItype) b;
>
>    if (b >= 0 ? w > a : w < a)
>      abort ();
>  @@ -147,7 +147,7 @@
>   DWtype
>   __subvDI3 (DWtype a, DWtype b)
>   {
>  -  const DWtype w = a - b;
>  +  const DWtype w = (UDWtype) a - (UDWtype) b;
>
>    if (b >= 0 ? w > a : w < a)
>      abort ();
>  @@ -187,7 +187,7 @@
>   Wtype
>   __negvSI2 (Wtype a)
>   {
>  -  const Wtype w = -a;
>  +  const Wtype w = -(UWtype) a;
>
>    if (a >= 0 ? w > 0 : w < 0)
>      abort ();
>  @@ -198,7 +198,7 @@
>   SItype
>   __negvsi2 (SItype a)
>   {
>  -  const SItype w = -a;
>  +  const SItype w = -(USItype) a;
>
>    if (a >= 0 ? w > 0 : w < 0)
>      abort ();
>  @@ -212,7 +212,7 @@
>   DWtype
>   __negvDI2 (DWtype a)
>   {
>  -  const DWtype w = -a;
>  +  const DWtype w = -(UDWtype) a;
>
>    if (a >= 0 ? w > 0 : w < 0)
>      abort ();
>  @@ -231,7 +231,7 @@
>   #ifdef L_negvsi2
>      w = __negvSI2 (a);
>   #else
>  -    w = -a;
>  +    w = -(UWtype) a;
>
>    if (w < 0)
>      abort ();
>  @@ -249,7 +249,7 @@
>   #ifdef L_negvsi2
>      w = __negvsi2 (a);
>   #else
>  -    w = -a;
>  +    w = -(USItype) a;
>
>    if (w < 0)
>      abort ();
>  @@ -270,7 +270,7 @@
>   #ifdef L_negvdi2
>      w = __negvDI2 (a);
>   #else
>  -    w = -a;
>  +    w = -(UDWtype) a;
>
>    if (w < 0)
>      abort ();
>
>
>
>  --
>  Joseph S. Myers
>  joseph@codesourcery.com
>


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