add string_compose argument specializations so that empty std::string and empty C...
[ardour.git] / libs / ardour / globals.cc
index fea1de2c55c4d74dcda0d4f532ca14655845a4f1..a76fae4feed8feed1974ffef6f8c1b7353bac6bf 100644 (file)
@@ -38,7 +38,7 @@
 #include <time.h>
 
 #include <glib.h>
-#include <glib/gstdio.h>
+#include <pbd/gstdio_compat.h>
 
 #ifdef PLATFORM_WINDOWS
 #include <windows.h> // for LARGE_INTEGER
@@ -160,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;
@@ -178,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;
 
@@ -581,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
@@ -591,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;
        }
 
@@ -614,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;