diff options
Diffstat (limited to 'sysdeps')
40 files changed, 1138 insertions, 431 deletions
diff --git a/sysdeps/generic/Makefile b/sysdeps/generic/Makefile index f4d001b7f4..5513ca998c 100644 --- a/sysdeps/generic/Makefile +++ b/sysdeps/generic/Makefile @@ -24,7 +24,7 @@ $(common-objpfx)bytesex.h: $(common-objpfx)det_endian mv $@-tmp $@ $(common-objpfx)det_endian: $(sysdep_dir)/generic/det_endian.c - $(native-compile) + $(common-objdir-compile) before-compile := $(before-compile) $(common-objpfx)bytesex.h common-generated := $(common-generated) bytesex.h det_endian @@ -40,12 +40,10 @@ $(objpfx)siglist.c: $(objpfx)make_siglist $(dir $<)$(notdir $<) > $@-tmp mv $@-tmp $@ +make_siglist-CFLAGS = -DSIGNUM_H=\"$(shell pwd)/$(firstword $(wildcard \ + $(+sysdep_dirs:%=%/signum.h)))\" $(objpfx)make_siglist: $(sysdep_dir)/generic/make_siglist.c - $(make-target-directory) - signum_h=`cd $(dir $(firstword $(wildcard \ - $(+sysdep_dirs:%=%/signum.h)))); pwd`/signum.h; \ - $(native-compile) \ - -DSIGNUM_H=\"$${signum_h}\" + $(native-compile) generated := $(generated) make_siglist siglist.c endif diff --git a/sysdeps/ieee754/dbl2mpn.c b/sysdeps/ieee754/dbl2mpn.c index bbac525a07..749fb41737 100644 --- a/sysdeps/ieee754/dbl2mpn.c +++ b/sysdeps/ieee754/dbl2mpn.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1993, 1994, 1995, 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" diff --git a/sysdeps/ieee754/ldbl2mpn.c b/sysdeps/ieee754/ldbl2mpn.c index b72af2ef47..e55bb8e029 100644 --- a/sysdeps/ieee754/ldbl2mpn.c +++ b/sysdeps/ieee754/ldbl2mpn.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1995, 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" diff --git a/sysdeps/ieee754/mpn2dbl.c b/sysdeps/ieee754/mpn2dbl.c index e05d849b61..8219d18bb2 100644 --- a/sysdeps/ieee754/mpn2dbl.c +++ b/sysdeps/ieee754/mpn2dbl.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1995, 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ +/* Copyright (C) 1995, 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" diff --git a/sysdeps/ieee754/mpn2flt.c b/sysdeps/ieee754/mpn2flt.c index e9bbc490ad..37448d11d8 100644 --- a/sysdeps/ieee754/mpn2flt.c +++ b/sysdeps/ieee754/mpn2flt.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1995, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" @@ -23,13 +23,13 @@ Cambridge, MA 02139, USA. */ /* Convert a multi-precision integer of the needed number of bits (24 for float) and an integral power of two to a `float' in IEEE754 single- - precision format. */ + precision format. */ float __mpn_construct_float (mp_srcptr frac_ptr, int expt, int sign) { union ieee754_float u; - + u.ieee.negative = sign; u.ieee.exponent = expt + IEEE754_FLOAT_BIAS; #if BITS_PER_MP_LIMB > FLT_MANT_DIG diff --git a/sysdeps/ieee754/mpn2ldbl.c b/sysdeps/ieee754/mpn2ldbl.c index 03774a33c3..27a3e33266 100644 --- a/sysdeps/ieee754/mpn2ldbl.c +++ b/sysdeps/ieee754/mpn2ldbl.c @@ -1,20 +1,20 @@ -/* Copyright (C) 1995, 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ +/* Copyright (C) 1995, 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "gmp.h" #include "gmp-impl.h" diff --git a/sysdeps/libm-ieee754/s_fdim.c b/sysdeps/libm-ieee754/s_fdim.c new file mode 100644 index 0000000000..cdd7886068 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fdim.c @@ -0,0 +1,36 @@ +/* Return positive difference between arguments. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +double +__fdim (double x, double y) +{ + int clsx = fpclassify (x); + int clsy = fpclassify (y); + + if (clsx == FP_NAN || clsy == FP_NAN + || (y < 0 && clsx == FP_INFINITE && clsy == FP_INFINITE)) + /* Raise invalid flag. */ + return x - y; + + return x < y ? 0 : x - y; +} +weak_alias (__fdim, fdim) diff --git a/sysdeps/libm-ieee754/s_fdimf.c b/sysdeps/libm-ieee754/s_fdimf.c new file mode 100644 index 0000000000..a8d8192c0f --- /dev/null +++ b/sysdeps/libm-ieee754/s_fdimf.c @@ -0,0 +1,36 @@ +/* Return positive difference between arguments. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +float +__fdimf (float x, float y) +{ + int clsx = fpclassify (x); + int clsy = fpclassify (y); + + if (clsx == FP_NAN || clsy == FP_NAN + || (y < 0 && clsx == FP_INFINITE && clsy == FP_INFINITE)) + /* Raise invalid flag. */ + return x - y; + + return x < y ? 0 : x - y; +} +weak_alias (__fdimf, fdimf) diff --git a/sysdeps/libm-ieee754/s_fdiml.c b/sysdeps/libm-ieee754/s_fdiml.c new file mode 100644 index 0000000000..c97a668f10 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fdiml.c @@ -0,0 +1,36 @@ +/* Return positive difference between arguments. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +long double +__fdiml (long double x, long double y) +{ + int clsx = fpclassify (x); + int clsy = fpclassify (y); + + if (clsx == FP_NAN || clsy == FP_NAN + || (y < 0 && clsx == FP_INFINITE && clsy == FP_INFINITE)) + /* Raise invalid flag. */ + return x - y; + + return x < y ? 0 : x - y; +} +weak_alias (__fdiml, fdiml) diff --git a/sysdeps/libm-ieee754/s_fmax.c b/sysdeps/libm-ieee754/s_fmax.c new file mode 100644 index 0000000000..651def8aac --- /dev/null +++ b/sysdeps/libm-ieee754/s_fmax.c @@ -0,0 +1,29 @@ +/* Return maximum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +double +__fmax (double x, double y) +{ + return (isgreaterequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fmax, fmax) diff --git a/sysdeps/libm-ieee754/s_fmaxf.c b/sysdeps/libm-ieee754/s_fmaxf.c new file mode 100644 index 0000000000..e56193fe7b --- /dev/null +++ b/sysdeps/libm-ieee754/s_fmaxf.c @@ -0,0 +1,29 @@ +/* Return maximum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +float +__fmaxf (float x, float y) +{ + return (isgreaterequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fmaxf, fmaxf) diff --git a/sysdeps/libm-ieee754/s_fmaxl.c b/sysdeps/libm-ieee754/s_fmaxl.c new file mode 100644 index 0000000000..6e1c7152ed --- /dev/null +++ b/sysdeps/libm-ieee754/s_fmaxl.c @@ -0,0 +1,29 @@ +/* Return maximum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +long double +__fmaxl (long double x, long double y) +{ + return (isgreaterequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fmaxl, fmaxl) diff --git a/sysdeps/libm-ieee754/s_fmin.c b/sysdeps/libm-ieee754/s_fmin.c new file mode 100644 index 0000000000..2a49a2e069 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fmin.c @@ -0,0 +1,29 @@ +/* Return minimum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +double +__fmin (double x, double y) +{ + return (islessequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fmin, fmin) diff --git a/sysdeps/libm-ieee754/s_fminf.c b/sysdeps/libm-ieee754/s_fminf.c new file mode 100644 index 0000000000..72c656e1ac --- /dev/null +++ b/sysdeps/libm-ieee754/s_fminf.c @@ -0,0 +1,29 @@ +/* Return minimum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +float +__fminf (float x, float y) +{ + return (islessequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fminf, fminf) diff --git a/sysdeps/libm-ieee754/s_fminl.c b/sysdeps/libm-ieee754/s_fminl.c new file mode 100644 index 0000000000..0f06194b77 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fminl.c @@ -0,0 +1,29 @@ +/* Return minimum numeric value of X and Y. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + + +long double +__fminl (long double x, long double y) +{ + return (islessequal (x, y) || isnan (y)) ? x : y; +} +weak_alias (__fminl, fminl) diff --git a/sysdeps/libm-ieee754/s_fpclassify.c b/sysdeps/libm-ieee754/s_fpclassify.c new file mode 100644 index 0000000000..dd4e742260 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fpclassify.c @@ -0,0 +1,43 @@ +/* Return classification value corresponding to argument. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + + +int +__fpclassify (double x) +{ + u_int32_t hx, lx; + int retval = FP_NORMAL; + + GET_WORDS (hx, lx, x); + lx |= hx & 0xfffff; + hx &= 0x7ff00000; + if ((hx | lx) == 0) + retval = FP_ZERO; + else if (hx == 0) + retval = FP_SUBNORMAL; + else if (hx == 0x7ff00000) + retval = lx != 0 ? FP_NAN : FP_INFINITE; + + return retval; +} diff --git a/sysdeps/libm-ieee754/s_fpclassifyf.c b/sysdeps/libm-ieee754/s_fpclassifyf.c new file mode 100644 index 0000000000..15bcfef4a6 --- /dev/null +++ b/sysdeps/libm-ieee754/s_fpclassifyf.c @@ -0,0 +1,42 @@ +/* Return classification value corresponding to argument. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + + +int +__fpclassifyf (float x) +{ + u_int32_t wx; + int retval = FP_NORMAL; + + GET_FLOAT_WORD (wx, x); + wx &= 0x7fffffff; + if (wx == 0) + retval = FP_ZERO; + else if (wx < 0x1000000) + retval = FP_SUBNORMAL; + else if (wx == 0x7f000000) + retval = wx > 0x7f000000 ? FP_NAN : FP_INFINITE; + + return retval; +} diff --git a/sysdeps/libm-ieee754/s_fpclassifyl.c b/sysdeps/libm-ieee754/s_fpclassifyl.c new file mode 100644 index 0000000000..ef37e6f0cc --- /dev/null +++ b/sysdeps/libm-ieee754/s_fpclassifyl.c @@ -0,0 +1,43 @@ +/* Return classification value corresponding to argument. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + + +int +__fpclassifyl (long double x) +{ + u_int32_t ex, hx, lx; + int retval = FP_NORMAL; + + GET_LDOUBLE_WORDS (ex, hx, lx, x); + hx |= lx; + ex &= 0x7fff; + if ((ex | hx) == 0) + retval = FP_ZERO; + else if (ex == 0) + retval = FP_SUBNORMAL; + else if (ex == 0x7fff) + retval = hx != 0 ? FP_NAN : FP_INFINITE; + + return retval; +} diff --git a/sysdeps/libm-ieee754/s_signbit.c b/sysdeps/libm-ieee754/s_signbit.c new file mode 100644 index 0000000000..ee340035fb --- /dev/null +++ b/sysdeps/libm-ieee754/s_signbit.c @@ -0,0 +1,32 @@ +/* Return nonzero value if number is negative. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + +int +__signbit (double x) +{ + int32_t hx; + + GET_HIGH_WORD (hx, x); + return hx & 0x80000000; +} diff --git a/sysdeps/libm-ieee754/s_signbitf.c b/sysdeps/libm-ieee754/s_signbitf.c new file mode 100644 index 0000000000..85418ea73f --- /dev/null +++ b/sysdeps/libm-ieee754/s_signbitf.c @@ -0,0 +1,32 @@ +/* Return nonzero value if number is negative. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + +int +__signbitf (float x) +{ + int32_t hx; + + GET_FLOAT_WORD (hx, x); + return hx & 0x80000000; +} diff --git a/sysdeps/libm-ieee754/s_signbitl.c b/sysdeps/libm-ieee754/s_signbitl.c new file mode 100644 index 0000000000..b12fdefff4 --- /dev/null +++ b/sysdeps/libm-ieee754/s_signbitl.c @@ -0,0 +1,32 @@ +/* Return nonzero value if number is negative. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library 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. + + 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <math.h> + +#include "math_private.h" + +int +__signbitl (long double x) +{ + int32_t e; + + GET_LDOUBLE_EXP (e, x); + return e & 0x8000; +} diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h index 0e3e2a3d8c..1a29a56d92 100644 --- a/sysdeps/m68k/fpu/__math.h +++ b/sysdeps/m68k/fpu/__math.h @@ -1,26 +1,27 @@ -/* Copyright (C) 1991, 92, 93, 94, 96 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Definitions of inline math functions implemented by the m68881/2. + Copyright (C) 1991, 92, 93, 94, 96, 97 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #ifdef __GNUC__ #include <sys/cdefs.h> -#ifdef __NO_M81_MATH_INLINES +#ifdef __LIBC_M81_MATH_INLINES /* This is used when defining the functions themselves. Define them with __ names, and with `static inline' instead of `extern inline' so the bodies will always be used, never an external function call. */ @@ -34,36 +35,35 @@ Cambridge, MA 02139, USA. */ /* Define a const math function. */ #define __m81_defun(rettype, func, args) \ - __m81_inline rettype \ - __m81_u(func) args __attribute__((__const__)); \ - __m81_inline rettype \ + __m81_inline rettype __attribute__((__const__)) \ __m81_u(func) args /* Define the three variants of a math function that has a direct implementation in the m68k fpu. FUNC is the name for C (which will be suffixed with f and l for the float and long double version, resp). OP is the name of the fpu operation (without leading f). */ -#define __inline_mathop(func, op) \ - __m81_defun (double, func, (double __mathop_x)) \ - { \ - double __result; \ - __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\ - return __result; \ - } \ - __m81_defun (float, func##f, (float __mathop_x)) \ - { \ - float __result; \ - __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\ - return __result; \ - } \ - __m81_defun (long double, func##l, (long double __mathop_x)) \ + +#ifdef __USE_MISC +#define __inline_mathop(func, op) \ + __inline_mathop1(double, func, op) \ + __inline_mathop1(float, __CONCAT(func,f), op) \ + __inline_mathop1(long double, __CONCAT(func,l), op) +#else +#define __inline_mathop(func, op) \ + __inline_mathop1(double, func, op) +#endif + +#define __inline_mathop1(float_type,func, op) \ + __m81_defun (float_type, func, (float_type __mathop_x)) \ { \ - long double __result; \ + float_type __result; \ __asm("f" __STRING(op) "%.x %1, %0" : "=f" (__result) : "f" (__mathop_x));\ return __result; \ } +#ifdef __LIBC_M81_MATH_INLINES /* ieee style elementary functions */ +/* These are internal to the implementation of libm. */ __inline_mathop(__ieee754_acos, acos) __inline_mathop(__ieee754_asin, asin) __inline_mathop(__ieee754_cosh, cosh) @@ -73,6 +73,7 @@ __inline_mathop(__ieee754_log10, log10) __inline_mathop(__ieee754_log, logn) __inline_mathop(__ieee754_sqrt, sqrt) __inline_mathop(__ieee754_atanh, atanh) +#endif __inline_mathop(__atan, atan) __inline_mathop(__cos, cos) @@ -88,31 +89,56 @@ __inline_mathop(__log1p, lognp1) __inline_mathop(__logb, log2) __inline_mathop(__significand, getman) +#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ + +__inline_mathop(atan, atan) +__inline_mathop(cos, cos) +__inline_mathop(sin, sin) +__inline_mathop(tan, tan) +__inline_mathop(tanh, tanh) +__inline_mathop(fabs, abs) +__inline_mathop(sqrt, sqrt) + +#if defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED) +__inline_mathop(rint, int) +__inline_mathop(expm1, etoxm1) +__inline_mathop(log1p, lognp1) +__inline_mathop(logb, log2) +#endif + +#ifdef __USE_MISC +__inline_mathop(significand, getman) +#endif + +#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ + /* This macro contains the definition for the rest of the inline functions, using __FLOAT_TYPE as the domain type and __S as the suffix for the function names. */ -#define __inline_functions(__float_type, __s) \ -__m81_defun (__float_type, \ - __ieee754_remainder##__s, (__float_type __x, __float_type __y)) \ +#ifdef __LIBC_M81_MATH_INLINES +/* Internally used functions. */ +#define __internal_inline_functions(float_type, s) \ +__m81_defun (float_type, __CONCAT(__ieee754_remainder,s), \ + (float_type __x, float_type __y)) \ { \ - __float_type __result; \ + float_type __result; \ __asm("frem%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); \ return __result; \ } \ \ -__m81_defun (__float_type, \ - __ieee754_fmod##__s, (__float_type __x, __float_type __y)) \ +__m81_defun (float_type, __CONCAT(__ieee754_fmod,s), \ + (float_type __x, float_type __y)) \ { \ - __float_type __result; \ + float_type __result; \ __asm("fmod%.x %1, %0" : "=f" (__result) : "f" (__y), "0" (__x)); \ return __result; \ } \ \ -__m81_defun (__float_type, \ - __ieee754_atan2##__s, (__float_type __y, __float_type __x)) \ +__m81_defun (float_type, __CONCAT(__ieee754_atan2,s), \ + (float_type __y, float_type __x)) \ { \ - __float_type __pi, __pi_2; \ + float_type __pi, __pi_2; \ \ __asm ("fmovecr%.x %#0, %0" : "=f" (__pi)); \ __asm ("fscale%.w %#-1, %0" : "=f" (__pi_2) : "0" (__pi)); \ @@ -121,16 +147,16 @@ __m81_defun (__float_type, \ if (__y > 0) \ { \ if (__x > __y) \ - return __m81_u(__atan##__s) (__y / __x); \ + return __m81_u(__CONCAT(__atan,s)) (__y / __x); \ else \ - return __pi_2 - __m81_u(__atan##__s) (__x / __y); \ + return __pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ } \ else \ { \ if (__x > -__y) \ - return __m81_u(__atan##__s) (__y / __x); \ + return __m81_u(__CONCAT(__atan,s)) (__y / __x); \ else \ - return -__pi_2 - __m81_u(__atan##__s) (__x / __y); \ + return -__pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ } \ } \ else \ @@ -138,58 +164,24 @@ __m81_defun (__float_type, \ if (__y > 0) \ { \ if (-__x < __y) \ - return __pi + __m81_u(__atan##__s) (__y / __x); \ + return __pi + __m81_u(__CONCAT(__atan,s)) (__y / __x); \ else \ - return __pi_2 - __m81_u(__atan##__s) (__x / __y); \ + return __pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ } \ else \ { \ if (-__x > -__y) \ - return -__pi + __m81_u(__atan##__s) (__y / __x); \ + return -__pi + __m81_u(__CONCAT(__atan,s)) (__y / __x); \ else \ - return -__pi_2 - __m81_u(__atan##__s) (__x / __y); \ + return -__pi_2 - __m81_u(__CONCAT(__atan,s)) (__x / __y); \ } \ } \ } \ \ -__m81_inline __float_type \ -__m81_u(__frexp##__s)(__float_type __value, int *__expptr) \ -{ \ - __float_type __mantissa, __exponent; \ - int __iexponent; \ - if (__value == 0.0) \ - { \ - *__expptr = 0; \ - return __value; \ - } \ - __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value)); \ - __iexponent = (int) __exponent + 1; \ - *__expptr = __iexponent; \ - __asm("fscale%.l %2, %0" : "=f" (__mantissa) \ - : "0" (__value), "dmi" (-__iexponent)); \ - return __mantissa; \ -} \ - \ -__m81_defun (__float_type, __floor##__s, (__float_type __x)) \ -{ \ - __float_type __result; \ - unsigned long int __ctrl_reg; \ - __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ - /* Set rounding towards negative infinity. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" ((__ctrl_reg & ~0x10) | 0x20)); \ - /* Convert X to an integer, using -Inf rounding. */ \ - __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x)); \ - /* Restore the previous rounding mode. */ \ - __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ - : "dmi" (__ctrl_reg)); \ - return __result; \ -} \ - \ -__m81_defun (__float_type, \ - __ieee754_pow##__s, (__float_type __x, __float_type __y)) \ +__m81_defun (float_type, __CONCAT(__ieee754_pow,s), \ + (float_type __x, float_type __y)) \ { \ - __float_type __result; \ + float_type __result; \ if (__x == 0.0) \ { \ if (__y <= 0.0) \ @@ -209,12 +201,12 @@ __m81_defun (__float_type, \ __asm("ftwotox%.x %1, %0" : "=f" (__result) : "f" (__y)); \ else if (__x < 0.0) \ { \ - __float_type __temp = __m81_u (__rint##__s) (__y); \ + float_type __temp = __m81_u (__CONCAT(__rint,s)) (__y); \ if (__y == __temp) \ { \ int __i = (int) __y; \ - __result = (__m81_u(__ieee754_exp##__s) \ - (__y * __m81_u(__ieee754_log##__s) (-__x))); \ + __result = (__m81_u(__CONCAT(__ieee754_exp,s)) \ + (__y * __m81_u(__CONCAT(__ieee754_log,s)) (-__x))); \ if (__i & 1) \ __result = -__result; \ } \ @@ -222,14 +214,66 @@ __m81_defun (__float_type, \ __result = 0.0 / 0.0; \ } \ else \ - __result = (__m81_u(__ieee754_exp##__s) \ - (__y * __m81_u(__ieee754_log##__s) (__x))); \ + __result = (__m81_u(__CONCAT(__ieee754_exp,s)) \ + (__y * __m81_u(__CONCAT(__ieee754_log,s)) (__x))); \ return __result; \ } \ \ -__m81_defun (__float_type, __ceil##__s, (__float_type __x)) \ +__m81_defun (float_type, __CONCAT(__ieee754_scalb,s), \ + (float_type __x, float_type __n)) \ { \ - __float_type __result; \ + float_type __result; \ + __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x)); \ + return __result; \ +} + +__internal_inline_functions (double,) +__internal_inline_functions (float,f) +__internal_inline_functions (long double,l) +#undef __internal_inline_functions + +#endif /* __LIBC_M81_MATH_INLINES */ + +/* The rest of the functions are available to the user. */ + +#define __inline_functions(float_type, s) \ +__m81_inline float_type \ +__m81_u(__CONCAT(__frexp,s))(float_type __value, int *__expptr) \ +{ \ + float_type __mantissa, __exponent; \ + int __iexponent; \ + if (__value == 0.0) \ + { \ + *__expptr = 0; \ + return __value; \ + } \ + __asm("fgetexp%.x %1, %0" : "=f" (__exponent) : "f" (__value)); \ + __iexponent = (int) __exponent + 1; \ + *__expptr = __iexponent; \ + __asm("fscale%.l %2, %0" : "=f" (__mantissa) \ + : "0" (__value), "dmi" (-__iexponent)); \ + return __mantissa; \ +} \ + \ +__m81_defun (float_type, __CONCAT(__floor,s), (float_type __x)) \ +{ \ + float_type __result; \ + unsigned long int __ctrl_reg; \ + __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ + /* Set rounding towards negative infinity. */ \ + __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ + : "dmi" ((__ctrl_reg & ~0x10) | 0x20)); \ + /* Convert X to an integer, using -Inf rounding. */ \ + __asm __volatile__ ("fint%.x %1, %0" : "=f" (__result) : "f" (__x)); \ + /* Restore the previous rounding mode. */ \ + __asm __volatile__ ("fmove%.l %0, %!" : /* No outputs. */ \ + : "dmi" (__ctrl_reg)); \ + return __result; \ +} \ + \ +__m81_defun (float_type, __CONCAT(__ceil,s), (float_type __x)) \ +{ \ + float_type __result; \ unsigned long int __ctrl_reg; \ __asm __volatile__ ("fmove%.l %!, %0" : "=dm" (__ctrl_reg)); \ /* Set rounding towards positive infinity. */ \ @@ -243,16 +287,16 @@ __m81_defun (__float_type, __ceil##__s, (__float_type __x)) \ return __result; \ } \ \ -__m81_inline __float_type \ -__m81_u(__modf##__s)(__float_type __value, __float_type *__iptr) \ +__m81_inline float_type \ +__m81_u(__CONCAT(__modf,s))(float_type __value, float_type *__iptr) \ { \ - __float_type __modf_int; \ + float_type __modf_int; \ __asm ("fintrz%.x %1, %0" : "=f" (__modf_int) : "f" (__value)); \ *__iptr = __modf_int; \ return __value - __modf_int; \ } \ \ -__m81_defun (int, __isinf##__s, (__float_type __value)) \ +__m81_defun (int, __CONCAT(__isinf,s), (float_type __value)) \ { \ /* There is no branch-condition for infinity, \ so we must extract and examine the condition codes manually. */ \ @@ -262,7 +306,7 @@ __m81_defun (int, __isinf##__s, (__float_type __value)) \ return (__fpsr & (2 << 24)) ? (__fpsr & (8 << 24) ? -1 : 1) : 0; \ } \ \ -__m81_defun (int, __isnan##__s, (__float_type __value)) \ +__m81_defun (int, __CONCAT(__isnan,s), (float_type __value)) \ { \ char __result; \ __asm("ftst%.x %1\n" \ @@ -270,7 +314,7 @@ __m81_defun (int, __isnan##__s, (__float_type __value)) \ return __result; \ } \ \ -__m81_defun (int, __finite##__s, (__float_type __value)) \ +__m81_defun (int, __CONCAT(__finite,s), (float_type __value)) \ { \ /* There is no branch-condition for infinity, so we must extract and \ examine the condition codes manually. */ \ @@ -280,34 +324,94 @@ __m81_defun (int, __finite##__s, (__float_type __value)) \ return (__fpsr & (3 << 24)) == 0; \ } \ \ -__m81_defun (int, __ilogb##__s, (__float_type __x)) \ +__m81_defun (int, __CONCAT(__ilogb,s), (float_type __x)) \ { \ - __float_type __result; \ + float_type __result; \ if (__x == 0.0) \ return 0x80000001; \ __asm("fgetexp%.x %1, %0" : "=f" (__result) : "f" (__x)); \ return (int) __result; \ } \ \ -__m81_defun (__float_type, \ - __ieee754_scalb##__s, (__float_type __x, __float_type __n)) \ +__m81_defun (float_type, __CONCAT(__scalbn,s), (float_type __x, int __n)) \ { \ - __float_type __result; \ - __asm ("fscale%.x %1, %0" : "=f" (__result) : "f" (__n), "0" (__x)); \ - return __result; \ -} \ - \ -__m81_defun (__float_type, __scalbn##__s, (__float_type __x, int __n)) \ -{ \ - __float_type __result; \ + float_type __result; \ __asm ("fscale%.l %1, %0" : "=f" (__result) : "dmi" (__n), "0" (__x)); \ return __result; \ } /* This defines the three variants of the inline functions. */ -__inline_functions (double, ) -__inline_functions (float, f) -__inline_functions (long double, l) +__inline_functions (double,) +__inline_functions (float,f) +__inline_functions (long double,l) #undef __inline_functions +#if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ + +/* Define inline versions of the user visible functions. */ + +#define __inline_forward_c(rettype, name, args1, args2) \ +extern __inline rettype __attribute__((__const__)) \ +name args1 \ +{ \ + return __CONCAT(__,name) args2; \ +} + +#define __inline_forward(rettype, name, args1, args2) \ +extern __inline rettype name args1 \ +{ \ + return __CONCAT(__,name) args2; \ +} + +__inline_forward(double,frexp, (double __value, int *__expptr), + (__value, __expptr)) +__inline_forward_c(double,floor, (double __x), (__x)) +__inline_forward_c(double,ceil, (double __x), (__x)) +__inline_forward(double,modf, (double __value, double *__iptr), + (__value, __iptr)) +#ifdef __USE_MISC +__inline_forward_c(int,isinf, (double __value), (__value)) +__inline_forward_c(int,finite, (double __value), (__value)) +__inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n)) +#endif +#if defined __USE_MISC || defined __USE_XOPEN +__inline_forward_c(int,isnan, (double __value), (__value)) +__inline_forward_c(int,ilogb, (double __value), (__value)) +#endif + +#ifdef __USE_MISC + +__inline_forward(float,frexpf, (float __value, int *__expptr), + (__value, __expptr)) +__inline_forward_c(float,floorf, (float __x), (__x)) +__inline_forward_c(float,ceilf, (float __x), (__x)) +__inline_forward(float,modff, (float __value, float *__iptr), + (__value, __iptr)) +__inline_forward_c(int,isinff, (float __value), (__value)) +__inline_forward_c(int,finitef, (float __value), (__value)) +__inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n)) +__inline_forward_c(int,isnanf, (float __value), (__value)) +__inline_forward_c(int,ilogbf, (float __value), (__value)) + +__inline_forward(long double,frexpl, (long double __value, int *__expptr), + (__value, __expptr)) +__inline_forward_c(long double,floorl, (long double __x), (__x)) +__inline_forward_c(long double,ceill, (long double __x), (__x)) +__inline_forward(long double,modfl, + (long double __value, long double *__iptr), + (__value, __iptr)) +__inline_forward_c(int,isinfl, (long double __value), (__value)) +__inline_forward_c(int,finitel, (long double __value), (__value)) +__inline_forward_c(long double,scalbnl, (long double __x, int __n), + (__x, __n)) +__inline_forward_c(int,isnanl, (long double __value), (__value)) +__inline_forward_c(int,ilogbl, (long double __value), (__value)) + +#endif /* __USE_MISC */ + +#undef __inline_forward +#undef __inline_forward_c + +#endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ + #endif /* GCC. */ diff --git a/sysdeps/m68k/fpu/e_acos.c b/sysdeps/m68k/fpu/e_acos.c index 61c374d917..7ea9fb014b 100644 --- a/sysdeps/m68k/fpu/e_acos.c +++ b/sysdeps/m68k/fpu/e_acos.c @@ -1,22 +1,22 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#define __NO_M81_MATH_INLINES +#define __LIBC_M81_MATH_INLINES #include <math.h> #include "math_private.h" diff --git a/sysdeps/m68k/fpu/e_fmod.c b/sysdeps/m68k/fpu/e_fmod.c index bf2f7ed1bb..1daa453618 100644 --- a/sysdeps/m68k/fpu/e_fmod.c +++ b/sysdeps/m68k/fpu/e_fmod.c @@ -1,22 +1,22 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#define __NO_M81_MATH_INLINES +#define __LIBC_M81_MATH_INLINES #include <math.h> #include "math_private.h" diff --git a/sysdeps/m68k/fpu/k_cos.c b/sysdeps/m68k/fpu/k_cos.c index 6bb9090568..516d45904e 100644 --- a/sysdeps/m68k/fpu/k_cos.c +++ b/sysdeps/m68k/fpu/k_cos.c @@ -1,22 +1,22 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#define __NO_M81_MATH_INLINES +#define __LIBC_M81_MATH_INLINES #include <math.h> #include "math_private.h" diff --git a/sysdeps/m68k/fpu/k_sin.c b/sysdeps/m68k/fpu/k_sin.c index f10c7f9801..348bc8fd9d 100644 --- a/sysdeps/m68k/fpu/k_sin.c +++ b/sysdeps/m68k/fpu/k_sin.c @@ -1,22 +1,22 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#define __NO_M81_MATH_INLINES +#define __LIBC_M81_MATH_INLINES #include <math.h> #include "math_private.h" diff --git a/sysdeps/m68k/fpu/k_tan.c b/sysdeps/m68k/fpu/k_tan.c index 9c222cd6e1..c38327e571 100644 --- a/sysdeps/m68k/fpu/k_tan.c +++ b/sysdeps/m68k/fpu/k_tan.c @@ -1,22 +1,22 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. +/* Copyright (C) 1996, 1997 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 Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library 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. -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 -Library General Public License for more details. + 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ -#define __NO_M81_MATH_INLINES +#define __LIBC_M81_MATH_INLINES #include <math.h> #include "math_private.h" diff --git a/sysdeps/m68k/fpu/s_atan.c b/sysdeps/m68k/fpu/s_atan.c index 99b3024326..f3d6960dc1 100644 --- a/sysdeps/m68k/fpu/s_atan.c +++ b/sysdeps/m68k/fpu/s_atan.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,7 +29,8 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) float_type -DEFUN(__CONCATX(__,FUNC), (x), float_type x) +__CONCATX(__,FUNC) (x) + float_type x; { return __m81_u(__CONCATX(__,FUNC))(x); } diff --git a/sysdeps/m68k/fpu/s_frexp.c b/sysdeps/m68k/fpu/s_frexp.c index 8b38086e27..84a9a0b45d 100644 --- a/sysdeps/m68k/fpu/s_frexp.c +++ b/sysdeps/m68k/fpu/s_frexp.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,9 +29,12 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) float_type -DEFUN(__CONCATX(__,FUNC), (value, expptr), float_type value AND int *expptr) +__CONCATX(__,FUNC) (value, expptr) + float_type value; + int *expptr; { return __m81_u(__CONCATX(__,FUNC))(value, expptr); } + #define weak_aliasx(a,b) weak_alias(a,b) weak_aliasx (__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/fpu/s_ilogb.c b/sysdeps/m68k/fpu/s_ilogb.c index 39c871481d..a081a884d4 100644 --- a/sysdeps/m68k/fpu/s_ilogb.c +++ b/sysdeps/m68k/fpu/s_ilogb.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,7 +29,8 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) int -DEFUN(__CONCATX(__,FUNC), (x), float_type x) +__CONCATX(__,FUNC) (x) + float_type x; { return __m81_u(__CONCATX(__,FUNC))(x); } diff --git a/sysdeps/m68k/fpu/s_isinf.c b/sysdeps/m68k/fpu/s_isinf.c index 7d4b1c44a5..fa0d1d56db 100644 --- a/sysdeps/m68k/fpu/s_isinf.c +++ b/sysdeps/m68k/fpu/s_isinf.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,7 +29,8 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) int -DEFUN(__CONCATX(__,FUNC), (x), float_type x) +__CONCATX(__,FUNC) (x) + float_type x; { return __m81_u(__CONCATX(__,FUNC))(x); } diff --git a/sysdeps/m68k/fpu/s_modf.c b/sysdeps/m68k/fpu/s_modf.c index 426d847ebd..6428afc3be 100644 --- a/sysdeps/m68k/fpu/s_modf.c +++ b/sysdeps/m68k/fpu/s_modf.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,9 +29,12 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) float_type -DEFUN(__CONCATX(__,FUNC), (x, iptr), float_type x AND float_type *iptr) +__CONCATX(__,FUNC) (x, iptr) + float_type x; + float_type *iptr; { return __m81_u(__CONCATX(__,FUNC))(x, iptr); } + #define weak_aliasx(a,b) weak_alias(a,b) weak_aliasx(__CONCATX(__,FUNC), FUNC) diff --git a/sysdeps/m68k/fpu/s_scalbn.c b/sysdeps/m68k/fpu/s_scalbn.c index 6d2b74a3d0..1d43a75de0 100644 --- a/sysdeps/m68k/fpu/s_scalbn.c +++ b/sysdeps/m68k/fpu/s_scalbn.c @@ -1,23 +1,22 @@ -/* Copyright (C) 1996 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 Library General Public License as -published by the Free Software Foundation; either version 2 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 -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#include <ansidecl.h> -#define __NO_M81_MATH_INLINES +/* Copyright (C) 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define __LIBC_M81_MATH_INLINES #include <math.h> #ifndef FUNC @@ -30,7 +29,9 @@ Cambridge, MA 02139, USA. */ #define __CONCATX(a,b) __CONCAT(a,b) float_type -DEFUN(__CONCATX(__,FUNC), (x, exp), float_type x AND int exp) +__CONCATX(__,FUNC) (x, exp) + float_type x; + int exp; { return __m81_u(__CONCATX(__,FUNC))(x, exp); } diff --git a/sysdeps/posix/Makefile b/sysdeps/posix/Makefile index a0122c7c05..9770dbb358 100644 --- a/sysdeps/posix/Makefile +++ b/sysdeps/posix/Makefile @@ -21,15 +21,12 @@ $(common-objpfx)stdio_lim.h: $(common-objpfx)mk-stdiolim mv $@-t $@ # Turn into a version that works when cd'd into $(objdir). -cded-objdir-includes = $(patsubst -I$$cwd//%,-I/%,\ - $(patsubst -I%,-I$$cwd/%,$(+includes))) -# $(BUILD_CFLAGS) needs to come last because it contains unwanted -Is. +mk-stdiolim-CFLAGS = $(patsubst -I$(shell pwd)//%,-I/%,\ + $(patsubst -I%,-I$(shell pwd)/%,$(+includes))) +# $(ALL_BUILD_CFLAGS) needs to come last because it contains unwanted -Is. $(common-objpfx)mk-stdiolim: $(sysdep_dir)/posix/mk-stdiolim.c \ $(..)posix/posix1_lim.h local_lim.h - cwd=`pwd`; cd $(objpfx).; \ - $(BUILD_CC) $(cded-objdir-includes) $(BUILD_CFLAGS) \ - $$cwd/$< -o $(patsubst $(common-objpfx)%,$(..)%,$@) - + $(common-objdir-compile) common-generated := $(common-generated) stdio_lim.h mk-stdiolim before-compile := $(before-compile) $(common-objpfx)stdio_lim.h diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile index 3cef7e735b..c9c5ed8fdc 100644 --- a/sysdeps/unix/Makefile +++ b/sysdeps/unix/Makefile @@ -23,20 +23,20 @@ ifeq (,$(filter-out $(sysdep_dir)/stub/ $(common-objpfx),\ $(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/local_lim.h)))))) ifneq (,$(wildcard $(sysincludedir)/sys/param.h)) -local_lim-CFLAGS := $(local_lim-CFLAGS) -DHAVE_SYS_PARAM_H +mk-local_lim-CFLAGS += -DHAVE_SYS_PARAM_H endif ifneq (,$(wildcard $(sysincludedir)/sys/limits.h)) -local_lim-CFLAGS := $(local_lim-CFLAGS) -DHAVE_SYS_LIMITS_H +mk-local_lim-CFLAGS += -DHAVE_SYS_LIMITS_H endif ifneq (,$(wildcard $(sysincludedir)/limits.h)) -local_lim-CFLAGS := $(local_lim-CFLAGS) -DHAVE_LIMITS_H +mk-local_lim-CFLAGS += -DHAVE_LIMITS_H endif $(common-objpfx)local_lim.h: $(common-objpfx)mk-local_lim - if $(dir $<)$(notdir $<) > $@-t; then mv $@-t $@; else XXX; fi + $(dir $<)$(notdir $<) > $@-t + mv -f $@-t $@ $(common-objpfx)mk-local_lim: $(sysdep_dir)/unix/mk-local_lim.c - cwd=`pwd`; cd $(@D); \ - $(BUILD_CC) $(BUILD_CFLAGS) $(local_lim-CFLAGS) $$cwd/$< -o $(@F) + $(common-objdir-compile) before-compile := $(before-compile) $(common-objpfx)local_lim.h common-generated := $(common-generated) local_lim.h mk-local_lim @@ -50,7 +50,7 @@ ifeq (,$(filter-out $(sysdep_dir)/stub/ $(common-objpfx),\ before-compile := $(before-compile) $(common-objpfx)sys/param.h $(common-objpfx)sys/param.h: $(sysincludedir)/sys/param.h - -mkdir $(@D:%/=%) + $(make-target-directory) (echo '#ifndef _GNU_SYS_PARAM_H'; \ echo '#define _GNU_SYS_PARAM_H 1'; \ echo '#include <endian.h>'; \ @@ -73,16 +73,17 @@ $(common-objpfx)param.h.c: $(sysincludedir)/sys/param.h $(common-objpfx)param.h.dep: $(common-objpfx)param.h.c \ $(sysdep_dir)/unix/Makefile $(+mkdep) -I$(sysincludedir) $< \ - | sed > $@ \ + | sed > $@-t \ -e 's@^.*:@@' \ -e 's@$<@@g' \ -e 's@$(sysincludedir)/*@@g' \ -e 's@\\$$@@' \ -e 's@^@sys/param.h-includes := $$(sys/param.h-includes) @' + mv $@-t $@ # Get the generated definition of sys/param.h-includes. ifndef no_deps -include $(common-objpfx)param.h.dep +-include $(common-objpfx)param.h.dep endif # Don't preempt our own headers. @@ -100,7 +101,7 @@ ifdef sys/param.h-includes # Copy the system files to $(common-objdir). $(addprefix $(common-objpfx),$(sys/param.h-includes)): $(common-objpfx)%: \ $(sysincludedir)/% - -mkdir $(@D:%/=%) + $(make-target-directory) # Some of these files sometimes contain conflicting declarations for htons, # ntohs, etc. They also often contain definitions of *_ENDIAN and # BYTE_ORDER, which we define ourselves in <endian.h>. @@ -146,7 +147,8 @@ $(common-objpfx)make-errnos.c: $(sysdep_dir)/unix/errnos-tmpl.c \ $(common-objpfx)errnos: $(wildcard $(sysincludedir)/errno.h \ $(sysincludedir)/sys/errno.h) - cat $^ | sed -n 's/^#define[ ]*\(E[A-Z0-9][A-Z0-9]*\)[ ].*$$/\1/p' > $@-tmp + sed -n 's/^#define[ ]*\(E[A-Z0-9][A-Z0-9]*\)[ ].*$$/\1/p' \ + $^ > $@-tmp mv $@-tmp $@ common-generated := $(common-generated) \ @@ -169,8 +171,7 @@ make-ioctls-CFLAGS := $(subst /,_,$(subst .,_,\ $(ioctl-includes)))) $(common-objpfx)make-ioctls: $(common-objpfx)make-ioctls.c - cd $(@D); $(BUILD_CC) $(BUILD_CFLAGS) $(make-ioctls-CFLAGS) \ - $(<:$(common-objpfx)%=%) -o $(@F) + $(common-objdir-compile) $(common-objpfx)make-ioctls.c: $(sysdep_dir)/unix/ioctls-tmpl.c \ $(sysdep_dir)/unix/ioctls.awk \ @@ -247,7 +248,7 @@ ifdef syscall.h # Transmogrify any of several formats of the file into the one we want. $(common-objpfx)sys/syscall.h: $(syscall.h) - -mkdir $(common-objpfx)sys + $(make-target-directory) tr '[A-Z]' '[a-z]' < $< | \ sed -e 's/[ ]sys_/ /' \ -e 's/^#define[ ]*\([a-z0-9_]*\)[ ]*/#define SYS_\1 /' \ diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S index 3d9f6dca5f..f44686b9a4 100644 --- a/sysdeps/unix/sysv/linux/alpha/brk.S +++ b/sysdeps/unix/sysv/linux/alpha/brk.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Brendan Kehoe <brendan@zen.org>, 1993. @@ -50,20 +50,23 @@ LEAF(__brk, 0) ldiq v0, __NR_brk call_pal PAL_callsys + /* Be prepared for an OSF-style brk. */ + bne a3, $err1 + beq v0, $ok + /* Correctly handle the brk(0) query case. */ cmoveq a0, v0, a0 - - subq a0, v0, t0 - bne t0, error + xor a0, v0, t0 + bne t0, $err0 /* Update __curbrk and return cleanly. */ - stq a0, __curbrk mov zero, v0 +$ok: stq a0, __curbrk ret /* What a horrible way to die. */ -error: ldi v0, ENOMEM - jmp zero, __syscall_error +$err0: ldi v0, ENOMEM +$err1: jmp zero, __syscall_error END(__brk) diff --git a/sysdeps/unix/sysv/linux/netinet/in_systm.h b/sysdeps/unix/sysv/linux/netinet/in_systm.h index f481c5511a..902fe6ea0e 100644 --- a/sysdeps/unix/sysv/linux/netinet/in_systm.h +++ b/sysdeps/unix/sysv/linux/netinet/in_systm.h @@ -1 +1,41 @@ -#include <linux/in_systm.h> +/* System specific type definitions for networking code. + Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _NETINET_IN_SYSTM_H +#define _NETINET_IN_SYSTM_H 1 + +#include <sys/cdefs.h> +#include <sys/types.h> + +__BEGIN_DECLS + +/* + * Network order versions of various data types. Unfortunately, BSD + * assumes specific sizes for shorts (16 bit) and longs (32 bit) which + * don't hold in general. As a consequence, the network order versions + * may not reflect the actual size of the native data types. + */ + +typedef u_int16_t n_short; /* short as received from the net */ +typedef u_int32_t n_long; /* long as received from the net */ +typedef u_int32_t n_time; /* ms since 00:00 GMT, byte rev */ + +__END_DECLS + +#endif /* netinet/in_systm.h */ diff --git a/sysdeps/unix/sysv/linux/poll.c b/sysdeps/unix/sysv/linux/poll.c index 198819970a..337b85005f 100644 --- a/sysdeps/unix/sysv/linux/poll.c +++ b/sysdeps/unix/sysv/linux/poll.c @@ -1 +1,53 @@ +/* Poll system call, with emulation if it is not available. + Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <sys/poll.h> + +extern int __syscall_poll __P ((struct pollfd *fds, unsigned int nfds, + int timeout)); +extern int __emulate_poll __P ((struct pollfd *fds, unsigned long int nfds, + int timeout)); + +/* The real implementation. */ +int +poll (fds, nfds, timeout) + struct pollfd *fds; + unsigned long int nfds; + int timeout; +{ + static int must_emulate = 0; + + if (!must_emulate) + { + int retval = __syscall_poll (fds, nfds, timeout); + + if (retval >= 0 || errno != ENOSYS) + return retval; + + must_emulate = 1; + } + + return __emulate_poll (fds, nfds, timeout); +} + + +/* Get the emulation code. */ +#define poll(fds, nfds, timeout) __emulate_poll (fds, nfds, timeout) #include <sysdeps/unix/bsd/poll.c> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 20ac94ae26..867e3bce3e 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -30,6 +30,7 @@ nanosleep - nanosleep 2 __libc_nanosleep __nanosleep nanosleep pause - pause 0 __libc_pause pause personality init-first personality 1 __personality personality pipe - pipe 1 __pipe pipe +s_poll EXTRA poll 3 __syscall_poll query_module EXTRA query_module 5 query_module s_getdents EXTRA getdents 3 __getdents s_getpriority getpriority getpriority 2 __syscall_getpriority diff --git a/sysdeps/unix/sysv/sysv4/solaris2/Makefile b/sysdeps/unix/sysv/sysv4/solaris2/Makefile index 3f86c46cc8..3ad90f748a 100644 --- a/sysdeps/unix/sysv/sysv4/solaris2/Makefile +++ b/sysdeps/unix/sysv/sysv4/solaris2/Makefile @@ -3,4 +3,4 @@ # along the way (e.g., glue-ctype) will fail because it'll try to link # with the libc.a being *constructed* in $(objdir). As a work-around, # we add this to each native-compile. -BUILD_CFLAGS := $(BUILD_CFLAGS) -L/lib +ALL_BUILD_CFLAGS += -L/lib |