4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-19 21:09:22 +08:00

* libc/include/complex.h (cabsl): Add prototype.

(cimagl): Add prototype.
	(creall): Add prototype.
	* libc/include/ieeefp.h: Include float.h.
	(EXT_EXPBITS, EXT_FRACHBITS, EXT_FRACLBITS)
	(EXT_EXP_INFNAN. EXT_EXP_BIAS, EXT_FRACBITS): Define.
	(struct ieee_ext, union ieee_ext_u): New types for long double
	support.
	* libc/include/math.h (finitel): Add prototype.
	(hypotl): Add prototype.
	(sqrtl): Add prototype.
	* libm/common/Makefile.am (lsrc): Add sl_finite.c.
	* libm/common/Makefile.in: Regenerate.
	* libm/common/fdlibm.h (__ieee754_hypotl): Add prototype.
	* libm/common/hypotl.c (hypotl): Add implementation for when long
	double is larger than double.
	* libm/common/sqrtl.c (sqrtl): Likewise.
	* libm/common/sl_finite.c: New file.  Adds implementation of the
	finitel function.
	* libm/complex/Makefile.am (lsrc): Define.
	(libcomplex_la_SOURCES): Add lsrc.
	(lib_a_SOURCES): Add lsrc.
	* libm/complex/Makefile.in: Regenerate.
	* libm/complex/cabs.c: Add documentation of cabsl function.
	* libm/complex/cimag.c: Add documentation of cimagl function.
	* libm/complex/creall.c: Add documentation of creall function.
	* libm/complex/cabsl.c: New file.  Adds implementation of the
	cabsl function.
	* libm/complex/cimagl.c: New file.  Adds implementation of the
	cimagl function.
	* libm/complex/creall.c: New file.  Adds implementation of the
	creall function.
	* libm/math/Makefile.am (lsrc): Define.
	(libmath_la_SOURCES): Add lsrc.
	(lib_a_SOURCES): Add lsrc.
	* libm/math/Makefile.in: Regenerate.
	* libm/math/el_hypot.c: New file.  Adds implementation of the
	__ieee754_hypotl function.
This commit is contained in:
Nick Clifton 2015-02-06 16:14:04 +00:00
parent db004c5d7a
commit b9e7cd9a84
23 changed files with 525 additions and 52 deletions

View File

