add string_compose argument specializations so that empty std::string and empty C...
[ardour.git] / libs / ardour / globals.cc
index fa6f833d94eb29fe64980321e4f4a7228efdf9db..a76fae4feed8feed1974ffef6f8c1b7353bac6bf 100644 (file)
@@ -37,6 +37,9 @@
 #include <errno.h>
 #include <time.h>
 
+#include <glib.h>
+#include <pbd/gstdio_compat.h>
+
 #ifdef PLATFORM_WINDOWS
 #include <windows.h> // for LARGE_INTEGER
 #endif
@@ -157,14 +160,21 @@ setup_hardware_optimization (bool try_optimization)
 
        if (try_optimization) {
 
-               FPU fpu;
+               FPU* fpu = FPU::instance();
 
 #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS)
 
-               if (fpu.has_avx()) {
-
+#ifdef PLATFORM_WINDOWS
+               /* We have AVX-optimized code for Windows */
+               
+               if (fpu->has_avx()) {
+#else                  
+               /* AVX code doesn't compile on Linux yet */
+               
+               if (false) {
+#endif                 
                        info << "Using AVX optimized routines" << endmsg;
-
+                       
                        // AVX SET
                        compute_peak          = x86_sse_avx_compute_peak;
                        find_peaks            = x86_sse_avx_find_peaks;
@@ -175,7 +185,7 @@ setup_hardware_optimization (bool try_optimization)
 
                        generic_mix_functions = false;
 
-               } else if (fpu.has_sse()) {
+               } else if (fpu->has_sse()) {
 
                        info << "Using SSE optimized routines" << endmsg;
 
@@ -578,7 +588,8 @@ ARDOUR::no_auto_connect()
 void
 ARDOUR::setup_fpu ()
 {
-
+       FPU* fpu = FPU::instance ();
+       
        if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
                // valgrind doesn't understand this assembler stuff
                // September 10th, 2007
@@ -588,13 +599,8 @@ ARDOUR::setup_fpu ()
 #if defined(ARCH_X86) && defined(USE_XMMINTRIN)
 
        int MXCSR;
-       FPU fpu;
-
-       /* XXX use real code to determine if the processor supports
-          DenormalsAreZero and FlushToZero
-       */
 
-       if (!fpu.has_flush_to_zero() && !fpu.has_denormals_are_zero()) {
+       if (!fpu->has_flush_to_zero() && !fpu->has_denormals_are_zero()) {
                return;
        }
 
@@ -611,21 +617,21 @@ ARDOUR::setup_fpu ()
                break;
 
        case DenormalFTZ:
-               if (fpu.has_flush_to_zero()) {
+               if (fpu->has_flush_to_zero()) {
                        MXCSR |= _MM_FLUSH_ZERO_ON;
                }
                break;
 
        case DenormalDAZ:
                MXCSR &= ~_MM_FLUSH_ZERO_ON;
-               if (fpu.has_denormals_are_zero()) {
+               if (fpu->has_denormals_are_zero()) {
                        MXCSR |= 0x40;
                }
                break;
 
        case DenormalFTZDAZ:
-               if (fpu.has_flush_to_zero()) {
-                       if (fpu.has_denormals_are_zero()) {
+               if (fpu->has_flush_to_zero()) {
+                       if (fpu->has_denormals_are_zero()) {
                                MXCSR |= _MM_FLUSH_ZERO_ON | 0x40;
                        } else {
                                MXCSR |= _MM_FLUSH_ZERO_ON;
@@ -653,7 +659,7 @@ ARDOUR::translation_enable_path ()
 bool
 ARDOUR::translations_are_enabled ()
 {
-       int fd = ::open (ARDOUR::translation_enable_path().c_str(), O_RDONLY);
+       int fd = g_open (ARDOUR::translation_enable_path().c_str(), O_RDONLY, 0444);
 
        if (fd < 0) {
                return translate_by_default;
@@ -675,7 +681,7 @@ bool
 ARDOUR::set_translations_enabled (bool yn)
 {
        string i18n_enabler = ARDOUR::translation_enable_path();
-       int fd = ::open (i18n_enabler.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644);
+       int fd = g_open (i18n_enabler.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644);
 
        if (fd < 0) {
                return false;