about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoey Ye <joey.ye@arm.com>2014-02-27 17:44:43 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-02-27 17:44:43 +0000
commit7d92b78723848ae616709eb8f0191ea067025b18 (patch)
tree9aea24dcf073852560bd0d88dc8befd39c540603
parent2b7f4f2cada566fe5da5b9260b3ca7b21db2a7e6 (diff)
downloadglibc-7d92b78723848ae616709eb8f0191ea067025b18.tar.gz
glibc-7d92b78723848ae616709eb8f0191ea067025b18.tar.xz
glibc-7d92b78723848ae616709eb8f0191ea067025b18.zip
Fix ARM NAN fraction bits.
Current ARM soft-float implementation is violating the RTABI
(http://infocenter.arm.com/help/topic/com.arm.doc.ihi0043d/IHI0043D_rtabi.pdf)
Section 4.1.1.1:

When not otherwise specified by IEEE 754, the result on an invalid
operation should be the quiet NaN bit pattern with only the most
significant bit of the significand set, and all other significand bits
zero.

This patch fixes it by setting _FP_NANFRAC_* to zero.

Ran make check test with -mfloat-abi=soft. No regression.

	* sysdeps/arm/soft-fp/sfp-machine.h (_FP_NANFRAC_S, _FP_NANFRAC_D)
	(_FP_NANFRAC_Q): Set to zero.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/arm/soft-fp/sfp-machine.h6
2 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index af8ada1705..98d40f28c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-27  Joey Ye  <joey.ye@arm.com>
+
+	* sysdeps/arm/soft-fp/sfp-machine.h (_FP_NANFRAC_S, _FP_NANFRAC_D)
+	(_FP_NANFRAC_Q): Set to zero.
+
 2014-02-27  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
 	[BZ #16623]
diff --git a/sysdeps/arm/soft-fp/sfp-machine.h b/sysdeps/arm/soft-fp/sfp-machine.h
index 52a08b5298..32697fef44 100644
--- a/sysdeps/arm/soft-fp/sfp-machine.h
+++ b/sysdeps/arm/soft-fp/sfp-machine.h
@@ -21,9 +21,9 @@
 #define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_2_udiv(D,R,X,Y)
 #define _FP_DIV_MEAT_Q(R,X,Y)	_FP_DIV_MEAT_4_udiv(Q,R,X,Y)
 
-#define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
-#define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1), -1
-#define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANFRAC_S		0
+#define _FP_NANFRAC_D		0, 0
+#define _FP_NANFRAC_Q		0, 0, 0, 0
 #define _FP_NANSIGN_S		0
 #define _FP_NANSIGN_D		0
 #define _FP_NANSIGN_Q		0