This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug math/887] Math library function "logb" and "nextafter" inconsistent
- From: "rsa at us dot ibm.com" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: Thu, 26 Apr 2012 18:15:43 +0000
- Subject: [Bug math/887] Math library function "logb" and "nextafter" inconsistent
- Auto-submitted: auto-generated
- References: <bug-887-131@http.sourceware.org/bugzilla/>
http://sourceware.org/bugzilla/show_bug.cgi?id=887
Ryan S. Arnold <rsa at us dot ibm.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
--- Comment #26 from Ryan S. Arnold <rsa at us dot ibm.com> 2012-04-26 18:15:43 UTC ---
The aforementioned GCC fix allows the usage of the fcfid instruction in 32-bit
mode for power4 which can be used in place the fsub which exhibits the
undesirable trait of a negative sign in downward rounding mode.
The following patch will simply detect and flag this issue in the GLIBC libm
testsuite in the future if GCC insn selection regresses for any reason.
2012-04-26 Ryan S. Arnold <rsa@linux.vnet.ibm.com>
[BZ #887]
* math/libm-test.inc (logb_test_downward): New test to expose
erroneous negative sign on -0.0 result of logb[l](1) in FE_DOWNWARD
rounding mode.
diff --git a/math/libm-test.inc b/math/libm-test.inc
index e0ac613..81de85b 100644
--- a/math/libm-test.inc
+++ b/math/libm-test.inc
@@ -5101,6 +5101,40 @@ logb_test (void)
END (logb);
}
+static void
+logb_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+
+ FUNC(logb) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (logb_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+
+ /* IEEE 754-2008 says (section 5.3.3) that "logB(1) is +0.". Libm
+ * should not return -0 from logb in any rounding mode. PowerPC32 has
+ * failed with this test for power4 logb (and logbl on all PowerPC
+ * platforms) in the past due to instruction selection. GCC PR 52775
+ * provides the availability of the fcfid insn in 32-bit mode which
+ * eliminates the use of fsub in this instance and prevents the negative
+ * signed 0.0. */
+
+ /* BZ #887 .*/
+ TEST_f_f (logb, 1.000e+0, plus_zero);
+ }
+
+ fesetround (save_round_mode);
+
+ END (logb_downward);
+}
static void
lround_test (void)
@@ -8210,6 +8244,7 @@ main (int argc, char **argv)
log1p_test ();
log2_test ();
logb_test ();
+ logb_test_downward ();
modf_test ();
ilogb_test ();
scalb_test ();
Tested and verified fixed with gcc version 4.6.4 20120423 (prerelease)
[ibm/gcc-4_6-branch revision 186704] (GCC).
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.