@ -1,3 +1,44 @@
2015-02-06 Nick Clifton <nickc@redhat.com>
* libc/include/complex.h (cabsl): Add prototype.
(cimagl): Add prototype.
(creall): Add prototype.
* libc/include/ieeefp.h: Include float.h.
(EXT_EXPBITS, EXT_FRACHBITS, EXT_FRACLBITS)
(EXT_EXP_INFNAN. EXT_EXP_BIAS, EXT_FRACBITS): Define.
(struct ieee_ext, union ieee_ext_u): New types for long double
support.
* libc/include/math.h (finitel): Add prototype.
(hypotl): Add prototype.
(sqrtl): Add prototype.
* libm/common/Makefile.am (lsrc): Add sl_finite.c.
* libm/common/Makefile.in: Regenerate.
* libm/common/fdlibm.h (__ieee754_hypotl): Add prototype.
* libm/common/hypotl.c (hypotl): Add implementation for when long
double is larger than double.
* libm/common/sqrtl.c (sqrtl): Likewise.
* libm/common/sl_finite.c: New file. Adds implementation of the
finitel function.
* libm/complex/Makefile.am (lsrc): Define.
(libcomplex_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/complex/Makefile.in: Regenerate.
* libm/complex/cabs.c: Add documentation of cabsl function.
* libm/complex/cimag.c: Add documentation of cimagl function.
* libm/complex/creall.c: Add documentation of creall function.
* libm/complex/cabsl.c: New file. Adds implementation of the
cabsl function.
* libm/complex/cimagl.c: New file. Adds implementation of the
cimagl function.
* libm/complex/creall.c: New file. Adds implementation of the
creall function.
* libm/math/Makefile.am (lsrc): Define.
(libmath_la_SOURCES): Add lsrc.
(lib_a_SOURCES): Add lsrc.
* libm/math/Makefile.in: Regenerate.
* libm/math/el_hypot.c: New file. Adds implementation of the
__ieee754_hypotl function.
2015-02-04 Corinna Vinschen <vinschen@redhat.com> 2015-02-04 Corinna Vinschen <vinschen@redhat.com>
* libc/include/wchar.h (wcstold): Drop _LDBL_EQ_DBL requirement for * libc/include/wchar.h (wcstold): Drop _LDBL_EQ_DBL requirement for

View File

@ -83,6 +83,7 @@ float complex clogf(float complex);
float cabsf(float complex) __RENAME(__c99_cabsf); float cabsf(float complex) __RENAME(__c99_cabsf);
#endif #endif
*/ */
long double cabsl(long double complex) ;
double cabs(double complex) ; double cabs(double complex) ;
float cabsf(float complex) ; float cabsf(float complex) ;
@ -102,7 +103,7 @@ float cargf(float complex);
/* 7.3.9.2 The cimag functions */ /* 7.3.9.2 The cimag functions */
double cimag(double complex); double cimag(double complex);
float cimagf(float complex); float cimagf(float complex);
/*long double cimagl(long double complex); */ long double cimagl(long double complex);
/* 7.3.9.3 The conj functions */ /* 7.3.9.3 The conj functions */
double complex conj(double complex); double complex conj(double complex);
@ -117,7 +118,7 @@ float complex cprojf(float complex);
/* 7.3.9.5 The creal functions */ /* 7.3.9.5 The creal functions */
double creal(double complex); double creal(double complex);
float crealf(float complex); float crealf(float complex);
/*long double creall(long double complex); */ long double creall(long double complex);
__END_DECLS __END_DECLS

View File

@ -4,11 +4,12 @@
#include "_ansi.h" #include "_ansi.h"
#include <machine/ieeefp.h> #include <machine/ieeefp.h>
#include <float.h>
_BEGIN_STD_C _BEGIN_STD_C
/* FIXME FIXME FIXME: /* FIXME FIXME FIXME:
Neither of __ieee_{float,double}_shape_tape seem to be used anywhere Neither of __ieee_{float,double}_shape_type seem to be used anywhere
except in libm/test. If that is the case, please delete these from here. except in libm/test. If that is the case, please delete these from here.
If that is not the case, please insert documentation here describing why If that is not the case, please insert documentation here describing why
they're needed. */ they're needed. */
@ -46,9 +47,7 @@ typedef union
long aslong[2]; long aslong[2];
} __ieee_double_shape_type; } __ieee_double_shape_type;
#endif #elif defined __IEEE_LITTLE_ENDIAN
#ifdef __IEEE_LITTLE_ENDIAN
typedef union typedef union
{ {
@ -92,7 +91,7 @@ typedef union
} __ieee_double_shape_type; } __ieee_double_shape_type;
#endif #endif /* __IEEE_LITTLE_ENDIAN */
#ifdef __IEEE_BIG_ENDIAN #ifdef __IEEE_BIG_ENDIAN
@ -118,9 +117,7 @@ typedef union
} __ieee_float_shape_type; } __ieee_float_shape_type;
#endif #elif defined __IEEE_LITTLE_ENDIAN
#ifdef __IEEE_LITTLE_ENDIAN
typedef union typedef union
{ {
@ -144,10 +141,70 @@ typedef union
} __ieee_float_shape_type; } __ieee_float_shape_type;
#endif /* __IEEE_LITTLE_ENDIAN */
#ifndef _LDBL_EQ_DBL
#ifndef LDBL_MANT_DIG
#error "LDBL_MANT_DIG not defined - should be found in float.h"
#elif LDBL_MANT_DIG == DBL_MANT_DIG
#error "double and long double are the same size but LDBL_EQ_DBL is not defined"
#elif LDBL_MANT_DIG == 53
/* This happens when doubles are 32-bits and long doubles are 64-bits. */
#define EXT_EXPBITS 11
#define EXT_FRACHBITS 20
#define EXT_FRACLBITS 32
#define __ieee_ext_field_type unsigned long
#elif LDBL_MANT_DIG == 64
#define EXT_EXPBITS 15
#define EXT_FRACHBITS 32
#define EXT_FRACLBITS 32
#define __ieee_ext_field_type unsigned int
#elif LDBL_MANT_DIG == 65
#define EXT_EXPBITS 15
#define EXT_FRACHBITS 32
#define EXT_FRACLBITS 32
#define __ieee_ext_field_type unsigned int
#elif LDBL_MANT_DIG == 112
#define EXT_EXPBITS 15
#define EXT_FRACHBITS 48
#define EXT_FRACLBITS 64
#define __ieee_ext_field_type unsigned long long
#elif LDBL_MANT_DIG == 113
#define EXT_EXPBITS 15
#define EXT_FRACHBITS 48
#define EXT_FRACLBITS 64
#define __ieee_ext_field_type unsigned long long
#else
#error Unsupported value for LDBL_MANT_DIG
#endif #endif
#define EXT_EXP_INFNAN ((1 << EXT_EXPBITS) - 1) /* 32767 */
#define EXT_EXP_BIAS ((1 << (EXT_EXPBITS - 1)) - 1) /* 16383 */
#define EXT_FRACBITS (EXT_FRACLBITS + EXT_FRACHBITS)
typedef struct ieee_ext
{
__ieee_ext_field_type ext_fracl : EXT_FRACLBITS;
__ieee_ext_field_type ext_frach : EXT_FRACHBITS;
__ieee_ext_field_type ext_exp : EXT_EXPBITS;
__ieee_ext_field_type ext_sign : 1;
} ieee_ext;
typedef union ieee_ext_u
{
long double extu_ld;
struct ieee_ext extu_ext;
} ieee_ext_u;
#endif /* ! _LDBL_EQ_DBL */
/* FLOATING ROUNDING */ /* FLOATING ROUNDING */

View File

@ -254,6 +254,10 @@ extern int __signbitd (double x);
(__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \ (__extension__ ({__typeof__(a) __a = (a); __typeof__(b) __b = (b); \
fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;})) fpclassify(__a) == FP_NAN || fpclassify(__b) == FP_NAN;}))
/* Non ANSI long double precision functions. */
extern int finitel _PARAMS((long double));
/* Non ANSI double precision functions. */ /* Non ANSI double precision functions. */
extern double infinity _PARAMS((void)); extern double infinity _PARAMS((void));
@ -454,6 +458,8 @@ extern long double erfl _PARAMS((long double));
extern long double erfcl _PARAMS((long double)); extern long double erfcl _PARAMS((long double));
#endif /* ! defined (_REENT_ONLY) */ #endif /* ! defined (_REENT_ONLY) */
#else /* !_LDBL_EQ_DBL */ #else /* !_LDBL_EQ_DBL */
extern long double hypotl _PARAMS((long double, long double));
extern long double sqrtl _PARAMS((long double));
#ifdef __i386__ #ifdef __i386__
/* Other long double precision functions. */ /* Other long double precision functions. */
extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE));

View File

