From 843d603f37f7c52fd77c8ec9f90e69edd275926b Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Thu, 2 Apr 2020 01:29:11 +0200 Subject: [PATCH] Add CPU dispatch for the strings effect --- src/CMakeLists.txt | 5 +++-- src/sfizz/effects/Strings.cpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1655147b..b3d472df 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,7 @@ include (GNUInstallDirs) add_subdirectory(external/kiss_fft) +add_subdirectory(external/cpuid) set (SFIZZ_SOURCES sfizz/Synth.cpp @@ -54,7 +55,7 @@ target_sources(sfizz_static PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp sfi target_include_directories (sfizz_static PUBLIC .) target_include_directories (sfizz_static PUBLIC external) target_link_libraries (sfizz_static PUBLIC absl::strings absl::span) -target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft) +target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft sfizz-cpuid) set_target_properties (sfizz_static PROPERTIES OUTPUT_NAME sfizz PUBLIC_HEADER "sfizz.h;sfizz.hpp") if (WIN32) target_compile_definitions (sfizz_static PRIVATE _USE_MATH_DEFINES) @@ -89,7 +90,7 @@ if (SFIZZ_SHARED) target_sources(sfizz_shared PRIVATE ${SFIZZ_SOURCES} sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) target_include_directories (sfizz_shared PRIVATE .) target_include_directories (sfizz_shared PRIVATE external) - target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft) + target_link_libraries (sfizz_shared PRIVATE absl::strings absl::span sfizz_parser absl::flat_hash_map Threads::Threads sfizz-sndfile sfizz-pugixml sfizz-spline sfizz-kissfft sfizz-cpuid) if (WIN32) target_compile_definitions (sfizz_shared PRIVATE _USE_MATH_DEFINES) endif() diff --git a/src/sfizz/effects/Strings.cpp b/src/sfizz/effects/Strings.cpp index d739c593..e3f8bcc9 100644 --- a/src/sfizz/effects/Strings.cpp +++ b/src/sfizz/effects/Strings.cpp @@ -22,6 +22,7 @@ Extensions #include "Opcode.h" #include "MathHelpers.h" #include "SIMDHelpers.h" +#include "cpuid/cpuinfo.hpp" #include "absl/memory/memory.h" #include @@ -31,6 +32,19 @@ namespace fx { Strings::Strings() : _stringsArray(new ResonantArrayScalar) { + ResonantArray* array = nullptr; + +#if SFIZZ_CPU_FAMILY_X86_64 || SFIZZ_CPU_FAMILY_I386 + cpuid::cpuinfo cpuInfo; + if (cpuInfo.has_avx()) + array = new ResonantArrayAVX; + else if (cpuInfo.has_sse()) + array = new ResonantArraySSE; +#endif + if (!array) + array = new ResonantArrayScalar; + + _stringsArray.reset(array); } Strings::~Strings()