From 30bd4a6cc3a093fdb32db26ee8bc30cd7ef47622 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sun, 28 Dec 2008 22:15:07 +0000 Subject: remove many functions which just call __ieee754_, define them as aliases instead. text data bss dec hex filename - 45402 180 4 45586 b212 lib/libm-0.9.30-svn.so + 45302 180 4 45486 b1ae lib/libm-0.9.30-svn.so --- libm/e_pow.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'libm/e_pow.c') diff --git a/libm/e_pow.c b/libm/e_pow.c index 08670cce3..137f600c3 100644 --- a/libm/e_pow.c +++ b/libm/e_pow.c @@ -292,3 +292,40 @@ double attribute_hidden __ieee754_pow(double x, double y) else SET_HIGH_WORD(z,j); return s*z; } + +/* + * wrapper pow(x,y) return x**y + */ +#ifndef _IEEE_LIBM +double pow(double x, double y) +{ + double z = __ieee754_pow(x, y); + if (_LIB_VERSION == _IEEE_|| isnan(y)) + return z; + if (isnan(x)) { + if (y == 0.0) + return __kernel_standard(x, y, 42); /* pow(NaN,0.0) */ + return z; + } + if (x == 0.0) { + if (y == 0.0) + return __kernel_standard(x, y, 20); /* pow(0.0,0.0) */ + if (isfinite(y) && y < 0.0) + return __kernel_standard(x,y,23); /* pow(0.0,negative) */ + return z; + } + if (!isfinite(z)) { + if (isfinite(x) && isfinite(y)) { + if (isnan(z)) + return __kernel_standard(x, y, 24); /* pow neg**non-int */ + return __kernel_standard(x, y, 21); /* pow overflow */ + } + } + if (z == 0.0 && isfinite(x) && isfinite(y)) + return __kernel_standard(x, y, 22); /* pow underflow */ + return z; +} +#else +strong_alias(__ieee754_pow, pow) +#endif +libm_hidden_def(pow) -- cgit v1.2.3