@ -104,7 +104,10 @@ char *_EXFUN(strerror_r,(int, char *, size_t));
#else #else
# ifdef __GNUC__ # ifdef __GNUC__
int _EXFUN(strerror_r,(int, char *, size_t)) int _EXFUN(strerror_r,(int, char *, size_t))
__asm__ (__ASMNAME ("__xpg_strerror_r")); #ifdef __ASMNAME
__asm__ (__ASMNAME ("__xpg_strerror_r"))
#endif
;
# else # else
int _EXFUN(__xpg_strerror_r,(int, char *, size_t)); int _EXFUN(__xpg_strerror_r,(int, char *, size_t));
# define strerror_r __xpg_strerror_r # define strerror_r __xpg_strerror_r

View File

@ -60,6 +60,7 @@ setjmp:
clr r12 clr r12
ret ret
#endif #endif
.size setjmp , . - setjmp
.global longjmp .global longjmp
@ -102,4 +103,5 @@ longjmp:
add.w #2, r1 add.w #2, r1
mov.w r14, r0 mov.w r14, r0
#endif #endif
.size longjmp , . - longjmp

View File

@ -31,8 +31,8 @@ lsrc = atanl.c cosl.c sinl.c tanl.c tanhl.c frexpl.c modfl.c ceill.c fabsl.c \
scalbnl.c exp2l.c scalblnl.c tgammal.c nearbyintl.c lrintl.c llrintl.c \ scalbnl.c exp2l.c scalblnl.c tgammal.c nearbyintl.c lrintl.c llrintl.c \
roundl.c lroundl.c llroundl.c truncl.c remquol.c fdiml.c fmaxl.c fminl.c \ roundl.c lroundl.c llroundl.c truncl.c remquol.c fdiml.c fmaxl.c fminl.c \
fmal.c acoshl.c atanhl.c remainderl.c lgammal.c erfl.c erfcl.c \ fmal.c acoshl.c atanhl.c remainderl.c lgammal.c erfl.c erfcl.c \
logbl.c nexttowardf.c nexttoward.c nexttowardl.c log2l.c logbl.c nexttowardf.c nexttoward.c nexttowardl.c log2l.c \
sl_finite.c
libcommon_la_LDFLAGS = -Xcompiler -nostdlib libcommon_la_LDFLAGS = -Xcompiler -nostdlib

View File

@ -139,7 +139,7 @@ am__objects_3 = lib_a-atanl.$(OBJEXT) lib_a-cosl.$(OBJEXT) \
lib_a-erfl.$(OBJEXT) lib_a-erfcl.$(OBJEXT) \ lib_a-erfl.$(OBJEXT) lib_a-erfcl.$(OBJEXT) \
lib_a-logbl.$(OBJEXT) lib_a-nexttowardf.$(OBJEXT) \ lib_a-logbl.$(OBJEXT) lib_a-nexttowardf.$(OBJEXT) \
lib_a-nexttoward.$(OBJEXT) lib_a-nexttowardl.$(OBJEXT) \ lib_a-nexttoward.$(OBJEXT) lib_a-nexttowardl.$(OBJEXT) \
lib_a-log2l.$(OBJEXT) lib_a-log2l.$(OBJEXT) lib_a-sl_finite.$(OBJEXT)
@HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_FALSE@am__objects_4 = \ @HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_FALSE@am__objects_4 = \
@HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_FALSE@ $(am__objects_3) @HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_FALSE@ $(am__objects_3)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \ @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \
@ -173,7 +173,7 @@ am__objects_7 = atanl.lo cosl.lo sinl.lo tanl.lo tanhl.lo frexpl.lo \
lroundl.lo llroundl.lo truncl.lo remquol.lo fdiml.lo fmaxl.lo \ lroundl.lo llroundl.lo truncl.lo remquol.lo fdiml.lo fmaxl.lo \
fminl.lo fmal.lo acoshl.lo atanhl.lo remainderl.lo lgammal.lo \ fminl.lo fmal.lo acoshl.lo atanhl.lo remainderl.lo lgammal.lo \
erfl.lo erfcl.lo logbl.lo nexttowardf.lo nexttoward.lo \ erfl.lo erfcl.lo logbl.lo nexttowardf.lo nexttoward.lo \
nexttowardl.lo log2l.lo nexttowardl.lo log2l.lo sl_finite.lo
@HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_TRUE@am__objects_8 = \ @HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_TRUE@am__objects_8 = \
@HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_TRUE@ $(am__objects_7) @HAVE_LONG_DOUBLE_TRUE@@USE_LIBTOOL_TRUE@ $(am__objects_7)
@USE_LIBTOOL_TRUE@am_libcommon_la_OBJECTS = $(am__objects_5) \ @USE_LIBTOOL_TRUE@am_libcommon_la_OBJECTS = $(am__objects_5) \
@ -360,7 +360,8 @@ lsrc = atanl.c cosl.c sinl.c tanl.c tanhl.c frexpl.c modfl.c ceill.c fabsl.c \
scalbnl.c exp2l.c scalblnl.c tgammal.c nearbyintl.c lrintl.c llrintl.c \ scalbnl.c exp2l.c scalblnl.c tgammal.c nearbyintl.c lrintl.c llrintl.c \
roundl.c lroundl.c llroundl.c truncl.c remquol.c fdiml.c fmaxl.c fminl.c \ roundl.c lroundl.c llroundl.c truncl.c remquol.c fdiml.c fmaxl.c fminl.c \
fmal.c acoshl.c atanhl.c remainderl.c lgammal.c erfl.c erfcl.c \ fmal.c acoshl.c atanhl.c remainderl.c lgammal.c erfl.c erfcl.c \
logbl.c nexttowardf.c nexttoward.c nexttowardl.c log2l.c logbl.c nexttowardf.c nexttoward.c nexttowardl.c log2l.c \
sl_finite.c
libcommon_la_LDFLAGS = -Xcompiler -nostdlib libcommon_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libcommon.la @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libcommon.la
@ -1238,6 +1239,12 @@ lib_a-log2l.o: log2l.c
lib_a-log2l.obj: log2l.c lib_a-log2l.obj: log2l.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-log2l.obj `if test -f 'log2l.c'; then $(CYGPATH_W) 'log2l.c'; else $(CYGPATH_W) '$(srcdir)/log2l.c'; fi` $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-log2l.obj `if test -f 'log2l.c'; then $(CYGPATH_W) 'log2l.c'; else $(CYGPATH_W) '$(srcdir)/log2l.c'; fi`
lib_a-sl_finite.o: sl_finite.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sl_finite.o `test -f 'sl_finite.c' || echo '$(srcdir)/'`sl_finite.c
lib_a-sl_finite.obj: sl_finite.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sl_finite.obj `if test -f 'sl_finite.c'; then $(CYGPATH_W) 'sl_finite.c'; else $(CYGPATH_W) '$(srcdir)/sl_finite.c'; fi`
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo

