use new FPU singleton pattern in libs/ardour
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 12 Aug 2015 02:57:08 +0000 (22:57 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 12 Aug 2015 03:00:13 +0000 (23:00 -0400)
libs/ardour/ardour/ardour.h
libs/ardour/globals.cc

index 8be99a4aba86b2adf93b5aef6a18f3c09dcc202e..31565336d438597061727e4ecc5255126169b88e 100644 (file)
 #include "ardour/types.h"
 #include "ardour/libardour_visibility.h"
 
+namespace PBD {
+       class FPU;
+}
+
 namespace MIDI {
        class MachineControl;
        class Port;
index f0c1da683b64114246ac2118ea6267a80c6d9e00..4951161a72f91681cbfb869d6c5f6318e0a85f9b 100644 (file)
@@ -160,13 +160,13 @@ setup_hardware_optimization (bool try_optimization)
 
        if (try_optimization) {
 
-               FPU fpu;
+               FPU* fpu = FPU::instance();
 
 #if defined (ARCH_X86) && defined (BUILD_SSE_OPTIMIZATIONS)
 
 #if 0 /* AVX code doesn't compile on Linux yet, don't use generic code instead */
                
-               if (fpu.has_avx()) {
+               if (fpu->has_avx()) {
                        
                        info << "Using AVX optimized routines" << endmsg;
 
@@ -182,7 +182,7 @@ setup_hardware_optimization (bool try_optimization)
 
                } else
 #endif
-                       if (fpu.has_sse()) {
+                       if (fpu->has_sse()) {
 
                        info << "Using SSE optimized routines" << endmsg;
 
@@ -585,7 +585,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
@@ -595,13 +596,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;
        }
 
@@ -618,21 +614,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;