summaryrefslogtreecommitdiff
path: root/volk
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2012-04-18 15:17:55 -0700
committerJosh Blum <josh@joshknows.com>2012-04-19 18:13:23 -0700
commitf51c4dc7e5e8bab60f9431c51159f9e35907fbb7 (patch)
tree70832c8f25fbf5ec9430b613c11efccc374569b9 /volk
parent7b0e04c5637dc5ecefb255502862ccb06a26325b (diff)
volk: added set_float_rounding to volk_cpu_init
Diffstat (limited to 'volk')
-rw-r--r--volk/lib/CMakeLists.txt5
-rw-r--r--volk/tmpl/volk_cpu.tmpl.c19
2 files changed, 24 insertions, 0 deletions
diff --git a/volk/lib/CMakeLists.txt b/volk/lib/CMakeLists.txt
index db8cca6cd2..b39e3ad217 100644
--- a/volk/lib/CMakeLists.txt
+++ b/volk/lib/CMakeLists.txt
@@ -29,6 +29,11 @@ if(HAVE_INTRIN_H)
add_definitions(-DHAVE_INTRIN_H)
endif()
+CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
+if(HAVE_FENV_H)
+ add_definitions(-DHAVE_FENV_H)
+endif()
+
CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
if(HAVE_DLFCN_H)
add_definitions(-DHAVE_DLFCN_H)
diff --git a/volk/tmpl/volk_cpu.tmpl.c b/volk/tmpl/volk_cpu.tmpl.c
index 1aa36d2bf6..81fc679cbc 100644
--- a/volk/tmpl/volk_cpu.tmpl.c
+++ b/volk/tmpl/volk_cpu.tmpl.c
@@ -149,10 +149,29 @@ static int i_can_has_$arch.name (void) {
#end for
+#if defined(HAVE_FENV_H)
+ #include <fenv.h>
+ static inline void set_float_rounding(void){
+ fesetround(FE_TONEAREST);
+ }
+#elif defined(_MSC_VER)
+ #include <float.h>
+ static inline void set_float_rounding(void){
+ unsigned int cwrd;
+ _controlfp_s(&cwrd, 0, 0);
+ _controlfp_s(&cwrd, _RC_NEAR, _MCW_RC);
+ }
+#else
+ static inline void set_float_rounding(void){
+ //do nothing
+ }
+#endif
+
void volk_cpu_init() {
#for $arch in $archs
volk_cpu.has_$arch.name = &i_can_has_$arch.name;
#end for
+ set_float_rounding();
}
unsigned int volk_get_lvarch() {