View File

@ -146,6 +146,8 @@ extern double scalb __P((double, double));
#endif #endif
extern double significand __P((double)); extern double significand __P((double));
extern long double __ieee754_hypotl __P((long double, long double));
/* ieee style elementary functions */ /* ieee style elementary functions */
extern double __ieee754_sqrt __P((double)); extern double __ieee754_sqrt __P((double));
extern double __ieee754_acos __P((double)); extern double __ieee754_acos __P((double));

View File

@ -29,14 +29,61 @@ POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <math.h> #include <math.h>
#include "local.h" #include <errno.h>
#include "fdlibm.h"
/* On platforms where long double is as wide as double. */
#ifdef _LDBL_EQ_DBL
long double long double
hypotl (long double x, long double y) hypotl (long double x, long double y)
{ {
return hypot(x, y); #ifdef _LDBL_EQ_DBL
}
#endif
/* On platforms where long double is as wide as double. */
return hypot(x, y);
#else
long double z;
z = __ieee754_hypotl (x, y);
if (_LIB_VERSION == _IEEE_)
return z;
if ((! finitel (z)) && finitel (x) && finitel (y))
{
/* hypot (finite, finite) overflow. */
struct exception exc;
exc.type = OVERFLOW;
exc.name = "hypotl";
exc.err = 0;
exc.arg1 = x;
exc.arg2 = y;
if (_LIB_VERSION == _SVID_)
exc.retval = HUGE;
else
{
#ifndef HUGE_VAL
#define HUGE_VAL inf
double inf = 0.0;
SET_HIGH_WORD (inf, 0x7ff00000); /* Set inf to infinite. */
#endif
exc.retval = HUGE_VAL;
}
if (_LIB_VERSION == _POSIX_)
errno = ERANGE;
else if (! matherr (& exc))
errno = ERANGE;
if (exc.err != 0)
errno = exc.err;
return (long double) exc.retval;
}
return z;
#endif /* ! _LDBL_EQ_DBL */
}

View File

@ -0,0 +1,25 @@
/* Copyright (C) 2015 by Red Hat, Incorporated. All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
/* finitel(x) returns 1 is x is finite, else 0; */
#include <math.h>
int
finitel (long double x)
{
#ifdef _LDBL_EQ_DBL
return finite (x);
#else
/* Let the compiler do this for us.
Note - we do not know how many bits there are in a long double.
Some architectures for example have an 80-bit long double whereas
others use 128-bits. We use macros and comiler builtin functions
to avoid specific knowledge of the long double format. */
return __builtin_isinf_sign (x) == 0;
#endif
}

View File

