From c0c08d02c82275353f5c556f935a1a01714d9d7f Mon Sep 17 00:00:00 2001 From: Wilco Date: Thu, 15 May 2014 15:21:55 +0100 Subject: ARM: Improve fenv implementation --- sysdeps/arm/fsetexcptflg.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'sysdeps/arm/fsetexcptflg.c') diff --git a/sysdeps/arm/fsetexcptflg.c b/sysdeps/arm/fsetexcptflg.c index 1a610ff..28810d3 100644 --- a/sysdeps/arm/fsetexcptflg.c +++ b/sysdeps/arm/fsetexcptflg.c @@ -25,19 +25,22 @@ int fesetexceptflag (const fexcept_t *flagp, int excepts) { - fpu_control_t fpscr; + fpu_control_t fpscr, new_fpscr; /* Fail if a VFP unit isn't present unless nothing needs to be done. */ if (!ARM_HAVE_VFP) return (excepts != 0); _FPU_GETCW (fpscr); + excepts &= FE_ALL_EXCEPT; /* Set the desired exception mask. */ - fpscr &= ~(excepts & FE_ALL_EXCEPT); - fpscr |= (*flagp & excepts & FE_ALL_EXCEPT); + new_fpscr = fpscr & ~excepts; + new_fpscr |= *flagp & excepts; + + /* Write new exception flags if changed. */ + if (new_fpscr != fpscr) + _FPU_SETCW (new_fpscr); - /* Save state back to the FPU. */ - _FPU_SETCW (fpscr); return 0; } -- cgit v1.1