summaryrefslogtreecommitdiffstats
path: root/lib/msun
diff options
context:
space:
mode:
authorandrew <andrew@FreeBSD.org>2014-01-25 18:13:43 +0000
committerandrew <andrew@FreeBSD.org>2014-01-25 18:13:43 +0000
commit2edf03297d7056f94c4938f6c3b6da40a804b2dc (patch)
tree0389ccbc448a562c5cc74700f1fe411582944de8 /lib/msun
parentef1f7251ff77c40c18db722c275c88054265e7a1 (diff)
downloadFreeBSD-src-2edf03297d7056f94c4938f6c3b6da40a804b2dc.zip
FreeBSD-src-2edf03297d7056f94c4938f6c3b6da40a804b2dc.tar.gz
* Mark static inline functions with __fenv_static.
* Correctly shift the mask when masking/unmasking exceptions.
Diffstat (limited to 'lib/msun')
-rw-r--r--lib/msun/arm/fenv.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/msun/arm/fenv.h b/lib/msun/arm/fenv.h
index 07b05c8..0605819 100644
--- a/lib/msun/arm/fenv.h
+++ b/lib/msun/arm/fenv.h
@@ -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;
OpenPOWER on IntegriCloud