@ -31,12 +31,165 @@ POSSIBILITY OF SUCH DAMAGE.
#include <math.h> #include <math.h>
#include "local.h" #include "local.h"
/* On platforms where long double is as wide as double. */
#ifdef _LDBL_EQ_DBL #ifdef _LDBL_EQ_DBL
/* On platforms where long double is as wide as double. */
long double long double
sqrtl (long double x) sqrtl (long double x)
{ {
return sqrt(x); return sqrt(x);
} }
#else
/* This code is based upon the version in the BSD math's library.
That code is...
*
* Copyright (c) 2007 Steven G. Kargl
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice unmodified, this list of conditions, and the following
* disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <float.h>
#include "ieeefp.h"
#ifndef LDBL_NBIT
#define LDBL_NBIT 0
#endif #endif
#ifndef LDBL_MAX_EXP
#define LDBL_MAX_EXP DBL_MAX_EXP
#endif
/* Return (x + ulp) for normal positive x. Assumes no overflow. */
static inline long double
inc (long double x)
{
union ieee_ext_u ux = { .extu_ld = x, };
if (++ux.extu_ext.ext_fracl == 0)
{
if (++ux.extu_ext.ext_frach == 0)
{
ux.extu_ext.ext_exp++;
ux.extu_ext.ext_frach |= LDBL_NBIT;
}
}
return ux.extu_ld;
}
/* Return (x - ulp) for normal positive x. Assumes no underflow. */
static inline long double
dec (long double x)
{
union ieee_ext_u ux = { .extu_ld = x, };
if (ux.extu_ext.ext_fracl-- == 0)
{
if (ux.extu_ext.ext_frach-- == LDBL_NBIT)
{
ux.extu_ext.ext_exp--;
ux.extu_ext.ext_frach |= LDBL_NBIT;
}
}
return ux.extu_ld;
}
/* This is slow, but simple and portable. */
long double
sqrtl (long double x)
{
union ieee_ext_u ux = { .extu_ld = x, };
int k, r;
long double lo, xn;
/* If x = NaN, then sqrt(x) = NaN. */
/* If x = Inf, then sqrt(x) = Inf. */
/* If x = -Inf, then sqrt(x) = NaN. */
if (ux.extu_ext.ext_exp == LDBL_MAX_EXP * 2 - 1)
return (x * x + x);
/* If x = +-0, then sqrt(x) = +-0. */
if (x == 0.0L || x == -0.0L)
return x;
/* If x < 0, then raise invalid and return NaN. */
if (ux.extu_ext.ext_sign)
return ((x - x) / (x - x));
if (ux.extu_ext.ext_exp == 0)
{
/* Adjust subnormal numbers. */
ux.extu_ld *= 0x1.0p514;
k = -514;
}
else
k = 0;
/* ux.extu_ld is a normal number, so break it into ux.extu_ld = e*2^n where
ux.extu_ld = (2*e)*2^2k for odd n and ux.extu_ld = (4*e)*2^2k for even n. */
if ((ux.extu_ext.ext_exp - EXT_EXP_BIAS) & 1)
{
/* n is even. */
k += ux.extu_ext.ext_exp - EXT_EXP_BIAS - 1; /* 2k = n - 2. */
ux.extu_ext.ext_exp = EXT_EXP_BIAS + 1; /* ux.extu_ld in [2,4). */
}
else
{
k += ux.extu_ext.ext_exp - EXT_EXP_BIAS; /* 2k = n - 1. */
ux.extu_ext.ext_exp = EXT_EXP_BIAS; /* ux.extu_ld in [1,2). */
}
/* Newton's iteration.
Split ux.extu_ld into a high and low part to achieve additional precision. */
xn = sqrt ((double) ux.extu_ld); /* 53-bit estimate of sqrtl(x). */
#if LDBL_MANT_DIG > 100
xn = (xn + (ux.extu_ld / xn)) * 0.5; /* 106-bit estimate. */
#endif
lo = ux.extu_ld;
ux.extu_ext.ext_fracl = 0; /* Zero out lower bits. */
lo = (lo - ux.extu_ld) / xn; /* Low bits divided by xn. */
xn = xn + (ux.extu_ld / xn); /* High portion of estimate. */
ux.extu_ld = xn + lo; /* Combine everything. */
ux.extu_ext.ext_exp += (k >> 1) - 1;
xn = x / ux.extu_ld; /* Chopped quotient (inexact?). */
/* For simplicity we round to nearest. */
xn = inc (xn); /* xn = xn + ulp. */
ux.extu_ld = ux.extu_ld + xn; /* Chopped sum. */
ux.extu_ext.ext_exp--;
return ux.extu_ld;
}
#endif /* ! _LDBL_EQ_DBL */

View File

@ -9,7 +9,8 @@ src = cabs.c cacos.c cacosh.c carg.c casin.c casinh.c \
cexp.c cimag.c clog.c conj.c \ cexp.c cimag.c clog.c conj.c \
cpow.c cproj.c creal.c \ cpow.c cproj.c creal.c \
csin.c csinh.c csqrt.c ctan.c ctanh.c csin.c csinh.c csqrt.c ctan.c ctanh.c
lsrc = cabsl.c creall.c cimagl.c
fsrc = cabsf.c casinf.c ccosf.c cimagf.c cprojf.c \ fsrc = cabsf.c casinf.c ccosf.c cimagf.c cprojf.c \
csqrtf.c cacosf.c casinhf.c ccoshf.c clogf.c \ csqrtf.c cacosf.c casinhf.c ccoshf.c clogf.c \
@ -21,11 +22,11 @@ libcomplex_la_LDFLAGS = -Xcompiler -nostdlib
if USE_LIBTOOL if USE_LIBTOOL
noinst_LTLIBRARIES = libcomplex.la noinst_LTLIBRARIES = libcomplex.la
libcomplex_la_SOURCES = $(src) $(fsrc) libcomplex_la_SOURCES = $(src) $(fsrc) $(lsrc)
noinst_DATA = objectlist.awk.in noinst_DATA = objectlist.awk.in
else else
noinst_LIBRARIES = lib.a noinst_LIBRARIES = lib.a
lib_a_SOURCES = $(src) $(fsrc) lib_a_SOURCES = $(src) $(fsrc) $(lsrc)
lib_a_CFLAGS = $(AM_CFLAGS) lib_a_CFLAGS = $(AM_CFLAGS)
noinst_DATA = noinst_DATA =
endif # USE_LIBTOOL endif # USE_LIBTOOL

View File

