patches/glibc/2.9/270-ldbl-nexttowardf.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Mon Aug 23 14:32:16 2010 +0200 (2010-08-23)
changeset 2100 f9fcfc002c8a
parent 1201 c9967a6e3b25
permissions -rw-r--r--
debug/gdb: install dependable libs in a generic target static libs dir

For now, ncurses is the only dependable target library built for gdb.
But expat is coming, and there's no reason to install each library in
its own place.

So, install ncurses in a generic directory, where other dependable
libraries can be installed as well.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 Original patch from: gentoo/src/patchsets/glibc/2.9/1073_all_glibc-ldbl-nexttowardf.patch
     2 
     3 -= BEGIN original header =-
     4 ripped from Debian
     5 
     6 this change was made to generic __nexttowardf, but not the long double version
     7 
     8 2008-05-05  Aurelien Jarno  <aurelien@aurel32.net>
     9 
    10 	* sysdeps/ieee754/ldbl-128/s_nexttowardf.c: Include float.h.
    11 	(__nexttowardf): Use math_opt_barrier and
    12 	math_force_eval macros.  If FLT_EVAL_METHOD is not 0, force
    13 	x to float using asm.
    14 
    15 -= END original header =-
    16 
    17 diff -durN glibc-2_9.orig/sysdeps/ieee754/ldbl-128/s_nexttowardf.c glibc-2_9/sysdeps/ieee754/ldbl-128/s_nexttowardf.c
    18 --- glibc-2_9.orig/sysdeps/ieee754/ldbl-128/s_nexttowardf.c	1999-07-14 02:09:42.000000000 +0200
    19 +++ glibc-2_9/sysdeps/ieee754/ldbl-128/s_nexttowardf.c	2009-02-02 22:00:59.000000000 +0100
    20 @@ -19,7 +19,8 @@
    21  #endif
    22  
    23  #include "math.h"
    24 -#include "math_private.h"
    25 +#include <math_private.h>
    26 +#include <float.h>
    27  
    28  #ifdef __STDC__
    29  	float __nexttowardf(float x, long double y)
    30 @@ -44,10 +45,12 @@
    31  	   return x+y;
    32  	if((long double) x==y) return y;	/* x=y, return y */
    33  	if(ix==0) {				/* x == 0 */
    34 -	    float x2;
    35 +	    float u;
    36  	    SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/
    37 -	    x2 = x*x;
    38 -	    if(x2==x) return x2; else return x;	/* raise underflow flag */
    39 +	    u = math_opt_barrier (x);
    40 +	    u = u * u;
    41 +	    math_force_eval (u);		/* raise underflow flag */
    42 +	    return x;
    43  	}
    44  	if(hx>=0) {				/* x > 0 */
    45  	    if(hy<0||(ix>>23)>(iy>>48)-0x3f80
    46 @@ -67,13 +70,16 @@
    47  	    }
    48  	}
    49  	hy = hx&0x7f800000;
    50 -	if(hy>=0x7f800000) return x+x;	/* overflow  */
    51 +	if(hy>=0x7f800000) {
    52 +	  x = x+x;	/* overflow  */
    53 +	  if (FLT_EVAL_METHOD != 0)
    54 +	    /* Force conversion to float.  */
    55 +	    asm ("" : "+m"(x));
    56 +	  return x;
    57 +	}
    58  	if(hy<0x00800000) {		/* underflow */
    59 -	    float x2 = x*x;
    60 -	    if(x2!=x) {		/* raise underflow flag */
    61 -	        SET_FLOAT_WORD(x2,hx);
    62 -		return x2;
    63 -	    }
    64 +	    float u = x*x;
    65 +	    math_force_eval (u);	/* raise underflow flag */
    66  	}
    67  	SET_FLOAT_WORD(x,hx);
    68  	return x;