From da66ca0fc0d099b381b0bee96eae9be378417e0e Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Mon, 19 Nov 2012 00:44:00 -0500 Subject: [PATCH] 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. --- ports/ChangeLog.hppa | 2 ++ 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 4088793..3f7bd6e 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,5 +1,7 @@ 2012-11-18 Carlos O'Donell + * 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 70d2e47..d603e66 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 , 2000 @@ -17,17 +17,10 @@ License along with the GNU C Library. If not, see . */ -#include +#include 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 (); } -- 2.7.4