@ -79,8 +79,11 @@ am__objects_2 = lib_a-cabsf.$(OBJEXT) lib_a-casinf.$(OBJEXT) \
lib_a-cargf.$(OBJEXT) lib_a-catanhf.$(OBJEXT) \ lib_a-cargf.$(OBJEXT) lib_a-catanhf.$(OBJEXT) \
lib_a-cexpf.$(OBJEXT) lib_a-cpowf.$(OBJEXT) \ lib_a-cexpf.$(OBJEXT) lib_a-cpowf.$(OBJEXT) \
lib_a-csinhf.$(OBJEXT) lib_a-csinhf.$(OBJEXT)
am__objects_5 = lib_a-cabsl.$(OBJEXT) lib_a-creall.$(OBJEXT) \
lib_a-cimagl.$(OBJEXT)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \ @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \
@USE_LIBTOOL_FALSE@ $(am__objects_2) @USE_LIBTOOL_FALSE@ $(am__objects_2) \
@USE_LIBTOOL_FALSE@ $(am__objects_5)
lib_a_OBJECTS = $(am_lib_a_OBJECTS) lib_a_OBJECTS = $(am_lib_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES)
libcomplex_la_LIBADD = libcomplex_la_LIBADD =
@ -93,8 +96,10 @@ am__objects_4 = cabsf.lo casinf.lo ccosf.lo cimagf.lo cprojf.lo \
ctanf.lo cacoshf.lo catanf.lo cephes_subrf.lo conjf.lo \ ctanf.lo cacoshf.lo catanf.lo cephes_subrf.lo conjf.lo \
csinf.lo ctanhf.lo cargf.lo catanhf.lo cexpf.lo cpowf.lo \ csinf.lo ctanhf.lo cargf.lo catanhf.lo cexpf.lo cpowf.lo \
csinhf.lo csinhf.lo
am__objects_6 = cabsl.lo creall.lo ciamgl.lo
@USE_LIBTOOL_TRUE@am_libcomplex_la_OBJECTS = $(am__objects_3) \ @USE_LIBTOOL_TRUE@am_libcomplex_la_OBJECTS = $(am__objects_3) \
@USE_LIBTOOL_TRUE@ $(am__objects_4) @USE_LIBTOOL_TRUE@ $(am__objects_4) \
@USE_LIBTOOL_TRUE@ $(am__objects_6)
libcomplex_la_OBJECTS = $(am_libcomplex_la_OBJECTS) libcomplex_la_OBJECTS = $(am_libcomplex_la_OBJECTS)
libcomplex_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ libcomplex_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@ -249,6 +254,8 @@ src = cabs.c cacos.c cacosh.c carg.c casin.c casinh.c \
cpow.c cproj.c creal.c \ cpow.c cproj.c creal.c \
csin.c csinh.c csqrt.c ctan.c ctanh.c csin.c csinh.c csqrt.c ctan.c ctanh.c
lsrc = cabsl.c creall.c cimagl.c
fsrc = cabsf.c casinf.c ccosf.c cimagf.c cprojf.c \ fsrc = cabsf.c casinf.c ccosf.c cimagf.c cprojf.c \
csqrtf.c cacosf.c casinhf.c ccoshf.c clogf.c \ csqrtf.c cacosf.c casinhf.c ccoshf.c clogf.c \
crealf.c ctanf.c cacoshf.c catanf.c \ crealf.c ctanf.c cacoshf.c catanf.c \
@ -257,11 +264,11 @@ fsrc = cabsf.c casinf.c ccosf.c cimagf.c cprojf.c \
libcomplex_la_LDFLAGS = -Xcompiler -nostdlib libcomplex_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libcomplex.la @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libcomplex.la
@USE_LIBTOOL_TRUE@libcomplex_la_SOURCES = $(src) $(fsrc) @USE_LIBTOOL_TRUE@libcomplex_la_SOURCES = $(src) $(fsrc) $(lsrc)
@USE_LIBTOOL_FALSE@noinst_DATA = @USE_LIBTOOL_FALSE@noinst_DATA =
@USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in @USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in
@USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a @USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a
@USE_LIBTOOL_FALSE@lib_a_SOURCES = $(src) $(fsrc) @USE_LIBTOOL_FALSE@lib_a_SOURCES = $(src) $(fsrc) $(lsrc)
@USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS) @USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS)
chobj = cabs.def cacos.def cacosh.def carg.def \ chobj = cabs.def cacos.def cacosh.def carg.def \
casin.def casinh.def catan.def catanh.def \ casin.def casinh.def catan.def catanh.def \
@ -617,6 +624,27 @@ lib_a-csinhf.o: csinhf.c
lib_a-csinhf.obj: csinhf.c lib_a-csinhf.obj: csinhf.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-csinhf.obj `if test -f 'csinhf.c'; then $(CYGPATH_W) 'csinhf.c'; else $(CYGPATH_W) '$(srcdir)/csinhf.c'; fi` $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-csinhf.obj `if test -f 'csinhf.c'; then $(CYGPATH_W) 'csinhf.c'; else $(CYGPATH_W) '$(srcdir)/csinhf.c'; fi`
lib_a-cabsl.o: cabsl.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-cabsl.o `test -f 'cabsl.c' || echo '$(srcdir)/'`cabsl.c
lib_a-cabsl.obj: cabsl.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-cabsl.obj `if test -f 'cabsl.c'; then $(CYGPATH_W) 'cabsl.c'; else $(CYGPATH_W) '$(srcdir)/cabsl.c'; fi`
lib_a-creall.o: creall.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-creall.o `test -f 'creall.c' || echo '$(srcdir)/'`creall.c
lib_a-creall.obj: creall.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-creall.obj `if test -f 'creall.c'; then $(CYGPATH_W) 'creall.c'; else $(CYGPATH_W) '$(srcdir)/creall.c'; fi`
lib_a-cimagl.o: cimagl.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-cimagl.o `test -f 'cimagl.c' || echo '$(srcdir)/'`cimagl.c
lib_a-cimagl.obj: cimagl.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-cimagl.obj `if test -f 'cimagl.c'; then $(CYGPATH_W) 'cimagl.c'; else $(CYGPATH_W) '$(srcdir)/cimagl.c'; fi`
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo

View File

@ -10,17 +10,20 @@
/* /*
FUNCTION FUNCTION
<<cabs>>, <<cabsf>>---complex absolute-value <<cabs>>, <<cabsf>>, <<cabsl>>---complex absolute-value
INDEX INDEX
cabs cabs
INDEX INDEX
cabsf cabsf
INDEX
cabsl
ANSI_SYNOPSIS ANSI_SYNOPSIS
#include <complex.h> #include <complex.h>
double cabs(double complex <[z]>); double cabs(double complex <[z]>);
float cabsf(float complex <[z]>); float cabsf(float complex <[z]>);
long double cabsl(long double complex <[z]>);
DESCRIPTION DESCRIPTION
@ -28,16 +31,19 @@ DESCRIPTION
(also called norm, modulus, or magnitude) of <[z]>. (also called norm, modulus, or magnitude) of <[z]>.
<<cabsf>> is identical to <<cabs>>, except that it performs <<cabsf>> is identical to <<cabs>>, except that it performs
its calculations on <<floats complex>>. its calculations on <<float complex>>.
<<cabsl>> is identical to <<cabs>>, except that it performs
its calculations on <<long double complex>>.
RETURNS RETURNS
The cabs functions return the complex absolute value. The cabs* functions return the complex absolute value.
PORTABILITY PORTABILITY
<<cabs>> and <<cabsf>> are ISO C99 <<cabs>>, <<cabsf>> and <<cabsl>> are ISO C99
QUICKREF QUICKREF
<<cabs>> and <<cabsf>> are ISO C99 <<cabs>>, <<cabsf>> and <<cabsl>> are ISO C99
*/ */

