diff options
-rw-r--r-- | CMakeLists.txt | 38 | ||||
-rw-r--r-- | core/mixer/mixer_neon.cpp | 4 | ||||
-rw-r--r-- | core/mixer/mixer_sse.cpp | 5 | ||||
-rw-r--r-- | core/mixer/mixer_sse2.cpp | 4 | ||||
-rw-r--r-- | core/mixer/mixer_sse41.cpp | 4 |
5 files changed, 23 insertions, 32 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a5ae4d43..df5fa66f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -344,8 +344,6 @@ endif() set(SSE2_SWITCH "") -set(SSE3_SWITCH "") -set(SSE4_1_SWITCH "") set(FPU_NEON_SWITCH "") set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) @@ -356,14 +354,6 @@ endif() check_c_compiler_flag(-msse2 HAVE_MSSE2_SWITCH) if(HAVE_MSSE2_SWITCH) set(SSE2_SWITCH "-msse2") - check_c_compiler_flag(-msse3 HAVE_MSSE3_SWITCH) - if(HAVE_MSSE3_SWITCH) - set(SSE3_SWITCH "-msse3") - check_c_compiler_flag(-msse4.1 HAVE_MSSE4_1_SWITCH) - if(HAVE_MSSE4_1_SWITCH) - set(SSE4_1_SWITCH "-msse4.1") - endif() - endif() endif() check_c_compiler_flag(-mfpu=neon HAVE_MFPU_NEON_SWITCH) if(HAVE_MFPU_NEON_SWITCH) @@ -372,11 +362,11 @@ endif() set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS}) unset(OLD_REQUIRED_FLAGS) -check_include_file(xmmintrin.h HAVE_XMMINTRIN_H ${SSE2_SWITCH}) -check_include_file(emmintrin.h HAVE_EMMINTRIN_H ${SSE2_SWITCH}) -check_include_file(pmmintrin.h HAVE_PMMINTRIN_H ${SSE3_SWITCH}) -check_include_file(smmintrin.h HAVE_SMMINTRIN_H ${SSE4_1_SWITCH}) -check_include_file(arm_neon.h HAVE_ARM_NEON_H ${FPU_NEON_SWITCH}) +check_include_file(xmmintrin.h HAVE_XMMINTRIN_H) +check_include_file(emmintrin.h HAVE_EMMINTRIN_H) +check_include_file(pmmintrin.h HAVE_PMMINTRIN_H) +check_include_file(smmintrin.h HAVE_SMMINTRIN_H) +check_include_file(arm_neon.h HAVE_ARM_NEON_H) set(SSE_FLAGS ) set(FPMATH_SET "0") @@ -726,10 +716,6 @@ if(HAVE_XMMINTRIN_H AND HAVE_EMMINTRIN_H) set(HAVE_SSE 1) set(HAVE_SSE2 1) set(CORE_OBJS ${CORE_OBJS} core/mixer/mixer_sse.cpp core/mixer/mixer_sse2.cpp) - if(SSE2_SWITCH) - set_source_files_properties(core/mixer/mixer_sse.cpp core/mixer/mixer_sse2.cpp - PROPERTIES COMPILE_FLAGS "${SSE2_SWITCH}") - endif() set(CPU_EXTS "${CPU_EXTS}, SSE, SSE2") endif() endif() @@ -741,15 +727,11 @@ if(ALSOFT_REQUIRE_SSE2 AND NOT HAVE_SSE2) endif() option(ALSOFT_REQUIRE_SSE3 "Require SSE3 support" OFF) -if(HAVE_EMMINTRIN_H) +if(HAVE_PMMINTRIN_H) option(ALSOFT_CPUEXT_SSE3 "Enable SSE3 support" ON) if(HAVE_SSE2 AND ALSOFT_CPUEXT_SSE3) set(HAVE_SSE3 1) set(CORE_OBJS ${CORE_OBJS} core/mixer/mixer_sse3.cpp) - if(SSE2_SWITCH) - set_source_files_properties(core/mixer/mixer_sse3.cpp PROPERTIES - COMPILE_FLAGS "${SSE3_SWITCH}") - endif() set(CPU_EXTS "${CPU_EXTS}, SSE3") endif() endif() @@ -763,10 +745,6 @@ if(HAVE_SMMINTRIN_H) if(HAVE_SSE3 AND ALSOFT_CPUEXT_SSE4_1) set(HAVE_SSE4_1 1) set(CORE_OBJS ${CORE_OBJS} core/mixer/mixer_sse41.cpp) - if(SSE4_1_SWITCH) - set_source_files_properties(core/mixer/mixer_sse41.cpp PROPERTIES - COMPILE_FLAGS "${SSE4_1_SWITCH}") - endif() set(CPU_EXTS "${CPU_EXTS}, SSE4.1") endif() endif() @@ -781,10 +759,6 @@ if(HAVE_ARM_NEON_H) if(ALSOFT_CPUEXT_NEON) set(HAVE_NEON 1) set(CORE_OBJS ${CORE_OBJS} core/mixer/mixer_neon.cpp) - if(FPU_NEON_SWITCH) - set_source_files_properties(core/mixer/mixer_neon.cpp PROPERTIES - COMPILE_FLAGS "${FPU_NEON_SWITCH}") - endif() set(CPU_EXTS "${CPU_EXTS}, Neon") endif() endif() diff --git a/core/mixer/mixer_neon.cpp b/core/mixer/mixer_neon.cpp index 3c7ddd4e..cc6dd71d 100644 --- a/core/mixer/mixer_neon.cpp +++ b/core/mixer/mixer_neon.cpp @@ -16,6 +16,10 @@ struct BSincTag; struct FastBSincTag; +#if defined(__GNUC__) && !defined(__clang__) && !defined(__ARM_NEON) +#pragma GCC target("fpu=neon") +#endif + namespace { inline float32x4_t set_f4(float l0, float l1, float l2, float l3) diff --git a/core/mixer/mixer_sse.cpp b/core/mixer/mixer_sse.cpp index ff722c19..f21ec227 100644 --- a/core/mixer/mixer_sse.cpp +++ b/core/mixer/mixer_sse.cpp @@ -15,6 +15,11 @@ struct BSincTag; struct FastBSincTag; +/* SSE2 is required for any SSE support. */ +#if defined(__GNUC__) && !defined(__clang__) && !defined(__SSE2__) +#pragma GCC target("sse2") +#endif + namespace { constexpr uint FracPhaseBitDiff{MixerFracBits - BSincPhaseBits}; diff --git a/core/mixer/mixer_sse2.cpp b/core/mixer/mixer_sse2.cpp index 69fac250..a93a33f9 100644 --- a/core/mixer/mixer_sse2.cpp +++ b/core/mixer/mixer_sse2.cpp @@ -30,6 +30,10 @@ struct SSE2Tag; struct LerpTag; +#if defined(__GNUC__) && !defined(__clang__) && !defined(__SSE2__) +#pragma GCC target("sse2") +#endif + template<> const float *Resample_<LerpTag,SSE2Tag>(const InterpState*, const float *RESTRICT src, uint frac, uint increment, const al::span<float> dst) diff --git a/core/mixer/mixer_sse41.cpp b/core/mixer/mixer_sse41.cpp index cacc9e64..f7839b78 100644 --- a/core/mixer/mixer_sse41.cpp +++ b/core/mixer/mixer_sse41.cpp @@ -31,6 +31,10 @@ struct SSE4Tag; struct LerpTag; +#if defined(__GNUC__) && !defined(__clang__) && !defined(__SSE4_1__) +#pragma GCC target("sse4.1") +#endif + template<> const float *Resample_<LerpTag,SSE4Tag>(const InterpState*, const float *RESTRICT src, uint frac, uint increment, const al::span<float> dst) |