diff options
author | Eric Andersen <andersen@codepoet.org> | 2001-11-24 03:46:25 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2001-11-24 03:46:25 +0000 |
commit | 26d7ea91124a9405dff7755a78cfb6232dd15d80 (patch) | |
tree | c14436f6013bd76a2a339deb1424e02e73419957 | |
parent | 683c13fcc85276e9a030d6a98d50366bef03a6b6 (diff) |
Move powerpc specific optimizations (courtesy of apple) to powerpc
subdir. Put together a theoretical framework for adding arch specific
optimizations. Havn't tried this yet but it looks correct...
-Erik
-rw-r--r-- | libm/Makefile | 29 | ||||
-rw-r--r-- | libm/powerpc/Makefile | 60 | ||||
-rw-r--r-- | libm/powerpc/ceilfloor.c (renamed from libm/ceilfloor.c) | 7 | ||||
-rw-r--r-- | libm/powerpc/frexpldexp.c (renamed from libm/frexpldexp.c) | 3 | ||||
-rw-r--r-- | libm/powerpc/logb.c (renamed from libm/logb.c) | 3 | ||||
-rw-r--r-- | libm/powerpc/rndint.c (renamed from libm/rndint.c) | 12 | ||||
-rw-r--r-- | libm/powerpc/scalb.c (renamed from libm/scalb.c) | 2 | ||||
-rw-r--r-- | libm/powerpc/sign.c (renamed from libm/sign.c) | 2 | ||||
-rw-r--r-- | libm/s_ceil.c | 3 | ||||
-rw-r--r-- | libm/s_copysign.c | 3 | ||||
-rw-r--r-- | libm/s_floor.c | 2 | ||||
-rw-r--r-- | libm/s_frexp.c | 2 | ||||
-rw-r--r-- | libm/s_ldexp.c | 2 | ||||
-rw-r--r-- | libm/s_logb.c | 2 | ||||
-rw-r--r-- | libm/s_modf.c | 2 | ||||
-rw-r--r-- | libm/s_rint.c | 2 | ||||
-rw-r--r-- | libm/w_scalb.c | 2 |
17 files changed, 88 insertions, 50 deletions
diff --git a/libm/Makefile b/libm/Makefile index c82ca3f25..e9c7c807d 100644 --- a/libm/Makefile +++ b/libm/Makefile @@ -22,6 +22,14 @@ TOPDIR=../ include $(TOPDIR)Rules.mak +ifeq ($(TARGET_ARCH),$(wildcard $(TARGET_ARCH))) +DIRS = $(TARGET_ARCH) +else +DIRS = +endif +ALL_SUBDIRS = powerpc + + LIBM=libm.a LIBM_SHARED=libm.so LIBM_SHARED_FULLNAME=libm-$(MAJOR_VERSION).$(MINOR_VERSION).so @@ -43,8 +51,7 @@ CSRC = e_acos.c e_acosh.c e_asin.c e_atan2.c e_atanh.c e_cosh.c\ w_cosh.c w_drem.c w_exp.c w_fmod.c w_gamma.c w_gamma_r.c\ w_hypot.c w_j0.c w_j1.c w_jn.c w_lgamma.c w_lgamma_r.c\ w_log.c w_log10.c w_pow.c w_remainder.c w_scalb.c w_sinh.c\ - w_sqrt.c ceilfloor.c fpmacros.c frexpldexp.c logb.c rndint.c\ - scalb.c sign.c + w_sqrt.c fpmacros.c else CSRC = w_acos.c w_asin.c s_atan.c w_atan2.c s_ceil.c s_cos.c \ w_cosh.c w_exp.c s_expm1.c s_fabs.c s_floor.c w_fmod.c \ @@ -59,9 +66,9 @@ OBJS=$(COBJS) ifneq ($(strip $(HAS_FLOATING_POINT)),true) -all: clean +all: clean subdirs else -all: $(OBJS) $(COBJS1) $(LIBM) +all: $(OBJS) $(LIBM) subdirs endif $(LIBM): ar-target @@ -90,11 +97,21 @@ $(COBJS): %.o : %.c $(STRIPTOOL) -x -R .note -R .comment $*.o $(OBJ): Makefile -$(COBJS1): Makefile tags: ctags -R -clean: +clean: subdirs_clean rm -f *.[oa] *~ core $(LIBM_SHARED)* $(LIBM_SHARED_FULLNAME)* +subdirs: $(patsubst %, _dir_%, $(DIRS)) +subdirs_clean: $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) + +$(patsubst %, _dir_%, $(DIRS)) : dummy + $(MAKE) -C $(patsubst _dir_%, %, $@) + +$(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy + $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean + +.PHONY: dummy + diff --git a/libm/powerpc/Makefile b/libm/powerpc/Makefile new file mode 100644 index 000000000..7464ee0a8 --- /dev/null +++ b/libm/powerpc/Makefile @@ -0,0 +1,60 @@ +# Makefile for uClibc's math library +# Copyright (C) 2001 by Lineo, inc. +# +# This math library is derived primarily from the Cephes Math Library, +# copyright by Stephen L. Moshier <moshier@world.std.com> +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU Library General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more +# details. +# +# You should have received a copy of the GNU Library General Public License +# along with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +TOPDIR=../../ +include $(TOPDIR)Rules.mak + +LIBM=../libm.a +TARGET_CC= $(TOPDIR)extra/gcc-uClibc/$(TARGET_ARCH)-uclibc-gcc +TARGET_CFLAGS+=-D_IEEE_LIBM -D_ISOC99_SOURCE -D_SVID_SOURCE + +ifeq ($(strip $(DO_C99_MATH)),true) +CSRC = ceilfloor.c frexpldexp.c logb.c rndint.c scalb.c sign.c +else +CSRC = +endif +COBJS=$(patsubst %.c,%.o, $(CSRC)) +OBJS=$(COBJS) + + +ifneq ($(strip $(HAS_FLOATING_POINT)),true) +all: clean +else +all: $(OBJS) $(LIBM) +endif + +$(LIBM): ar-target + +ar-target: $(OBJS) + $(AR) $(ARFLAGS) $(LIBM) $(OBJS) + +$(COBJS): %.o : %.c + $(TARGET_CC) $(TARGET_CFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o + +$(OBJ): Makefile + +tags: + ctags -R + +clean: + rm -f *.[oa] *~ core $(LIBM_SHARED)* $(LIBM_SHARED_FULLNAME)* + diff --git a/libm/ceilfloor.c b/libm/powerpc/ceilfloor.c index 9607435c3..d5947ab50 100644 --- a/libm/ceilfloor.c +++ b/libm/powerpc/ceilfloor.c @@ -1,4 +1,3 @@ -#if defined(__ppc__) /******************************************************************************* * * * File ceilfloor.c, * @@ -22,10 +21,6 @@ * * *******************************************************************************/ -#if !defined(__ppc__) -#define asm(x) -#endif - static const double twoTo52 = 4503599627370496.0; static const unsigned long signMask = 0x80000000ul; @@ -176,4 +171,4 @@ double floor ( double x ) *******************************************************************************/ return ( x ); } -#endif /* __ppc__ */ + diff --git a/libm/frexpldexp.c b/libm/powerpc/frexpldexp.c index dbb6fcc64..6b759f91b 100644 --- a/libm/frexpldexp.c +++ b/libm/powerpc/frexpldexp.c @@ -1,4 +1,3 @@ -#if defined(__ppc__) /******************************************************************************* * * * File frexpldexp.c, * @@ -70,4 +69,4 @@ double frexp ( double value, int *eptr ) argument.words.hi = ( argument.words.hi & 0x800fffff ) | 0x3fe00000; return argument.dbl; } -#endif /* __ppc__ */ + diff --git a/libm/logb.c b/libm/powerpc/logb.c index da2a27d72..3a410ba5c 100644 --- a/libm/logb.c +++ b/libm/powerpc/logb.c @@ -1,4 +1,3 @@ -#if defined(__ppc__) /******************************************************************************* * * * File logb.c, * @@ -101,4 +100,4 @@ double logb ( double x ) return ( xInHex.dbl - klTod ); } } -#endif /* __ppc__ */ + diff --git a/libm/rndint.c b/libm/powerpc/rndint.c index 7f8c183d4..1b7a9ec81 100644 --- a/libm/rndint.c +++ b/libm/powerpc/rndint.c @@ -47,10 +47,6 @@ #include <limits.h> #include <math.h> -#if !defined(__ppc__) -#define asm(x) -#endif - #define SET_INVALID 0x01000000UL typedef union @@ -108,7 +104,6 @@ static const DblInHex TOWARDZERO = {{ 0x00000000, 0x00000001 }}; * Now a bit twidling version that is about %30 faster. * *******************************************************************************/ -#if defined(__ppc__) double rint ( double x ) { DblInHex argument; @@ -159,7 +154,6 @@ double rint ( double x ) *******************************************************************************/ return ( x ); } -#endif /* __ppc__ */ /******************************************************************************* * * @@ -176,9 +170,7 @@ double rint ( double x ) double nearbyint ( double x ) { double y; -#if defined(__ppc__) double OldEnvironment; -#endif /* __ppc__ */ y = twoTo52; @@ -400,10 +392,8 @@ long int roundtol ( double x ) DblInHex argument, OldEnvironment; register unsigned long int xhi; register long int target; -#if defined(__ppc__) const DblInHex kTZ = {{ 0x0, 0x1 }}; const DblInHex kUP = {{ 0x0, 0x2 }}; -#endif /* __ppc__ */ argument.dbl = x; xhi = argument.words.hi & 0x7ffffffful; // high 32 bits of x @@ -568,7 +558,6 @@ double trunc ( double x ) * modf is the double implementation. * *******************************************************************************/ -#if defined(__ppc__) double modf ( double x, double *iptr ) { register double OldEnvironment, xtrunc; @@ -629,4 +618,3 @@ double modf ( double x, double *iptr ) return ( argument.dbl ); } } -#endif /* __ppc__ */ diff --git a/libm/scalb.c b/libm/powerpc/scalb.c index 03d2de9dc..98a2b7d3f 100644 --- a/libm/scalb.c +++ b/libm/powerpc/scalb.c @@ -1,4 +1,3 @@ -#if defined(__ppc__) /*********************************************************************** ** File: scalb.c ** @@ -84,4 +83,3 @@ double scalb ( double x, int n ) xInHex.words.hi = ( ( unsigned long ) ( n + 1023 ) ) << 20; return ( x * xInHex.dbl ); } -#endif /* __ppc__ */ diff --git a/libm/sign.c b/libm/powerpc/sign.c index 524d6afe3..0bf2f3829 100644 --- a/libm/sign.c +++ b/libm/powerpc/sign.c @@ -1,4 +1,3 @@ -#if defined(__ppc__) /******************************************************************************* * * * File sign.c, * @@ -55,4 +54,3 @@ double copysign ( double arg2, double arg1 ) return y.dbl; } -#endif /* __ppc__ */ diff --git a/libm/s_ceil.c b/libm/s_ceil.c index f17b31447..8616d0f54 100644 --- a/libm/s_ceil.c +++ b/libm/s_ceil.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_ceil.c 5.1 93/09/24 */ /* * ==================================================== @@ -79,4 +78,4 @@ static double huge = 1.0e300; INSERT_WORDS(x,i0,i1); return x; } -#endif /* !__ppc__ */ + diff --git a/libm/s_copysign.c b/libm/s_copysign.c index 666c34a6f..63261fc96 100644 --- a/libm/s_copysign.c +++ b/libm/s_copysign.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_copysign.c 5.1 93/09/24 */ /* * ==================================================== @@ -37,4 +36,4 @@ static char rcsid[] = "$NetBSD: s_copysign.c,v 1.8 1995/05/10 20:46:57 jtc Exp $ SET_HIGH_WORD(x,(hx&0x7fffffff)|(hy&0x80000000)); return x; } -#endif + diff --git a/libm/s_floor.c b/libm/s_floor.c index 375dc5a10..5a36b2d6f 100644 --- a/libm/s_floor.c +++ b/libm/s_floor.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_floor.c 5.1 93/09/24 */ /* * ==================================================== @@ -80,4 +79,3 @@ static double huge = 1.0e300; INSERT_WORDS(x,i0,i1); return x; } -#endif /* !__ppc__ */ diff --git a/libm/s_frexp.c b/libm/s_frexp.c index f187d8472..bfc9dba03 100644 --- a/libm/s_frexp.c +++ b/libm/s_frexp.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_frexp.c 5.1 93/09/24 */ /* * ==================================================== @@ -58,4 +57,3 @@ two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */ SET_HIGH_WORD(x,hx); return x; } -#endif /* !__ppc__ */ diff --git a/libm/s_ldexp.c b/libm/s_ldexp.c index 5e7313e6e..085823aea 100644 --- a/libm/s_ldexp.c +++ b/libm/s_ldexp.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_ldexp.c 5.1 93/09/24 */ /* * ==================================================== @@ -31,4 +30,3 @@ static char rcsid[] = "$NetBSD: s_ldexp.c,v 1.6 1995/05/10 20:47:40 jtc Exp $"; if(!finite(value)||value==0.0) errno = ERANGE; return value; } -#endif /* !__ppc__ */ diff --git a/libm/s_logb.c b/libm/s_logb.c index 7ec1c3696..02bb99f3c 100644 --- a/libm/s_logb.c +++ b/libm/s_logb.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_logb.c 5.1 93/09/24 */ /* * ==================================================== @@ -41,4 +40,3 @@ static char rcsid[] = "$NetBSD: s_logb.c,v 1.8 1995/05/10 20:47:50 jtc Exp $"; else return (double) (ix-1023); } -#endif /* !__ppc__ */ diff --git a/libm/s_modf.c b/libm/s_modf.c index 2d3e5379b..9d71c01d1 100644 --- a/libm/s_modf.c +++ b/libm/s_modf.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_modf.c 5.1 93/09/24 */ /* * ==================================================== @@ -82,4 +81,3 @@ static double one = 1.0; } } } -#endif /* !__ppc__ */ diff --git a/libm/s_rint.c b/libm/s_rint.c index b2d9c0e79..880885759 100644 --- a/libm/s_rint.c +++ b/libm/s_rint.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)s_rint.c 5.1 93/09/24 */ /* * ==================================================== @@ -85,4 +84,3 @@ TWO52[2]={ w = TWO52[sx]+x; return w-TWO52[sx]; } -#endif /* !__ppc__ */ diff --git a/libm/w_scalb.c b/libm/w_scalb.c index bde5f705a..50026bed9 100644 --- a/libm/w_scalb.c +++ b/libm/w_scalb.c @@ -1,4 +1,3 @@ -#if !defined(__ppc__) /* @(#)w_scalb.c 5.1 93/09/24 */ /* * ==================================================== @@ -59,4 +58,3 @@ static char rcsid[] = "$NetBSD: w_scalb.c,v 1.6 1995/05/10 20:49:48 jtc Exp $"; return z; #endif } -#endif /* !__ppc__ */ |