mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 17:11:06 +00:00
efeb2bd1ab
Both float, double, and _Float128 are assumed to be supported (float and double already only uses builtins). Only long double is parametrized due GCC bug 29253 which prevents its usage on powerpc. It allows to remove i686, ia64, x86_64, powerpc, and sparc arch specific implementation. On ia64 it also fixes the sNAN handling: math/test-float64x-fabs math/test-ldouble-fabs Checked on x86_64-linux-gnu, i686-linux-gnu, powerpc-linux-gnu, powerpc64-linux-gnu, sparc64-linux-gnu, and ia64-linux-gnu.
49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
/* s_fabsl.c -- long double version of s_fabs.c.
|
|
*/
|
|
|
|
/*
|
|
* ====================================================
|
|
* 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.
|
|
* ====================================================
|
|
*/
|
|
|
|
#if defined(LIBM_SCCS) && !defined(lint)
|
|
static char rcsid[] = "$NetBSD: $";
|
|
#endif
|
|
|
|
|
|
/*
|
|
* fabsl(x) returns the absolute value of x.
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <math_private.h>
|
|
#include <math_ldbl_opt.h>
|
|
#include <math-use-builtins.h>
|
|
|
|
long double __fabsl(long double x)
|
|
{
|
|
#if USE_FABSL_BUILTIN
|
|
return __builtin_fabsl (x);
|
|
#else
|
|
uint64_t hx, lx;
|
|
double xhi, xlo;
|
|
|
|
ldbl_unpack (x, &xhi, &xlo);
|
|
EXTRACT_WORDS64 (hx, xhi);
|
|
EXTRACT_WORDS64 (lx, xlo);
|
|
lx = lx ^ ( hx & 0x8000000000000000LL );
|
|
hx = hx & 0x7fffffffffffffffLL;
|
|
INSERT_WORDS64 (xhi, hx);
|
|
INSERT_WORDS64 (xlo, lx);
|
|
x = ldbl_pack (xhi, xlo);
|
|
return x;
|
|
#endif
|
|
}
|
|
long_double_symbol (libm, __fabsl, fabsl);
|