diff options
author | Carlos O'Donell <carlos@systemhalted.org> | 2012-11-19 00:44:00 -0500 |
---|---|---|
committer | Carlos O'Donell <carlos@systemhalted.org> | 2012-11-19 00:44:00 -0500 |
commit | da66ca0fc0d099b381b0bee96eae9be378417e0e (patch) | |
tree | 0d478c61813b7ff079bf6d17705147b335b9d481 | |
parent | 886ce148c046f5ecc0b2c60f2c6858c0722d601f (diff) | |
download | glibc-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.hppa | 2 | ||||
-rw-r--r-- | ports/sysdeps/hppa/fpu/fegetround.c | 13 |
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 (); } |