2007-12-19 Dave Korn <dave.korn@artimi.com>
Jeff Johnston <jjohnstn@redhhat.com> * libc/include/_ansi.h: Add _LONG_LONG definition. * libc/include/math.h (llrint, llrintf, rintl, lrintl, llrintl): Add prototypes. * libc/machine/i386/machine/fastmath.h: Add support for new i386 fast math versions of rint, lrint, and llrint family functions. * libm/machine/i386/Makefile.am: Add new files. * libm/machine/i386/Makefile.in: Regenerated. * libm/machine/i386/f_llrint.c, libm/machine/i386/f_lrint.c, libm/machine/i386/f_rint.c, libm/machine/i386/f_llrintf.c, libm/machine/i386/f_lrintf.c, libm/machine/i386/f_rintf.c, libm/machine/i386/f_llrintl.c, libm/machine/i386/f_lrintl.c, libm/machine/i386/f_rintl.c: New files with fast math implementations.
This commit is contained in:
		| @@ -1,3 +1,19 @@ | |||||||
|  | 2007-12-19  Dave Korn  <dave.korn@artimi.com> | ||||||
|  | 	    Jeff Johnston  <jjohnstn@redhhat.com> | ||||||
|  |  | ||||||
|  | 	* libc/include/_ansi.h: Add _LONG_LONG definition. | ||||||
|  | 	* libc/include/math.h (llrint, llrintf, rintl, lrintl, llrintl): Add | ||||||
|  | 	prototypes. | ||||||
|  | 	* libc/machine/i386/machine/fastmath.h: Add support for new i386 | ||||||
|  | 	fast math versions of rint, lrint, and llrint family functions. | ||||||
|  | 	* libm/machine/i386/Makefile.am: Add new files. | ||||||
|  | 	* libm/machine/i386/Makefile.in: Regenerated. | ||||||
|  | 	* libm/machine/i386/f_llrint.c, libm/machine/i386/f_lrint.c, | ||||||
|  | 	libm/machine/i386/f_rint.c, libm/machine/i386/f_llrintf.c, | ||||||
|  | 	libm/machine/i386/f_lrintf.c, libm/machine/i386/f_rintf.c, | ||||||
|  | 	libm/machine/i386/f_llrintl.c, libm/machine/i386/f_lrintl.c, | ||||||
|  | 	libm/machine/i386/f_rintl.c:  New files with fast math implementations. | ||||||
|  |  | ||||||
| 2007-12-19  Jeff Johnston  <jjohnstn@redhat.com> | 2007-12-19  Jeff Johnston  <jjohnstn@redhat.com> | ||||||
|  |  | ||||||
| 	* libc/include/sys/features.h: Add checks for C90 compilers using | 	* libc/include/sys/features.h: Add checks for C90 compilers using | ||||||
|   | |||||||
| @@ -45,6 +45,9 @@ | |||||||
| #ifndef _LONG_DOUBLE | #ifndef _LONG_DOUBLE | ||||||
| #define _LONG_DOUBLE long double | #define _LONG_DOUBLE long double | ||||||
| #endif | #endif | ||||||
|  | #ifndef _LONG_LONG | ||||||
|  | #define _LONG_LONG long long | ||||||
|  | #endif | ||||||
| #ifndef _PARAMS | #ifndef _PARAMS | ||||||
| #define _PARAMS(paramlist)		paramlist | #define _PARAMS(paramlist)		paramlist | ||||||
| #endif | #endif | ||||||
| @@ -62,6 +65,7 @@ | |||||||
| #define	_DEFUN_VOID(name)		name() | #define	_DEFUN_VOID(name)		name() | ||||||
| #define _CAST_VOID | #define _CAST_VOID | ||||||
| #define _LONG_DOUBLE double | #define _LONG_DOUBLE double | ||||||
|  | #define _LONG_LONG long | ||||||
| #ifndef _PARAMS | #ifndef _PARAMS | ||||||
| #define _PARAMS(paramlist)		() | #define _PARAMS(paramlist)		() | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -226,6 +226,7 @@ extern double scalbln _PARAMS((double, long int)); | |||||||
| extern double tgamma _PARAMS((double)); | extern double tgamma _PARAMS((double)); | ||||||
| extern double nearbyint _PARAMS((double)); | extern double nearbyint _PARAMS((double)); | ||||||
| extern long int lrint _PARAMS((double)); | extern long int lrint _PARAMS((double)); | ||||||
|  | extern _LONG_LONG int llrint _PARAMS((double)); | ||||||
| extern double round _PARAMS((double)); | extern double round _PARAMS((double)); | ||||||
| extern long int lround _PARAMS((double)); | extern long int lround _PARAMS((double)); | ||||||
| extern double trunc _PARAMS((double)); | extern double trunc _PARAMS((double)); | ||||||
| @@ -292,6 +293,7 @@ extern float scalblnf _PARAMS((float, long int)); | |||||||
| extern float tgammaf _PARAMS((float)); | extern float tgammaf _PARAMS((float)); | ||||||
| extern float nearbyintf _PARAMS((float)); | extern float nearbyintf _PARAMS((float)); | ||||||
| extern long int lrintf _PARAMS((float)); | extern long int lrintf _PARAMS((float)); | ||||||
|  | extern _LONG_LONG llrintf _PARAMS((float)); | ||||||
| extern float roundf _PARAMS((float)); | extern float roundf _PARAMS((float)); | ||||||
| extern long int lroundf _PARAMS((float)); | extern long int lroundf _PARAMS((float)); | ||||||
| extern float truncf _PARAMS((float)); | extern float truncf _PARAMS((float)); | ||||||
| @@ -330,6 +332,11 @@ extern float erfcf _PARAMS((float)); | |||||||
| extern float hypotf _PARAMS((float, float)); | extern float hypotf _PARAMS((float, float)); | ||||||
| #endif /* ! defined (_REENT_ONLY) */ | #endif /* ! defined (_REENT_ONLY) */ | ||||||
|  |  | ||||||
|  | /* Other long double precision functions.  */ | ||||||
|  | extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE)); | ||||||
|  | extern long int lrintl _PARAMS((_LONG_DOUBLE)); | ||||||
|  | extern _LONG_LONG llrintl _PARAMS((_LONG_DOUBLE)); | ||||||
|  |  | ||||||
| #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ | #endif /* !defined (__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L */ | ||||||
|  |  | ||||||
| #if !defined (__STRICT_ANSI__) || defined(__cplusplus) | #if !defined (__STRICT_ANSI__) || defined(__cplusplus) | ||||||
|   | |||||||
| @@ -26,6 +26,7 @@ __extension__ double tan(double) | |||||||
|  |  | ||||||
| #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L | #if !defined(__STRICT_ANSI__) || defined(__cplusplus) || __STDC_VERSION__ >= 199901L | ||||||
|  |  | ||||||
|  |  | ||||||
| __extension__ float atan2f(float, float) | __extension__ float atan2f(float, float) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_atan2f"); |   __asm__(__U_L_PREFIX__ "_f_atan2f"); | ||||||
| __extension__ float expf(float) | __extension__ float expf(float) | ||||||
| @@ -34,12 +35,30 @@ __extension__ float frexpf(float, int*) | |||||||
|   __asm__(__U_L_PREFIX__ "_f_frexpf"); |   __asm__(__U_L_PREFIX__ "_f_frexpf"); | ||||||
| __extension__ float ldexpf(float, int) | __extension__ float ldexpf(float, int) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_ldexpf"); |   __asm__(__U_L_PREFIX__ "_f_ldexpf"); | ||||||
|  | __extension__ long long llrint(double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_llrint"); | ||||||
|  | __extension__ long long llrintf(float) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_llrintf"); | ||||||
|  | __extension__ long long llrintl(long double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_llrintl"); | ||||||
| __extension__ float logf(float) | __extension__ float logf(float) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_logf"); |   __asm__(__U_L_PREFIX__ "_f_logf"); | ||||||
| __extension__ float log10f(float) | __extension__ float log10f(float) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_log10f"); |   __asm__(__U_L_PREFIX__ "_f_log10f"); | ||||||
|  | __extension__ long lrint(double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_lrint"); | ||||||
|  | __extension__ long lrintf(float) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_lrintf"); | ||||||
|  | __extension__ long lrintl(long double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_lrintl"); | ||||||
| __extension__ float powf(float, float) | __extension__ float powf(float, float) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_powf"); |   __asm__(__U_L_PREFIX__ "_f_powf"); | ||||||
|  | __extension__ double rint(double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_rint"); | ||||||
|  | __extension__ float rintf(float) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_rintf"); | ||||||
|  | __extension__ long double rintl(long double) | ||||||
|  |   __asm__(__U_L_PREFIX__ "_f_rintl"); | ||||||
| __extension__ float tanf(float) | __extension__ float tanf(float) | ||||||
|   __asm__(__U_L_PREFIX__ "_f_tanf"); |   __asm__(__U_L_PREFIX__ "_f_tanf"); | ||||||
| #endif | #endif | ||||||
| @@ -54,14 +73,6 @@ double EXFUN(_f_log,(double)); | |||||||
| double EXFUN(_f_log10,(double)); | double EXFUN(_f_log10,(double)); | ||||||
| double EXFUN(_f_pow,(double, double)); | double EXFUN(_f_pow,(double, double)); | ||||||
|  |  | ||||||
| float EXFUN(_f_atan2f,(float, float)); |  | ||||||
| float EXFUN(_f_expf,(float)); |  | ||||||
| float EXFUN(_f_frexpf,(float, int*)); |  | ||||||
| float EXFUN(_f_ldexpf,(float, int)); |  | ||||||
| float EXFUN(_f_logf,(float)); |  | ||||||
| float EXFUN(_f_log10f,(float)); |  | ||||||
| float EXFUN(_f_powf,(float, float)); |  | ||||||
|  |  | ||||||
| #define atan2(__y,__x)	_f_atan2((__y),(__x)) | #define atan2(__y,__x)	_f_atan2((__y),(__x)) | ||||||
| #define exp(__x)	_f_exp(__x) | #define exp(__x)	_f_exp(__x) | ||||||
| #define frexp(__x,__p)	_f_frexp((__x),(__p)) | #define frexp(__x,__p)	_f_frexp((__x),(__p)) | ||||||
| @@ -71,13 +82,40 @@ float EXFUN(_f_powf,(float, float)); | |||||||
| #define pow(__x,__y)	_f_pow((__x),(__y)) | #define pow(__x,__y)	_f_pow((__x),(__y)) | ||||||
|  |  | ||||||
| #ifndef __STRICT_ANSI__ | #ifndef __STRICT_ANSI__ | ||||||
|  |  | ||||||
|  | float EXFUN(_f_atan2f,(float, float)); | ||||||
|  | float EXFUN(_f_expf,(float)); | ||||||
|  | float EXFUN(_f_frexpf,(float, int*)); | ||||||
|  | float EXFUN(_f_ldexpf,(float, int)); | ||||||
|  | long long EXFUN(_f_llrint,(double)); | ||||||
|  | long long EXFUN(_f_llrintf,(float)); | ||||||
|  | long long EXFUN(_f_llrintl,(long double)); | ||||||
|  | float EXFUN(_f_logf,(float)); | ||||||
|  | float EXFUN(_f_log10f,(float)); | ||||||
|  | long EXFUN(_f_lrint,(double)); | ||||||
|  | long EXFUN(_f_lrintf,(float)); | ||||||
|  | long EXFUN(_f_lrintl,(long double)); | ||||||
|  | float EXFUN(_f_powf,(float, float)); | ||||||
|  | float EXFUN(_f_rint,(double)); | ||||||
|  | double EXFUN(_f_rintf,(float)); | ||||||
|  | long double EXFUN(_f_rintl,(long double)); | ||||||
|  |  | ||||||
| #define atan2f(__y,__x)	_f_atan2f((__y),(__x)) | #define atan2f(__y,__x)	_f_atan2f((__y),(__x)) | ||||||
| #define expf(__x)	_f_expf(__x) | #define expf(__x)	_f_expf(__x) | ||||||
| #define frexpf(__x,__p)	_f_frexpf((__x),(__p)) | #define frexpf(__x,__p)	_f_frexpf((__x),(__p)) | ||||||
| #define ldexpf(__x,__e)	_f_ldexpf((__x),(__e)) | #define ldexpf(__x,__e)	_f_ldexpf((__x),(__e)) | ||||||
|  | #define llrint(__x)	_f_llrint((__x)) | ||||||
|  | #define llrintf(__x)	_f_llrintf((__x)) | ||||||
|  | #define llrintl(__x)	_f_llrintl((__x)) | ||||||
| #define logf(__x)	_f_logf(__x) | #define logf(__x)	_f_logf(__x) | ||||||
| #define log10f(__x)	_f_log10f(__x) | #define log10f(__x)	_f_log10f(__x) | ||||||
|  | #define lrint(__x)	_f_lrint((__x)) | ||||||
|  | #define lrintf(__x)	_f_lrintf((__x)) | ||||||
|  | #define lrintl(__x)	_f_lrintl((__x)) | ||||||
| #define powf(__x,y)	_f_powf((__x),(__y)) | #define powf(__x,y)	_f_powf((__x),(__y)) | ||||||
|  | #define rint(__x)	_f_rint((__x)) | ||||||
|  | #define rintf(__x)	_f_rintf((__x)) | ||||||
|  | #define rintl(__x)	_f_rintl((__x)) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #endif /* GCC */ | #endif /* GCC */ | ||||||
|   | |||||||
| @@ -8,8 +8,12 @@ AM_CCASFLAGS = $(INCLUDES) | |||||||
|  |  | ||||||
| LIB_SOURCES = \ | LIB_SOURCES = \ | ||||||
| 	f_atan2.S f_atan2f.S f_exp.c f_expf.c \ | 	f_atan2.S f_atan2f.S f_exp.c f_expf.c \ | ||||||
| 	f_frexp.S f_frexpf.S f_log.S f_logf.S f_log10.S f_log10f.S \ | 	f_frexp.S f_frexpf.S f_llrint.c f_llrintf.c f_llrintl.c \ | ||||||
| 	f_ldexp.S f_ldexpf.S f_pow.c f_powf.c f_tan.S f_tanf.S f_math.h i386mach.h | 	f_log.S f_logf.S f_log10.S f_log10f.S \ | ||||||
|  | 	f_ldexp.S f_ldexpf.S f_lrint.c f_lrintf.c f_lrintl.c \ | ||||||
|  | 	f_pow.c f_powf.c f_rint.c f_rintf.c f_rintl.c \ | ||||||
|  | 	f_tan.S f_tanf.S f_math.h \ | ||||||
|  | 	i386mach.h  | ||||||
|  |  | ||||||
| libi386_la_LDFLAGS = -Xcompiler -nostdlib | libi386_la_LDFLAGS = -Xcompiler -nostdlib | ||||||
|  |  | ||||||
| @@ -29,3 +33,4 @@ include $(srcdir)/../../../Makefile.shared | |||||||
|  |  | ||||||
| ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. | ACLOCAL_AMFLAGS = -I ../../.. -I ../../../.. | ||||||
| CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host | CONFIG_STATUS_DEPENDENCIES = $(newlib_basedir)/configure.host | ||||||
|  |  | ||||||
|   | |||||||
| @@ -45,7 +45,11 @@ DIST_COMMON = $(srcdir)/../../../Makefile.shared \ | |||||||
| 	$(am__configure_deps) $(srcdir)/../../../../mkinstalldirs \ | 	$(am__configure_deps) $(srcdir)/../../../../mkinstalldirs \ | ||||||
| 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
| 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
| 	$(srcdir)/../../../../ltmain.sh \ | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
|  | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
|  | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
|  | 	$(srcdir)/../../../../compile $(srcdir)/../../../../compile \ | ||||||
|  | 	$(srcdir)/../../../../compile $(srcdir)/../../../../ltmain.sh \ | ||||||
| 	$(srcdir)/../../../../config.guess \ | 	$(srcdir)/../../../../config.guess \ | ||||||
| 	$(srcdir)/../../../../config.sub | 	$(srcdir)/../../../../config.sub | ||||||
| subdir = . | subdir = . | ||||||
| @@ -68,18 +72,25 @@ lib_a_LIBADD = | |||||||
| am__objects_1 = lib_a-f_atan2.$(OBJEXT) lib_a-f_atan2f.$(OBJEXT) \ | am__objects_1 = lib_a-f_atan2.$(OBJEXT) lib_a-f_atan2f.$(OBJEXT) \ | ||||||
| 	lib_a-f_exp.$(OBJEXT) lib_a-f_expf.$(OBJEXT) \ | 	lib_a-f_exp.$(OBJEXT) lib_a-f_expf.$(OBJEXT) \ | ||||||
| 	lib_a-f_frexp.$(OBJEXT) lib_a-f_frexpf.$(OBJEXT) \ | 	lib_a-f_frexp.$(OBJEXT) lib_a-f_frexpf.$(OBJEXT) \ | ||||||
| 	lib_a-f_log.$(OBJEXT) lib_a-f_logf.$(OBJEXT) \ | 	lib_a-f_llrint.$(OBJEXT) lib_a-f_llrintf.$(OBJEXT) \ | ||||||
| 	lib_a-f_log10.$(OBJEXT) lib_a-f_log10f.$(OBJEXT) \ | 	lib_a-f_llrintl.$(OBJEXT) lib_a-f_log.$(OBJEXT) \ | ||||||
| 	lib_a-f_ldexp.$(OBJEXT) lib_a-f_ldexpf.$(OBJEXT) \ | 	lib_a-f_logf.$(OBJEXT) lib_a-f_log10.$(OBJEXT) \ | ||||||
|  | 	lib_a-f_log10f.$(OBJEXT) lib_a-f_ldexp.$(OBJEXT) \ | ||||||
|  | 	lib_a-f_ldexpf.$(OBJEXT) lib_a-f_lrint.$(OBJEXT) \ | ||||||
|  | 	lib_a-f_lrintf.$(OBJEXT) lib_a-f_lrintl.$(OBJEXT) \ | ||||||
| 	lib_a-f_pow.$(OBJEXT) lib_a-f_powf.$(OBJEXT) \ | 	lib_a-f_pow.$(OBJEXT) lib_a-f_powf.$(OBJEXT) \ | ||||||
| 	lib_a-f_tan.$(OBJEXT) lib_a-f_tanf.$(OBJEXT) | 	lib_a-f_rint.$(OBJEXT) lib_a-f_rintf.$(OBJEXT) \ | ||||||
|  | 	lib_a-f_rintl.$(OBJEXT) lib_a-f_tan.$(OBJEXT) \ | ||||||
|  | 	lib_a-f_tanf.$(OBJEXT) | ||||||
| @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) | @USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1) | ||||||
| lib_a_OBJECTS = $(am_lib_a_OBJECTS) | lib_a_OBJECTS = $(am_lib_a_OBJECTS) | ||||||
| LTLIBRARIES = $(noinst_LTLIBRARIES) | LTLIBRARIES = $(noinst_LTLIBRARIES) | ||||||
| libi386_la_LIBADD = | libi386_la_LIBADD = | ||||||
| am__objects_2 = f_atan2.lo f_atan2f.lo f_exp.lo f_expf.lo f_frexp.lo \ | am__objects_2 = f_atan2.lo f_atan2f.lo f_exp.lo f_expf.lo f_frexp.lo \ | ||||||
| 	f_frexpf.lo f_log.lo f_logf.lo f_log10.lo f_log10f.lo \ | 	f_frexpf.lo f_llrint.lo f_llrintf.lo f_llrintl.lo f_log.lo \ | ||||||
| 	f_ldexp.lo f_ldexpf.lo f_pow.lo f_powf.lo f_tan.lo f_tanf.lo | 	f_logf.lo f_log10.lo f_log10f.lo f_ldexp.lo f_ldexpf.lo \ | ||||||
|  | 	f_lrint.lo f_lrintf.lo f_lrintl.lo f_pow.lo f_powf.lo \ | ||||||
|  | 	f_rint.lo f_rintf.lo f_rintl.lo f_tan.lo f_tanf.lo | ||||||
| @USE_LIBTOOL_TRUE@am_libi386_la_OBJECTS = $(am__objects_2) | @USE_LIBTOOL_TRUE@am_libi386_la_OBJECTS = $(am__objects_2) | ||||||
| libi386_la_OBJECTS = $(am_libi386_la_OBJECTS) | libi386_la_OBJECTS = $(am_libi386_la_OBJECTS) | ||||||
| @USE_LIBTOOL_TRUE@am_libi386_la_rpath = | @USE_LIBTOOL_TRUE@am_libi386_la_rpath = | ||||||
| @@ -177,15 +188,8 @@ STRIP = @STRIP@ | |||||||
| USE_LIBTOOL_FALSE = @USE_LIBTOOL_FALSE@ | USE_LIBTOOL_FALSE = @USE_LIBTOOL_FALSE@ | ||||||
| USE_LIBTOOL_TRUE = @USE_LIBTOOL_TRUE@ | USE_LIBTOOL_TRUE = @USE_LIBTOOL_TRUE@ | ||||||
| VERSION = @VERSION@ | VERSION = @VERSION@ | ||||||
| ac_ct_AR = @ac_ct_AR@ |  | ||||||
| ac_ct_AS = @ac_ct_AS@ |  | ||||||
| ac_ct_CC = @ac_ct_CC@ | ac_ct_CC = @ac_ct_CC@ | ||||||
| ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ |  | ||||||
| ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ | ||||||
| ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ |  | ||||||
| ac_ct_RANLIB = @ac_ct_RANLIB@ |  | ||||||
| ac_ct_READELF = @ac_ct_READELF@ |  | ||||||
| ac_ct_STRIP = @ac_ct_STRIP@ |  | ||||||
| aext = @aext@ | aext = @aext@ | ||||||
| am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ | am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ | ||||||
| am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ | am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ | ||||||
| @@ -201,18 +205,23 @@ build_cpu = @build_cpu@ | |||||||
| build_os = @build_os@ | build_os = @build_os@ | ||||||
| build_vendor = @build_vendor@ | build_vendor = @build_vendor@ | ||||||
| datadir = @datadir@ | datadir = @datadir@ | ||||||
|  | datarootdir = @datarootdir@ | ||||||
|  | docdir = @docdir@ | ||||||
|  | dvidir = @dvidir@ | ||||||
| exec_prefix = @exec_prefix@ | exec_prefix = @exec_prefix@ | ||||||
| host = @host@ | host = @host@ | ||||||
| host_alias = @host_alias@ | host_alias = @host_alias@ | ||||||
| host_cpu = @host_cpu@ | host_cpu = @host_cpu@ | ||||||
| host_os = @host_os@ | host_os = @host_os@ | ||||||
| host_vendor = @host_vendor@ | host_vendor = @host_vendor@ | ||||||
|  | htmldir = @htmldir@ | ||||||
| includedir = @includedir@ | includedir = @includedir@ | ||||||
| infodir = @infodir@ | infodir = @infodir@ | ||||||
| install_sh = @install_sh@ | install_sh = @install_sh@ | ||||||
| libdir = @libdir@ | libdir = @libdir@ | ||||||
| libexecdir = @libexecdir@ | libexecdir = @libexecdir@ | ||||||
| libm_machine_dir = @libm_machine_dir@ | libm_machine_dir = @libm_machine_dir@ | ||||||
|  | localedir = @localedir@ | ||||||
| localstatedir = @localstatedir@ | localstatedir = @localstatedir@ | ||||||
| lpfx = @lpfx@ | lpfx = @lpfx@ | ||||||
| lt_ECHO = @lt_ECHO@ | lt_ECHO = @lt_ECHO@ | ||||||
| @@ -222,8 +231,10 @@ mkdir_p = @mkdir_p@ | |||||||
| newlib_basedir = @newlib_basedir@ | newlib_basedir = @newlib_basedir@ | ||||||
| oext = @oext@ | oext = @oext@ | ||||||
| oldincludedir = @oldincludedir@ | oldincludedir = @oldincludedir@ | ||||||
|  | pdfdir = @pdfdir@ | ||||||
| prefix = @prefix@ | prefix = @prefix@ | ||||||
| program_transform_name = @program_transform_name@ | program_transform_name = @program_transform_name@ | ||||||
|  | psdir = @psdir@ | ||||||
| sbindir = @sbindir@ | sbindir = @sbindir@ | ||||||
| sharedstatedir = @sharedstatedir@ | sharedstatedir = @sharedstatedir@ | ||||||
| sys_dir = @sys_dir@ | sys_dir = @sys_dir@ | ||||||
| @@ -234,8 +245,12 @@ INCLUDES = -I $(newlib_basedir)/../newlib/libm/common $(NEWLIB_CFLAGS) $(CROSS_C | |||||||
| AM_CCASFLAGS = $(INCLUDES) | AM_CCASFLAGS = $(INCLUDES) | ||||||
| LIB_SOURCES = \ | LIB_SOURCES = \ | ||||||
| 	f_atan2.S f_atan2f.S f_exp.c f_expf.c \ | 	f_atan2.S f_atan2f.S f_exp.c f_expf.c \ | ||||||
| 	f_frexp.S f_frexpf.S f_log.S f_logf.S f_log10.S f_log10f.S \ | 	f_frexp.S f_frexpf.S f_llrint.c f_llrintf.c f_llrintl.c \ | ||||||
| 	f_ldexp.S f_ldexpf.S f_pow.c f_powf.c f_tan.S f_tanf.S f_math.h i386mach.h | 	f_log.S f_logf.S f_log10.S f_log10f.S \ | ||||||
|  | 	f_ldexp.S f_ldexpf.S f_lrint.c f_lrintf.c f_lrintl.c \ | ||||||
|  | 	f_pow.c f_powf.c f_rint.c f_rintf.c f_rintl.c \ | ||||||
|  | 	f_tan.S f_tanf.S f_math.h \ | ||||||
|  | 	i386mach.h  | ||||||
|  |  | ||||||
| libi386_la_LDFLAGS = -Xcompiler -nostdlib | libi386_la_LDFLAGS = -Xcompiler -nostdlib | ||||||
| @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libi386.la | @USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libi386.la | ||||||
| @@ -412,6 +427,42 @@ lib_a-f_expf.o: f_expf.c | |||||||
| lib_a-f_expf.obj: f_expf.c | lib_a-f_expf.obj: f_expf.c | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_expf.obj `if test -f 'f_expf.c'; then $(CYGPATH_W) 'f_expf.c'; else $(CYGPATH_W) '$(srcdir)/f_expf.c'; fi` | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_expf.obj `if test -f 'f_expf.c'; then $(CYGPATH_W) 'f_expf.c'; else $(CYGPATH_W) '$(srcdir)/f_expf.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_llrint.o: f_llrint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrint.o `test -f 'f_llrint.c' || echo '$(srcdir)/'`f_llrint.c | ||||||
|  |  | ||||||
|  | lib_a-f_llrint.obj: f_llrint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrint.obj `if test -f 'f_llrint.c'; then $(CYGPATH_W) 'f_llrint.c'; else $(CYGPATH_W) '$(srcdir)/f_llrint.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_llrintf.o: f_llrintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrintf.o `test -f 'f_llrintf.c' || echo '$(srcdir)/'`f_llrintf.c | ||||||
|  |  | ||||||
|  | lib_a-f_llrintf.obj: f_llrintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrintf.obj `if test -f 'f_llrintf.c'; then $(CYGPATH_W) 'f_llrintf.c'; else $(CYGPATH_W) '$(srcdir)/f_llrintf.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_llrintl.o: f_llrintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrintl.o `test -f 'f_llrintl.c' || echo '$(srcdir)/'`f_llrintl.c | ||||||
|  |  | ||||||
|  | lib_a-f_llrintl.obj: f_llrintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_llrintl.obj `if test -f 'f_llrintl.c'; then $(CYGPATH_W) 'f_llrintl.c'; else $(CYGPATH_W) '$(srcdir)/f_llrintl.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_lrint.o: f_lrint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrint.o `test -f 'f_lrint.c' || echo '$(srcdir)/'`f_lrint.c | ||||||
|  |  | ||||||
|  | lib_a-f_lrint.obj: f_lrint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrint.obj `if test -f 'f_lrint.c'; then $(CYGPATH_W) 'f_lrint.c'; else $(CYGPATH_W) '$(srcdir)/f_lrint.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_lrintf.o: f_lrintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrintf.o `test -f 'f_lrintf.c' || echo '$(srcdir)/'`f_lrintf.c | ||||||
|  |  | ||||||
|  | lib_a-f_lrintf.obj: f_lrintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrintf.obj `if test -f 'f_lrintf.c'; then $(CYGPATH_W) 'f_lrintf.c'; else $(CYGPATH_W) '$(srcdir)/f_lrintf.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_lrintl.o: f_lrintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrintl.o `test -f 'f_lrintl.c' || echo '$(srcdir)/'`f_lrintl.c | ||||||
|  |  | ||||||
|  | lib_a-f_lrintl.obj: f_lrintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_lrintl.obj `if test -f 'f_lrintl.c'; then $(CYGPATH_W) 'f_lrintl.c'; else $(CYGPATH_W) '$(srcdir)/f_lrintl.c'; fi` | ||||||
|  |  | ||||||
| lib_a-f_pow.o: f_pow.c | lib_a-f_pow.o: f_pow.c | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_pow.o `test -f 'f_pow.c' || echo '$(srcdir)/'`f_pow.c | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_pow.o `test -f 'f_pow.c' || echo '$(srcdir)/'`f_pow.c | ||||||
|  |  | ||||||
| @@ -424,6 +475,24 @@ lib_a-f_powf.o: f_powf.c | |||||||
| lib_a-f_powf.obj: f_powf.c | lib_a-f_powf.obj: f_powf.c | ||||||
| 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_powf.obj `if test -f 'f_powf.c'; then $(CYGPATH_W) 'f_powf.c'; else $(CYGPATH_W) '$(srcdir)/f_powf.c'; fi` | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_powf.obj `if test -f 'f_powf.c'; then $(CYGPATH_W) 'f_powf.c'; else $(CYGPATH_W) '$(srcdir)/f_powf.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_rint.o: f_rint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rint.o `test -f 'f_rint.c' || echo '$(srcdir)/'`f_rint.c | ||||||
|  |  | ||||||
|  | lib_a-f_rint.obj: f_rint.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rint.obj `if test -f 'f_rint.c'; then $(CYGPATH_W) 'f_rint.c'; else $(CYGPATH_W) '$(srcdir)/f_rint.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_rintf.o: f_rintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rintf.o `test -f 'f_rintf.c' || echo '$(srcdir)/'`f_rintf.c | ||||||
|  |  | ||||||
|  | lib_a-f_rintf.obj: f_rintf.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rintf.obj `if test -f 'f_rintf.c'; then $(CYGPATH_W) 'f_rintf.c'; else $(CYGPATH_W) '$(srcdir)/f_rintf.c'; fi` | ||||||
|  |  | ||||||
|  | lib_a-f_rintl.o: f_rintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rintl.o `test -f 'f_rintl.c' || echo '$(srcdir)/'`f_rintl.c | ||||||
|  |  | ||||||
|  | lib_a-f_rintl.obj: f_rintl.c | ||||||
|  | 	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-f_rintl.obj `if test -f 'f_rintl.c'; then $(CYGPATH_W) 'f_rintl.c'; else $(CYGPATH_W) '$(srcdir)/f_rintl.c'; fi` | ||||||
|  |  | ||||||
| mostlyclean-libtool: | mostlyclean-libtool: | ||||||
| 	-rm -f *.lo | 	-rm -f *.lo | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										74
									
								
								newlib/libm/machine/i386/f_llrint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								newlib/libm/machine/i386/f_llrint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #if !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | FUNCTION | ||||||
|  | <<llrint>>, <<llrintf>>, <<llrintl>>---round and convert to long long integer | ||||||
|  | INDEX | ||||||
|  | 	llrint | ||||||
|  | INDEX | ||||||
|  | 	llrintf | ||||||
|  | INDEX | ||||||
|  | 	llrintl | ||||||
|  |  | ||||||
|  | ANSI_SYNOPSIS | ||||||
|  | 	#include <math.h> | ||||||
|  | 	long long int llrint(double x); | ||||||
|  |         long long int llrintf(float x); | ||||||
|  |         long long int llrintl(long double x); | ||||||
|  |  | ||||||
|  | TRAD_SYNOPSIS | ||||||
|  | 	ANSI-only. | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  | The <<llrint>>, <<llrintf>> and <<llrintl>> functions round <[x]> to the nearest integer value, | ||||||
|  | according to the current rounding direction. If the rounded value is outside the | ||||||
|  | range of the return type, the numeric result is unspecified. A range error may  | ||||||
|  | occur if the magnitude of <[x]> is too large. | ||||||
|  |  | ||||||
|  | RETURNS | ||||||
|  | These functions return the rounded integer value of <[x]>. | ||||||
|  | <<llrint>>, <<llrintf>> and <<llrintl>> return the result as a long long integer. | ||||||
|  |  | ||||||
|  | PORTABILITY | ||||||
|  | <<llrint>>, <<llrintf>> and <<llrintl>> are ANSI. | ||||||
|  | <<llrint>>, <<llrintf>> and <<llrintl>> are only available on i386 platforms when | ||||||
|  | hardware floating point support is available and when compiling with GCC. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of llrint(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long long int _f_llrint (double x) | ||||||
|  | { | ||||||
|  |   long long int _result; | ||||||
|  |   asm ("fistpll %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For now, we only have the fast math version.  */ | ||||||
|  | long long int llrint (double x) { | ||||||
|  |   return _f_llrint(x); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif /* !_SOFT_FLOAT */ | ||||||
|  | #endif /* __GNUC__ */ | ||||||
							
								
								
									
										38
									
								
								newlib/libm/machine/i386/f_llrintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								newlib/libm/machine/i386/f_llrintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #if !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of llrintf(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long long int _f_llrintf (float x) | ||||||
|  | { | ||||||
|  |   long long int _result; | ||||||
|  |   asm ("fistpll %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For now, we only have the fast math version.  */ | ||||||
|  | long long int llrintf (float x) { | ||||||
|  |   return _f_llrintf(x); | ||||||
|  | }  | ||||||
|  |  | ||||||
|  | #endif /* !_SOFT_FLOAT */ | ||||||
|  | #endif /* __GNUC__ */ | ||||||
							
								
								
									
										38
									
								
								newlib/libm/machine/i386/f_llrintl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								newlib/libm/machine/i386/f_llrintl.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #if !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of llrintl(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long long int _f_llrintl (long double x) | ||||||
|  | { | ||||||
|  |   long long int _result; | ||||||
|  |   asm ("fistpll %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For now, we only have the fast math version.  */ | ||||||
|  | long long int llrintl (long double x) { | ||||||
|  |   return _f_llrintl(x); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif /* !_SOFT_FLOAT */ | ||||||
|  | #endif /* __GNUC__ */ | ||||||
							
								
								
									
										69
									
								
								newlib/libm/machine/i386/f_lrint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								newlib/libm/machine/i386/f_lrint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(__GNUC__) && !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | FUNCTION | ||||||
|  | <<lrint>>, <<lrintf>>, <<lrintl>>---round and convert to long integer | ||||||
|  | INDEX | ||||||
|  | 	lrint | ||||||
|  | INDEX | ||||||
|  | 	lrintf | ||||||
|  | INDEX | ||||||
|  | 	lrintl | ||||||
|  |  | ||||||
|  | ANSI_SYNOPSIS | ||||||
|  | 	#include <math.h> | ||||||
|  | 	long int lrint(double x); | ||||||
|  |         long int lrintf(float x); | ||||||
|  |         long int lrintl(long double x); | ||||||
|  |  | ||||||
|  | TRAD_SYNOPSIS | ||||||
|  | 	ANSI-only. | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  | The <<lrint>>, <<lrintf>> and <<lrintl>> functions round <[x]> to the nearest integer value, | ||||||
|  | according to the current rounding direction. If the rounded value is outside the | ||||||
|  | range of the return type, the numeric result is unspecified. A range error may  | ||||||
|  | occur if the magnitude of <[x]> is too large. | ||||||
|  |  | ||||||
|  | RETURNS | ||||||
|  | These functions return the rounded integer value of <[x]>. | ||||||
|  | <<lrint>>, <<lrintf>> and <<lrintl>> return the result as a long integer. | ||||||
|  |  | ||||||
|  | PORTABILITY | ||||||
|  | <<lrint>>, <<lrintf>>, and <<lrintl>> are ANSI. | ||||||
|  | <<lrint>> and <<lrintf>> are available on all platforms. | ||||||
|  | <<lrintl>> is only available on i386 platforms when hardware  | ||||||
|  | floating point support is available and when compiling with GCC. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of lrint(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long int _f_lrint (double x) | ||||||
|  | { | ||||||
|  |   long int _result; | ||||||
|  |   asm ("fistpl %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  /* !__GNUC__ || _SOFT_FLOAT */ | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								newlib/libm/machine/i386/f_lrintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								newlib/libm/machine/i386/f_lrintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(__GNUC__) && !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of lrintf(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long int _f_lrintf (float x) | ||||||
|  | { | ||||||
|  |   long int _result; | ||||||
|  |   asm ("fistpl %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  /* !__GNUC__ || _SOFT_FLOAT */ | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								newlib/libm/machine/i386/f_lrintl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								newlib/libm/machine/i386/f_lrintl.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #if !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of lrintl(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long int _f_lrintl (long double x) | ||||||
|  | { | ||||||
|  |   long int _result; | ||||||
|  |   asm ("fistpl %0" : "=m" (_result) : "t" (x) : "st"); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For now, there is only the fast math version so we use it.  */ | ||||||
|  | long int lrintl (long double x) { | ||||||
|  |   return _f_lrintl(x); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif /* !_SOFT_FLOAT */ | ||||||
|  | #endif /* __GNUC__ */ | ||||||
							
								
								
									
										67
									
								
								newlib/libm/machine/i386/f_rint.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								newlib/libm/machine/i386/f_rint.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(__GNUC__) && !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  | FUNCTION | ||||||
|  | <<rint>>, <<rintf>>, <<rintl>>---round to integer | ||||||
|  | INDEX | ||||||
|  | 	rint | ||||||
|  | INDEX | ||||||
|  | 	rintf | ||||||
|  | INDEX | ||||||
|  | 	rintl | ||||||
|  |  | ||||||
|  | ANSI_SYNOPSIS | ||||||
|  | 	#include <math.h> | ||||||
|  | 	double rint(double x); | ||||||
|  |         float rintf(float x); | ||||||
|  |         long double rintl(long double x); | ||||||
|  |  | ||||||
|  | TRAD_SYNOPSIS | ||||||
|  | 	ANSI-only. | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  | The <<rint>>, <<rintf>> and <<rintl>> functions round <[x]> to an integer value | ||||||
|  | in floating-point format, using the current rounding direction.  They may | ||||||
|  | raise the inexact exception if the result differs in value from the argument. | ||||||
|  |  | ||||||
|  | RETURNS | ||||||
|  | These functions return the rounded integer value of <[x]>. | ||||||
|  |  | ||||||
|  | PORTABILITY | ||||||
|  | <<rint>>, <<rintf>> and <<rintl>> are ANSI. | ||||||
|  | <<rint>> and <<rintf>> are available on all platforms. | ||||||
|  | <<rintl>> is only available on i386 platforms when hardware  | ||||||
|  | floating point support is available and when compiling with GCC. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of rint(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | double _f_rint (double x) | ||||||
|  | { | ||||||
|  |   double _result; | ||||||
|  |   asm ("frndint" : "=t" (_result) : "0" (x)); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  /* !__GNUC__ || _SOFT_FLOAT */ | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								newlib/libm/machine/i386/f_rintf.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								newlib/libm/machine/i386/f_rintf.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if defined(__GNUC__) && !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of rintf(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | float _f_rintf (float x) | ||||||
|  | { | ||||||
|  |   float _result; | ||||||
|  |   asm ("frndint" : "=t" (_result) : "0" (x)); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif  /* !__GNUC__ || _SOFT_FLOAT */ | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								newlib/libm/machine/i386/f_rintl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								newlib/libm/machine/i386/f_rintl.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  * ==================================================== | ||||||
|  |  * x87 FP implementation contributed to Newlib by | ||||||
|  |  * Dave Korn, November 2007.  This file is placed in the | ||||||
|  |  * public domain.  Permission to use, copy, modify, and  | ||||||
|  |  * distribute this software is freely granted. | ||||||
|  |  * ==================================================== | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #ifdef __GNUC__ | ||||||
|  | #if !defined(_SOFT_FLOAT) | ||||||
|  |  | ||||||
|  | #include <math.h> | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Fast math version of rintl(x) | ||||||
|  |  * Return x rounded to integral value according to the prevailing | ||||||
|  |  * rounding mode. | ||||||
|  |  * Method: | ||||||
|  |  *	Using inline x87 asms. | ||||||
|  |  * Exception: | ||||||
|  |  *	Governed by x87 FPCR. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | long double _f_rintl (long double x) | ||||||
|  | { | ||||||
|  |   long double _result; | ||||||
|  |   asm ("frndint" : "=t" (_result) : "0" (x)); | ||||||
|  |   return _result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* For now, we only have the fast math version.  */ | ||||||
|  | long double rintl (long double x) { | ||||||
|  |   return _f_rintl(x); | ||||||
|  | }  | ||||||
|  |  | ||||||
|  | #endif /* !_SOFT_FLOAT */ | ||||||
|  | #endif /* __GNUC__ */ | ||||||
		Reference in New Issue
	
	Block a user