svn commit: r261163 - head/lib/msun/arm

Andrew Turner andrew at FreeBSD.org
Sat Jan 25 18:13:44 UTC 2014


Author: andrew
Date: Sat Jan 25 18:13:43 2014
New Revision: 261163
URL: http://svnweb.freebsd.org/changeset/base/261163

Log:
   * Mark static inline functions with __fenv_static.
   * Correctly shift the mask when masking/unmasking exceptions.

Modified:
  head/lib/msun/arm/fenv.h

Modified: head/lib/msun/arm/fenv.h
==============================================================================
--- head/lib/msun/arm/fenv.h	Sat Jan 25 16:35:56 2014	(r261162)
+++ head/lib/msun/arm/fenv.h	Sat Jan 25 18:13:43 2014	(r261163)
@@ -98,6 +98,8 @@ int feupdateenv(const fenv_t *__envp);
 #define	vmrs_fpscr(__r)	__asm __volatile("vmrs %0, fpscr" : "=&r"(__r))
 #define	vmsr_fpscr(__r)	__asm __volatile("vmsr fpscr, %0" : : "r"(__r))
 
+#define _FPU_MASK_SHIFT	8
+
 __fenv_static inline int
 feclearexcept(int __excepts)
 {
@@ -213,29 +215,31 @@ feupdateenv(const fenv_t *__envp)
 
 /* We currently provide no external definitions of the functions below. */
 
-static inline int
+__fenv_static inline int
 feenableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
 
 	vmrs_fpscr(__old_fpsr);
-	__new_fpsr = __old_fpsr | (__mask & FE_ALL_EXCEPT);
+	__new_fpsr = __old_fpsr |
+	    ((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
 	vmsr_fpscr(__new_fpsr);
-	return (__old_fpsr & FE_ALL_EXCEPT);
+	return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static inline int
+__fenv_static inline int
 fedisableexcept(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
 
 	vmrs_fpscr(__old_fpsr);
-	__new_fpsr = __old_fpsr & ~(__mask & FE_ALL_EXCEPT);
+	__new_fpsr = __old_fpsr &
+	    ~((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
 	vmsr_fpscr(__new_fpsr);
-	return (__old_fpsr & FE_ALL_EXCEPT);
+	return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
 }
 
-static inline int
+__fenv_static inline int
 fegetexcept(void)
 {
 	fenv_t __fpsr;


More information about the svn-src-head mailing list