[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[patches] Implement fegetexceptflag for ARM EABI, fix fesetexceptflag



I've applied (to trunk and 2.8 branch) this patch to implement the missing 
function fegetexceptflag for ARM EABI.  In the couse of doing so I noticed 
that fesetexceptflag was operating on the wrong bits of the control word 
(the mask of enabled exceptions), so I fixed that.

Index: sysdeps/arm/eabi/fsetexcptflg.c
===================================================================
--- sysdeps/arm/eabi/fsetexcptflg.c	(revision 6465)
+++ sysdeps/arm/eabi/fsetexcptflg.c	(working copy)
@@ -1,5 +1,5 @@
 /* Set floating-point environment exception handling.
-   Copyright (C) 1997,98,99,2000,01,05 Free Software Foundation, Inc.
+   Copyright (C) 1997,98,99,2000,01,05,08 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -37,8 +37,8 @@
       _FPU_GETCW (temp);
 
       /* Set the desired exception mask.  */
-      temp &= ~((excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT);
-      temp |= (*flagp & excepts & FE_ALL_EXCEPT) << FE_EXCEPT_SHIFT;
+      temp &= ~(excepts & FE_ALL_EXCEPT);
+      temp |= (*flagp & excepts & FE_ALL_EXCEPT);
 
       /* Save state back to the FPU.  */
       _FPU_SETCW (temp);
Index: sysdeps/arm/eabi/fgetexcptflg.c
===================================================================
--- sysdeps/arm/eabi/fgetexcptflg.c	(revision 0)
+++ sysdeps/arm/eabi/fgetexcptflg.c	(revision 0)
@@ -0,0 +1,54 @@
+/* Store current representation for exceptions.
+   Copyright (C) 1997, 1999, 2000, 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <fenv.h>
+#include <fpu_control.h>
+
+#include <unistd.h>
+#include <ldsodefs.h>
+#include <dl-procinfo.h>
+#include <sysdep.h>
+
+int
+__fegetexceptflag (fexcept_t *flagp, int excepts)
+{
+  if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
+    {
+      unsigned long temp;
+
+      /* Get the current exceptions.  */
+      _FPU_GETCW (temp);
+
+      *flagp = temp & excepts & FE_ALL_EXCEPT;
+
+      /* Success.  */
+      return 0;
+    }
+
+  /* Unsupported, so fail.  */
+  return 1;
+}
+
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
+strong_alias (__fegetexceptflag, __old_fegetexceptflag)
+compat_symbol (libm, __old_fegetexceptflag, fegetexceptflag, GLIBC_2_1);
+#endif
+versioned_symbol (libm, __fegetexceptflag, fegetexceptflag, GLIBC_2_2);
Index: ChangeLog.eglibc
===================================================================
--- ChangeLog.eglibc	(revision 6465)
+++ ChangeLog.eglibc	(working copy)
@@ -1,3 +1,9 @@
+2008-06-30  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/arm/eabi/fgetexcptflg.c: New.
+	* sysdeps/arm/eabi/fsetexcptflg.c (__fesetexceptflag): Operate on
+	set exception flags, not on mask of enabled exceptions.
+
 2008-06-17  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/arm/eabi/feupdateenv.c: New.

-- 
Joseph S. Myers
joseph@xxxxxxxxxxxxxxxx