summaryrefslogtreecommitdiffstats
path: root/lib/libc/powerpc
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2004-07-09 03:32:40 +0000
committerdas <das@FreeBSD.org>2004-07-09 03:32:40 +0000
commit65d8d759b1ed37f98e49000925a5e89487cf95fd (patch)
tree5275f48bb8c8196ab5e9ffc78ef28924e9a8a56f /lib/libc/powerpc
parent5ef7c3d0ff72cc97a9a5ed0935c3a12630e46b1b (diff)
downloadFreeBSD-src-65d8d759b1ed37f98e49000925a5e89487cf95fd.zip
FreeBSD-src-65d8d759b1ed37f98e49000925a5e89487cf95fd.tar.gz
Implement the classification macros isfinite(), isinf(), isnan(), and
isnormal() the hard way, rather than relying on fpclassify(). This is a lose in the sense that we need a total of 12 functions, but it is necessary for binary compatibility because we have never bumped libm's major version number. In particular, isinf(), isnan(), and isnanf() were BSD libc functions before they were C99 macros, so we can't reimplement them in terms of fpclassify() without adding a dependency on libc.so.5. I have tried to arrange things so that programs that could be compiled in FreeBSD 4.X will generate the same external references when compiled in 5.X. At the same time, the new macros should remain C99-compliant. The isinf() and isnan() functions remain in libc for historical reasons; however, I have moved the functions that implement the macros isfinite() and isnormal() to libm where they belong. Moreover, half a dozen MD versions of isinf() and isnan() have been replaced with MI versions that work equally well. Prodded by: kris
Diffstat (limited to 'lib/libc/powerpc')
-rw-r--r--lib/libc/powerpc/gen/Makefile.inc2
-rw-r--r--lib/libc/powerpc/gen/isinf.c67
2 files changed, 1 insertions, 68 deletions
diff --git a/lib/libc/powerpc/gen/Makefile.inc b/lib/libc/powerpc/gen/Makefile.inc
index 8a431da..22689d7 100644
--- a/lib/libc/powerpc/gen/Makefile.inc
+++ b/lib/libc/powerpc/gen/Makefile.inc
@@ -2,7 +2,7 @@
SRCS += _ctx_start.S fabs.S flt_rounds.c fpgetmask.c fpgetround.c \
fpgetsticky.c fpsetmask.c fpsetround.c fpsetsticky.c frexp.c \
- infinity.c isinf.c ldexp.c makecontext.c modf.c _setjmp.S \
+ infinity.c ldexp.c makecontext.c modf.c _setjmp.S \
setjmp.S sigsetjmp.S syncicache.c
diff --git a/lib/libc/powerpc/gen/isinf.c b/lib/libc/powerpc/gen/isinf.c
deleted file mode 100644
index 0b9ef6c..0000000
--- a/lib/libc/powerpc/gen/isinf.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1994, 1995 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- *
- * $NetBSD: isinf.c,v 1.1 1995/02/10 17:50:23 cgd Exp $
- * from: FreeBSD: src/lib/libc/alpha/gen/isinf.c,v 1.2 2000/05/10
- */
-
-/* For binary compat; to be removed in FreeBSD 6.0. */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/types.h>
-#include <machine/ieee.h>
-#include <math.h>
-
-#undef isnan
-#undef isinf
-
-int
-isnan(double d)
-{
- union {
- double v;
- struct ieee_double s;
- } u;
-
- u.v = d;
- return (u.s.dbl_exp == DBL_EXP_INFNAN &&
- (u.s.dbl_frach || u.s.dbl_fracl));
-}
-
-int
-isinf(double d)
-{
- union {
- double v;
- struct ieee_double s;
- } u;
-
- u.v = d;
- return (u.s.dbl_exp == DBL_EXP_INFNAN &&
- !u.s.dbl_frach && !u.s.dbl_fracl);
-}
OpenPOWER on IntegriCloud