diff options
author | Chris Robinson <[email protected]> | 2012-09-14 01:10:19 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2012-09-14 01:10:19 -0700 |
commit | ec74fb9ba2eaf0b75685f6c88cd96270408c1da6 (patch) | |
tree | 79cc271c9eac1f1eb59db52133511f06976124e8 /OpenAL32 | |
parent | ff809f2271099acf4527a23d55a034e1cef5e900 (diff) |
Enable flush-to-zero mode when possible
Diffstat (limited to 'OpenAL32')
-rw-r--r-- | OpenAL32/Include/alMain.h | 3 | ||||
-rw-r--r-- | OpenAL32/Include/alu.h | 37 |
2 files changed, 3 insertions, 37 deletions
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 6b8d5fab..49241eca 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -733,6 +733,9 @@ void *al_malloc(size_t alignment, size_t size); void *al_calloc(size_t alignment, size_t size); void al_free(void *ptr); +int SetMixerFPUMode(void); +void RestoreFPUMode(int state); + ALvoid *StartThread(ALuint (*func)(ALvoid*), ALvoid *ptr); ALuint StopThread(ALvoid *thread); diff --git a/OpenAL32/Include/alu.h b/OpenAL32/Include/alu.h index 0c7cc28b..ece99b21 100644 --- a/OpenAL32/Include/alu.h +++ b/OpenAL32/Include/alu.h @@ -198,43 +198,6 @@ static __inline ALfloat cubic(ALfloat val0, ALfloat val1, ALfloat val2, ALfloat } -static __inline int SetMixerFPUMode(void) -{ -#if defined(_FPU_GETCW) && defined(_FPU_SETCW) && (defined(__i386__) || defined(__x86_64__)) - fpu_control_t fpuState, newState; - _FPU_GETCW(fpuState); - newState = fpuState&~(_FPU_EXTENDED|_FPU_DOUBLE|_FPU_SINGLE | - _FPU_RC_NEAREST|_FPU_RC_DOWN|_FPU_RC_UP|_FPU_RC_ZERO); - newState |= _FPU_SINGLE | _FPU_RC_ZERO; - _FPU_SETCW(newState); -#else - int fpuState; -#if defined(HAVE__CONTROLFP) - fpuState = _controlfp(0, 0); - (void)_controlfp(_RC_CHOP|_PC_24, _MCW_RC|_MCW_PC); -#elif defined(HAVE_FESETROUND) - fpuState = fegetround(); -#ifdef FE_TOWARDZERO - fesetround(FE_TOWARDZERO); -#endif -#endif -#endif - return fpuState; -} - -static __inline void RestoreFPUMode(int state) -{ -#if defined(_FPU_GETCW) && defined(_FPU_SETCW) && (defined(__i386__) || defined(__x86_64__)) - fpu_control_t fpuState = state; - _FPU_SETCW(fpuState); -#elif defined(HAVE__CONTROLFP) - _controlfp(state, _MCW_RC|_MCW_PC); -#elif defined(HAVE_FESETROUND) - fesetround(state); -#endif -} - - static __inline void aluCrossproduct(const ALfloat *inVector1, const ALfloat *inVector2, ALfloat *outVector) { outVector[0] = inVector1[1]*inVector2[2] - inVector1[2]*inVector2[1]; |