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:
parent
db004c5d7a
commit
b9e7cd9a84
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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));
|
||||||
|
@ -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 */
|
||||||
|
}
|
||||||
|
25
newlib/libm/common/sl_finite.c
Normal file
25
newlib/libm/common/sl_finite.c
Normal 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
|
||||||
|
}
|
||||||
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
18
newlib/libm/complex/cabsl.c
Normal file
18
newlib/libm/complex/cabsl.c
Normal 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
|
||||||
|
}
|
@ -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
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
16
newlib/libm/complex/cimagl.c
Normal file
16
newlib/libm/complex/cimagl.c
Normal 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);
|
||||||
|
}
|
@ -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
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
16
newlib/libm/complex/creall.c
Normal file
16
newlib/libm/complex/creall.c
Normal 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));
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
18
newlib/libm/math/el_hypot.c
Normal file
18
newlib/libm/math/el_hypot.c
Normal 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
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user