Add missing linear resampler to the option setting list
[openal-soft.git] / alc / fpu_ctrl.cpp
blob24021c7d662a39db5f8c767f1d6c0640b75dbb5b
2 #include "config.h"
4 #include "fpu_ctrl.h"
6 #ifdef HAVE_INTRIN_H
7 #include <intrin.h>
8 #endif
9 #ifdef HAVE_SSE_INTRINSICS
10 #include <xmmintrin.h>
11 #endif
13 #include "cpu_caps.h"
16 FPUCtl::FPUCtl()
18 #if defined(HAVE_SSE_INTRINSICS)
19 this->sse_state = _mm_getcsr();
20 unsigned int sseState = this->sse_state;
21 sseState |= 0x8000; /* set flush-to-zero */
22 sseState |= 0x0040; /* set denormals-are-zero */
23 _mm_setcsr(sseState);
25 #elif defined(__GNUC__) && defined(HAVE_SSE)
27 if((CPUCapFlags&CPU_CAP_SSE))
29 __asm__ __volatile__("stmxcsr %0" : "=m" (*&this->sse_state));
30 unsigned int sseState = this->sse_state;
31 sseState |= 0x8000; /* set flush-to-zero */
32 if((CPUCapFlags&CPU_CAP_SSE2))
33 sseState |= 0x0040; /* set denormals-are-zero */
34 __asm__ __volatile__("ldmxcsr %0" : : "m" (*&sseState));
36 #endif
38 this->in_mode = true;
41 void FPUCtl::leave()
43 if(!this->in_mode) return;
45 #if defined(HAVE_SSE_INTRINSICS)
46 _mm_setcsr(this->sse_state);
48 #elif defined(__GNUC__) && defined(HAVE_SSE)
50 if((CPUCapFlags&CPU_CAP_SSE))
51 __asm__ __volatile__("ldmxcsr %0" : : "m" (*&this->sse_state));
52 #endif
53 this->in_mode = false;