diff options
Diffstat (limited to 'sysdeps/arm/feholdexcpt.c')
-rw-r--r-- | sysdeps/arm/feholdexcpt.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sysdeps/arm/feholdexcpt.c b/sysdeps/arm/feholdexcpt.c index 2d79e0c46d..258ba6637f 100644 --- a/sysdeps/arm/feholdexcpt.c +++ b/sysdeps/arm/feholdexcpt.c @@ -16,18 +16,30 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -#include <fenv_private.h> +#include <fenv.h> +#include <fpu_control.h> #include <arm-features.h> int feholdexcept (fenv_t *envp) { + fpu_control_t fpscr; + /* Fail if a VFP unit isn't present. */ if (!ARM_HAVE_VFP) return 1; - libc_feholdexcept_vfp (envp); + _FPU_GETCW (fpscr); + envp->__cw = fpscr; + + /* Now set all exceptions to non-stop. */ + fpscr &= ~(FE_ALL_EXCEPT << FE_EXCEPT_SHIFT); + + /* And clear all exception flags. */ + fpscr &= ~FE_ALL_EXCEPT; + + _FPU_SETCW (fpscr); return 0; } |