about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@systemhalted.org>2012-11-19 00:44:00 -0500
committerCarlos O'Donell <carlos@systemhalted.org>2012-11-19 00:44:00 -0500
commitda66ca0fc0d099b381b0bee96eae9be378417e0e (patch)
tree0d478c61813b7ff079bf6d17705147b335b9d481
parent886ce148c046f5ecc0b2c60f2c6858c0722d601f (diff)
downloadglibc-da66ca0fc0d099b381b0bee96eae9be378417e0e.tar.gz
glibc-da66ca0fc0d099b381b0bee96eae9be378417e0e.tar.xz
glibc-da66ca0fc0d099b381b0bee96eae9be378417e0e.zip
hppa: Fix fesetenv for FE_DFL_ENV.
Switching back to FE_DFL_ENV should reset the FPU to the state
as it was at the start of the program.
-rw-r--r--ports/ChangeLog.hppa2
-rw-r--r--ports/sysdeps/hppa/fpu/fegetround.c13
2 files changed, 5 insertions, 10 deletions
diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa
index 4088793a43..3f7bd6e5e0 100644
--- a/ports/ChangeLog.hppa
+++ b/ports/ChangeLog.hppa
@@ -1,5 +1,7 @@
 2012-11-18  Carlos O'Donell  <carlos@systemhalted.org>
 
+	* sysdeps/hppa/fpu/fesetenv.c: Reset FPU to default for FE_DFL_ENV.
+
 	* sysdeps/hppa/get-rounding-mode.h: New file.
 	* sysdeps/hppa/fpu/fegetround.c: Use get_rounding_mode.
 
diff --git a/ports/sysdeps/hppa/fpu/fegetround.c b/ports/sysdeps/hppa/fpu/fegetround.c
index 70d2e476fe..d603e66f13 100644
--- a/ports/sysdeps/hppa/fpu/fegetround.c
+++ b/ports/sysdeps/hppa/fpu/fegetround.c
@@ -1,5 +1,5 @@
 /* Return current rounding direction.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by David Huggins-Daines <dhd@debian.org>, 2000
 
@@ -17,17 +17,10 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <fenv.h>
+#include <get-rounding-mode.h>
 
 int
 fegetround (void)
 {
-  union { unsigned long long l; unsigned int sw[2] } s;
-
-  /* Get the current status word. */
-  __asm__ ("fstd %%fr0,0(%1)	\n\t" 
-	   "fldd 0(%1),%%fr0	\n\t" 
-           : "=m" (s.l) : "r" (&s.l));
-
-  return (s.sw[0] & FE_DOWNWARD);
+  return get_rounding_mode ();
 }