From 258ca456fd46e19279a08a948fca1f0a8b84553d Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Fri, 24 Feb 2012 15:00:28 +0100 Subject: [PATCH] m68k: set errno in exp --- ChangeLog.m68k | 8 ++++++ sysdeps/m68k/m680x0/fpu/bits/mathinline.h | 1 - sysdeps/m68k/m680x0/fpu/s_expm1.c | 46 +++++++++++++++++++++++++++++-- sysdeps/m68k/m680x0/fpu/s_expm1f.c | 6 ++-- sysdeps/m68k/m680x0/fpu/s_expm1l.c | 7 +++-- 5 files changed, 61 insertions(+), 7 deletions(-) diff --git a/ChangeLog.m68k b/ChangeLog.m68k index 9724c30..b53feed 100644 --- a/ChangeLog.m68k +++ b/ChangeLog.m68k @@ -1,5 +1,13 @@ 2012-02-24 Andreas Schwab + * sysdeps/m68k/m680x0/fpu/s_expm1.c: Set errno to ERANGE if + argument causes overflow. + * sysdeps/m68k/m680x0/fpu/s_expm1f.c: Include . + (float_type, o_threshold): Define. + * sysdeps/m68k/m680x0/fpu/s_expm1l.c: Likewise. + * sysdeps/m68k/m680x0/fpu/bits/mathinline.h [__OPTIMIZE__]: Don't + define expm1 as inline. + * sysdeps/m68k/m680x0/fpu/s_sin.c: Set errno to EDOM if argument is infinite. * sysdeps/m68k/m680x0/fpu/s_cos.c: Include . diff --git a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h b/sysdeps/m68k/m680x0/fpu/bits/mathinline.h index d79f6bd..31d9efe 100644 --- a/sysdeps/m68k/m680x0/fpu/bits/mathinline.h +++ b/sysdeps/m68k/m680x0/fpu/bits/mathinline.h @@ -179,7 +179,6 @@ __inline_mathop(tanh, tanh) # if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99 __inline_mathop(rint, int) -__inline_mathop(expm1, etoxm1) __inline_mathop(log1p, lognp1) # endif diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1.c b/sysdeps/m68k/m680x0/fpu/s_expm1.c index 1ef99e2..3db6f2d 100644 --- a/sysdeps/m68k/m680x0/fpu/s_expm1.c +++ b/sysdeps/m68k/m680x0/fpu/s_expm1.c @@ -1,2 +1,44 @@ -#define FUNC expm1 -#include +/* Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include +#include +#include "mathimpl.h" + +#ifndef FUNC +# define FUNC expm1 +#endif +#ifndef float_type +# define float_type double +#endif +#ifndef o_threshold +# define o_threshold 7.09782712893383973096e+02 +#endif + +#define CONCATX(a,b) __CONCAT(a,b) + +float_type +CONCATX(__,FUNC) (float_type x) +{ + if ((__m81_test (x) & __M81_COND_INF) == 0 && isgreater (x, o_threshold)) + __set_errno (ERANGE); + return __m81_u(CONCATX(__, FUNC)) (x); +} + +#define weak_aliasx(a, b) weak_alias(a, b) +weak_aliasx (CONCATX(__, FUNC), FUNC) diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1f.c b/sysdeps/m68k/m680x0/fpu/s_expm1f.c index 84935b1..2cd8ffc 100644 --- a/sysdeps/m68k/m680x0/fpu/s_expm1f.c +++ b/sysdeps/m68k/m680x0/fpu/s_expm1f.c @@ -1,2 +1,4 @@ -#define FUNC expm1f -#include +#define FUNC expm1f +#define float_type float +#define o_threshold 8.8722831726e+01F +#include diff --git a/sysdeps/m68k/m680x0/fpu/s_expm1l.c b/sysdeps/m68k/m680x0/fpu/s_expm1l.c index feee07a..a2c8086 100644 --- a/sysdeps/m68k/m680x0/fpu/s_expm1l.c +++ b/sysdeps/m68k/m680x0/fpu/s_expm1l.c @@ -1,3 +1,6 @@ -#define FUNC expm1l -#include +#define FUNC expm1l +#define float_type long double +/* 400c0000b17217f7d1cf79ab */ +#define o_threshold 1.13565234062941439487914863093465101e+04L +#include libm_hidden_def (__expm1l) -- 2.7.4