mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	Use sqrt(f/l) to enable inlining by GCC - if inlining doesn't happen, the asm redirect ensures we will still call __ieee754_sqrt(f/l). * sysdeps/ieee754/dbl-64/e_acosh.c (__ieee754_acosh): Use sqrt. * sysdeps/ieee754/dbl-64/e_gamma_r.c (gamma_positive): Likewise. * sysdeps/ieee754/dbl-64/e_hypot.c (__ieee754_hypot): Likewise. * sysdeps/ieee754/dbl-64/e_j0.c (__ieee754_j0): Likewise. * sysdeps/ieee754/dbl-64/e_j1.c (__ieee754_j1): Likewise. * sysdeps/ieee754/dbl-64/e_jn.c (__ieee754_jn): Likewise. * sysdeps/ieee754/dbl-64/s_asinh.c (__asinh): Likewise. * sysdeps/ieee754/dbl-64/wordsize-64/e_acosh.c (__ieee754_acosh): Likewise. * sysdeps/ieee754/flt-32/e_acosf.c (__ieee754_acosf): Likewise. * sysdeps/ieee754/flt-32/e_acoshf.c (__ieee754_acoshf): Likewise. * sysdeps/ieee754/flt-32/e_asinf.c (__ieee754_asinf): Likewise. * sysdeps/ieee754/flt-32/e_gammaf_r.c (gammaf_positive): Likewise. * sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Likewise. * sysdeps/ieee754/flt-32/e_j0f.c (__ieee754_j0f): Likewise. * sysdeps/ieee754/flt-32/e_j1f.c (__ieee754_j1f): Likewise. * sysdeps/ieee754/flt-32/e_powf.c (__ieee754_powf): Likewise. * sysdeps/ieee754/flt-32/s_asinhf.c (__asinhf): Likewise. * sysdeps/ieee754/ldbl-128/e_acoshl.c (__ieee754_acoshl): Use sqrtl. * sysdeps/ieee754/ldbl-128/e_acosl.c (__ieee754_acosl): Likewise. * sysdeps/ieee754/ldbl-128/e_asinl.c (__ieee754_asinl): Likewise. * sysdeps/ieee754/ldbl-128/e_gammal_r.c (gammal_positive): Likewise. * sysdeps/ieee754/ldbl-128/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/ieee754/ldbl-128/e_j0l.c (__ieee754_j0l): Likewise. * sysdeps/ieee754/ldbl-128/e_j1l.c (__ieee754_j1l): Likewise. * sysdeps/ieee754/ldbl-128/e_jnl.c (__ieee754_jnl): Likewise. * sysdeps/ieee754/ldbl-128/e_powl.c (__ieee754_powl): Likewise. * sysdeps/ieee754/ldbl-128/s_asinhl.c (__ieee754_asinhl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (__ieee754_acoshl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_acosl.c (__ieee754_acosl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_asinl.c (__ieee754_asinl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (gammal_positive): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_j0l.c (__ieee754_j0l): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_j1l.c (__ieee754_j1l): Likewise * sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise. * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Likewise. * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__ieee754_asinhl): Likewise. * sysdeps/ieee754/ldbl-96/e_acoshl.c (__ieee754_acoshl): Use sqrtl. * sysdeps/ieee754/ldbl-96/e_asinl.c (__ieee754_asinl): Likewise. * sysdeps/ieee754/ldbl-96/e_gammal_r.c (gammal_positive): Likewise. * sysdeps/ieee754/ldbl-96/e_hypotl.c (__ieee754_hypotl): Likewise. * sysdeps/ieee754/ldbl-96/e_j0l.c (__ieee754_j0l): Likewise. * sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_j1l): Likewise. * sysdeps/ieee754/ldbl-96/e_jnl.c (__ieee754_jnl): Likewise. * sysdeps/ieee754/ldbl-96/s_asinhl.c (__ieee754_asinhl): Likewise. * sysdeps/m68k/m680x0/fpu/e_pow.c (__ieee754_pow): Likewise. * sysdeps/powerpc/fpu/e_hypot.c (__ieee754_hypot): Likewise. * sysdeps/powerpc/fpu/e_hypotf.c (__ieee754_hypotf): Likewise.
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* @(#)e_acosh.c 5.1 93/09/24 */
 | 
						|
/*
 | 
						|
 * ====================================================
 | 
						|
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 | 
						|
 *
 | 
						|
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 | 
						|
 * Permission to use, copy, modify, and distribute this
 | 
						|
 * software is freely granted, provided that this notice
 | 
						|
 * is preserved.
 | 
						|
 * ====================================================
 | 
						|
 */
 | 
						|
 | 
						|
/* __ieee754_acosh(x)
 | 
						|
 * Method :
 | 
						|
 *	Based on
 | 
						|
 *		acosh(x) = log [ x + sqrt(x*x-1) ]
 | 
						|
 *	we have
 | 
						|
 *		acosh(x) := log(x)+ln2,	if x is large; else
 | 
						|
 *		acosh(x) := log(2x-1/(sqrt(x*x-1)+x)) if x>2; else
 | 
						|
 *		acosh(x) := log1p(t+sqrt(2.0*t+t*t)); where t=x-1.
 | 
						|
 *
 | 
						|
 * Special cases:
 | 
						|
 *	acosh(x) is NaN with signal if x<1.
 | 
						|
 *	acosh(NaN) is NaN without signal.
 | 
						|
 */
 | 
						|
 | 
						|
#include <math.h>
 | 
						|
#include <math_private.h>
 | 
						|
 | 
						|
static const long double
 | 
						|
one	= 1.0L,
 | 
						|
ln2	= M_LN2l;
 | 
						|
 | 
						|
long double
 | 
						|
__ieee754_acoshl(long double x)
 | 
						|
{
 | 
						|
	long double t;
 | 
						|
	int64_t hx;
 | 
						|
	uint64_t lx;
 | 
						|
	double xhi, xlo;
 | 
						|
 | 
						|
	ldbl_unpack (x, &xhi, &xlo);
 | 
						|
	EXTRACT_WORDS64 (hx, xhi);
 | 
						|
	EXTRACT_WORDS64 (lx, xlo);
 | 
						|
	if(hx<0x3ff0000000000000LL) {		/* x < 1 */
 | 
						|
	    return (x-x)/(x-x);
 | 
						|
	} else if(hx >=0x4370000000000000LL) {	/* x >= 2**56 */
 | 
						|
	    if(hx >=0x7ff0000000000000LL) {	/* x is inf of NaN */
 | 
						|
		return x+x;
 | 
						|
	    } else
 | 
						|
		return __ieee754_logl(x)+ln2;	/* acosh(huge)=log(2x) */
 | 
						|
	} else if (((hx-0x3ff0000000000000LL)|(lx&0x7fffffffffffffffLL))==0) {
 | 
						|
	    return 0.0;			/* acosh(1) = 0 */
 | 
						|
	} else if (hx > 0x4000000000000000LL) {	/* 2**56 > x > 2 */
 | 
						|
	    t=x*x;
 | 
						|
	    return __ieee754_logl(2.0*x-one/(x+sqrtl(t-one)));
 | 
						|
	} else {			/* 1<x<2 */
 | 
						|
	    t = x-one;
 | 
						|
	    return __log1pl(t+sqrtl(2.0*t+t*t));
 | 
						|
	}
 | 
						|
}
 | 
						|
strong_alias (__ieee754_acoshl, __acoshl_finite)
 |