summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>2006-07-05 20:06:42 +0000
committerbde <bde@FreeBSD.org>2006-07-05 20:06:42 +0000
commitac26a61be9496259b14e0c20c12cc17a612c84a0 (patch)
tree567070d4c383a475c1b263006cf91556ea1e3b82 /lib
parentfe0b47d3f1e762a919d9c613bffd80316d8e44af (diff)
downloadFreeBSD-src-ac26a61be9496259b14e0c20c12cc17a612c84a0.zip
FreeBSD-src-ac26a61be9496259b14e0c20c12cc17a612c84a0.tar.gz
Removed the optimized asm versions of scalb() and scalbf(). These
functions are only for compatibility with obsolete standards. They shouldn't be used, so they shouldn't be optimized. Use the generic versions instead. This fixes scalbf() as a side effect. The optimized asm version left garbage on the FP stack. I fixed the corresponding bug in the optimized asm scalb() and scalbn() in 1996. NetBSD fixed it in scalb(), scalbn() and scalbnf() in 1999 but missed fixing it in scalbf(). Then in 2005 the bug was reimplemented in FreeBSD by importing NetBSD's scalbf(). The generic versions have slightly different error handling: - the asm versions blindly round the second parameter to a (floating point) integer and proceed, while the generic versions return NaN if this rounding changes the value. POSIX permits both behaviours (these functions are XSI extensions and the behaviour for a bogus non-integral second parameter is unspecified). Apart from this and the bug in scalbf(), the behaviour of the generic versions seems to be identical. (I only exhusatively tested generic_scalbf(1.0F, anyfloat) == asm_scalb(1.0F, anyfloat). This covers many representative corner cases involving NaNs and Infs but doesn't test exception flags. The brokenness of scalbf() showed up as weird behaviour after testing just 7 integer cases sequentially.)
Diffstat (limited to 'lib')
-rw-r--r--lib/msun/i387/Makefile.inc4
-rw-r--r--lib/msun/i387/e_scalb.S45
-rw-r--r--lib/msun/i387/e_scalbf.S15
3 files changed, 2 insertions, 62 deletions
diff --git a/lib/msun/i387/Makefile.inc b/lib/msun/i387/Makefile.inc
index c02653e..aa1837f 100644
--- a/lib/msun/i387/Makefile.inc
+++ b/lib/msun/i387/Makefile.inc
@@ -1,13 +1,13 @@
# $FreeBSD$
ARCH_SRCS = e_exp.S e_fmod.S e_log.S e_log10.S \
- e_remainder.S e_scalb.S e_sqrt.S s_ceil.S s_copysign.S \
+ e_remainder.S e_sqrt.S s_ceil.S s_copysign.S \
s_cos.S s_finite.S s_floor.S s_llrint.S s_logb.S s_lrint.S \
s_remquo.S s_rint.S s_scalbn.S s_significand.S s_sin.S s_tan.S \
s_trunc.S
# float counterparts
-ARCH_SRCS+= e_log10f.S e_logf.S e_remainderf.S e_scalbf.S \
+ARCH_SRCS+= e_log10f.S e_logf.S e_remainderf.S \
e_sqrtf.S s_ceilf.S s_copysignf.S s_floorf.S \
s_llrintf.S s_logbf.S s_lrintf.S \
s_remquof.S s_rintf.S s_scalbnf.S s_significandf.S s_truncf.S
diff --git a/lib/msun/i387/e_scalb.S b/lib/msun/i387/e_scalb.S
deleted file mode 100644
index 1aa510f..0000000
--- a/lib/msun/i387/e_scalb.S
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 1994 Winning Strategies, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Winning Strategies, Inc.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Written by:
- * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
- */
-
-#include <machine/asm.h>
-
-RCSID("$FreeBSD$")
-
-ENTRY(scalb)
- fldl 12(%esp)
- fldl 4(%esp)
- fscale
- fstp %st(1)
- ret
diff --git a/lib/msun/i387/e_scalbf.S b/lib/msun/i387/e_scalbf.S
deleted file mode 100644
index d937dd5..0000000
--- a/lib/msun/i387/e_scalbf.S
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <machine/asm.h>
-
-__FBSDID("$FreeBSD$");
-/* RCSID("$NetBSD: e_scalbf.S,v 1.1 1996/07/03 16:50:24 jtc Exp $") */
-
-ENTRY(scalbf)
- flds 8(%esp)
- flds 4(%esp)
- fscale
- ret
OpenPOWER on IntegriCloud