View File

@ -0,0 +1,18 @@
/* Copyright (C) 2015 by Red Hat, Incorporated. All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
#include <complex.h>
#include <math.h>
long double
cabsl (long double complex z)
{
#ifdef _LDBL_EQ_DBL
return cabs (z);
#else
return hypotl (creall (z), cimagl (z));
#endif
}

View File

@ -10,33 +10,39 @@
/* /*
FUNCTION FUNCTION
<<cimag>>, <<cimagf>>---imaginary part <<cimag>>, <<cimagf>>, <<cimagl>>---imaginary part
INDEX INDEX
cimag cimag
INDEX INDEX
cimagf cimagf
INDEX
cimagl
ANSI_SYNOPSIS ANSI_SYNOPSIS
#include <complex.h> #include <complex.h>
double cimag(double complex <[z]>); double cimag(double complex <[z]>);
float cimagf(float complex <[z]>); float cimagf(float complex <[z]>);
long double cimagl(long double complex <[z]>);
DESCRIPTION DESCRIPTION
These functions compute the imaginary part of <[z]>. These functions compute the imaginary part of <[z]>.
<<cimagf>> is identical to <<cimag>>, except that it performs <<cimagf>> is identical to <<cimag>>, except that it performs
its calculations on <<floats complex>>. its calculations on <<float complex>>.
<<cimagl>> is identical to <<cimag>>, except that it performs
its calculations on <<long double complex>>.
RETURNS RETURNS
The cimag functions return the imaginary part value (as a real). The cimag* functions return the imaginary part value (as a real).
PORTABILITY PORTABILITY
<<cimag>> and <<cimagf>> are ISO C99 <<cimag>>, <<cimagf>> and <<cimagl>> are ISO C99
QUICKREF QUICKREF
<<cimag>> and <<cimagf>> are ISO C99 <<cimag>>, <<cimagf>> and <<cimagl>> are ISO C99
*/ */

View File

@ -0,0 +1,16 @@
/* Copyright (C) 2015 by Red Hat, Incorporated. All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
#include <complex.h>
#include "../common/fdlibm.h"
long double
cimagl (long double complex z)
{
long_double_complex w = { .z = z };
return IMAG_PART (w);
}

View File

@ -10,33 +10,39 @@
/* /*
FUNCTION FUNCTION
<<creal>>, <<crealf>>---real part <<creal>>, <<crealf>>, <<creall>>---real part
INDEX INDEX
creal creal
INDEX INDEX
crealf crealf
INDEX
creall
ANSI_SYNOPSIS ANSI_SYNOPSIS
#include <complex.h> #include <complex.h>
double creal(double complex <[z]>); double creal(double complex <[z]>);
float crealf(float complex <[z]>); float crealf(float complex <[z]>);
double long creall(long double complex <[z]>);
DESCRIPTION DESCRIPTION
These functions compute the real part of <[z]>. These functions compute the real part of <[z]>.
<<crealf>> is identical to <<creal>>, except that it performs <<crealf>> is identical to <<creal>>, except that it performs
its calculations on <<floats complex>>. its calculations on <<float complex>>.
<<creall>> is identical to <<creal>>, except that it performs
its calculations on <<long double complex>>.
RETURNS RETURNS
The creal functions return the real part value. The creal* functions return the real part value.
PORTABILITY PORTABILITY
<<creal>> and <<crealf>> are ISO C99 <<creal>>, <<crealf>> and <<creall>> are ISO C99
QUICKREF QUICKREF
<<creal>> and <<crealf>> are ISO C99 <<creal>>, <<crealf>> and <<creall>> are ISO C99
*/ */

View File

@ -0,0 +1,16 @@
/* Copyright (C) 2015 by Red Hat, Incorporated. All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
#include <complex.h>
#include "../common/fdlibm.h"
long double
creall (long double complex z)
{
long_double_complex w = { .z = z };
return (REAL_PART(w));
}

View File

@ -50,15 +50,17 @@ fsrc = kf_rem_pio2.c \
sf_tan.c sf_tanh.c \ sf_tan.c sf_tanh.c \
wf_exp2.c wf_tgamma.c wf_exp2.c wf_tgamma.c
lsrc = el_hypot.c
libmath_la_LDFLAGS = -Xcompiler -nostdlib libmath_la_LDFLAGS = -Xcompiler -nostdlib
if USE_LIBTOOL if USE_LIBTOOL
noinst_LTLIBRARIES = libmath.la noinst_LTLIBRARIES = libmath.la
libmath_la_SOURCES = $(src) $(fsrc) libmath_la_SOURCES = $(src) $(fsrc) $(lsrc)
noinst_DATA = objectlist.awk.in noinst_DATA = objectlist.awk.in
else else
noinst_LIBRARIES = lib.a noinst_LIBRARIES = lib.a
lib_a_SOURCES = $(src) $(fsrc) lib_a_SOURCES = $(src) $(fsrc) $(lsrc)
lib_a_CFLAGS = $(AM_CFLAGS) lib_a_CFLAGS = $(AM_CFLAGS)
noinst_DATA = noinst_DATA =
endif # USE_LIBTOOL endif # USE_LIBTOOL

View File

@ -138,8 +138,10 @@ am__objects_2 = lib_a-kf_rem_pio2.$(OBJEXT) lib_a-kf_cos.$(OBJEXT) \
lib_a-sf_signif.$(OBJEXT) lib_a-sf_sin.$(OBJEXT) \ lib_a-sf_signif.$(OBJEXT) lib_a-sf_sin.$(OBJEXT) \
lib_a-sf_tan.$(OBJEXT) lib_a-sf_tanh.$(OBJEXT) \ lib_a-sf_tan.$(OBJEXT) lib_a-sf_tanh.$(OBJEXT) \
lib_a-wf_exp2.$(OBJEXT) lib_a-wf_tgamma.$(OBJEXT) lib_a-wf_exp2.$(OBJEXT) lib_a-wf_tgamma.$(OBJEXT)
am__objects_5 = lib_a-el_hypot.$(OBJEXT)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \ @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) \
@USE_LIBTOOL_FALSE@ $(am__objects_2) @USE_LIBTOOL_FALSE@ $(am__objects_2) \
@USE_LIBTOOL_FALSE@ $(am__objects_5)
lib_a_OBJECTS = $(am_lib_a_OBJECTS) lib_a_OBJECTS = $(am_lib_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES)
libmath_la_LIBADD = libmath_la_LIBADD =
@ -169,8 +171,10 @@ am__objects_4 = kf_rem_pio2.lo kf_cos.lo kf_sin.lo kf_tan.lo \
sf_cos.lo sf_erf.lo sf_fabs.lo sf_floor.lo sf_frexp.lo \ sf_cos.lo sf_erf.lo sf_fabs.lo sf_floor.lo sf_frexp.lo \
sf_ldexp.lo sf_signif.lo sf_sin.lo sf_tan.lo sf_tanh.lo \ sf_ldexp.lo sf_signif.lo sf_sin.lo sf_tan.lo sf_tanh.lo \
wf_exp2.lo wf_tgamma.lo wf_exp2.lo wf_tgamma.lo
am__objects_6 = el_hypot.lo
@USE_LIBTOOL_TRUE@am_libmath_la_OBJECTS = $(am__objects_3) \ @USE_LIBTOOL_TRUE@am_libmath_la_OBJECTS = $(am__objects_3) \
@USE_LIBTOOL_TRUE@ $(am__objects_4) @USE_LIBTOOL_TRUE@ $(am__objects_4) \
@USE_LIBTOOL_TRUE@ $(am__objects_6)
libmath_la_OBJECTS = $(am_libmath_la_OBJECTS) libmath_la_OBJECTS = $(am_libmath_la_OBJECTS)
libmath_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ libmath_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@ -372,13 +376,15 @@ fsrc = kf_rem_pio2.c \
sf_tan.c sf_tanh.c \ sf_tan.c sf_tanh.c \
wf_exp2.c wf_tgamma.c wf_exp2.c wf_tgamma.c
lsrc = el_hypot.c
libmath_la_LDFLAGS = -Xcompiler -nostdlib libmath_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libmath.la @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libmath.la
@USE_LIBTOOL_TRUE@libmath_la_SOURCES = $(src) $(fsrc) @USE_LIBTOOL_TRUE@libmath_la_SOURCES = $(src) $(fsrc) $(lsrc)
@USE_LIBTOOL_FALSE@noinst_DATA = @USE_LIBTOOL_FALSE@noinst_DATA =
@USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in @USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in
@USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a @USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a
@USE_LIBTOOL_FALSE@lib_a_SOURCES = $(src) $(fsrc) @USE_LIBTOOL_FALSE@lib_a_SOURCES = $(src) $(fsrc) $(lsrc)
@USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS) @USE_LIBTOOL_FALSE@lib_a_CFLAGS = $(AM_CFLAGS)
chobj = w_acos.def w_acosh.def w_asin.def s_asinh.def \ chobj = w_acos.def w_acosh.def w_asin.def s_asinh.def \
s_atan.def w_atan2.def w_atanh.def w_j0.def \ s_atan.def w_atan2.def w_atanh.def w_j0.def \
@ -1260,6 +1266,12 @@ lib_a-wf_tgamma.o: wf_tgamma.c
lib_a-wf_tgamma.obj: wf_tgamma.c lib_a-wf_tgamma.obj: wf_tgamma.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-wf_tgamma.obj `if test -f 'wf_tgamma.c'; then $(CYGPATH_W) 'wf_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/wf_tgamma.c'; fi` $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-wf_tgamma.obj `if test -f 'wf_tgamma.c'; then $(CYGPATH_W) 'wf_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/wf_tgamma.c'; fi`
lib_a-el_hypot.o: el_hypot.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-el_hypot.o `test -f 'el_hypot.c' || echo '$(srcdir)/'`el_hypot.c
lib_a-el_hypot.obj: el_hypot.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-el_hypot.obj `if test -f 'el_hypot.c'; then $(CYGPATH_W) 'el_hypot.c'; else $(CYGPATH_W) '$(srcdir)/el_hypot.c'; fi`
mostlyclean-libtool: mostlyclean-libtool:
-rm -f *.lo -rm -f *.lo

View File

@ -0,0 +1,18 @@
/* Copyright (C) 2015 by Red Hat, Incorporated. All rights reserved.
*
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
#include "fdlibm.h"
long double
__ieee754_hypotl (long double x, long double y)
{
#ifdef _LDBL_EQ_DBL
return __ieee754_hypot (x, y);
#else
/* Keep it simple for now... */
return sqrtl ((x * x) + (y * y));
#endif
}