Browse Source

Set up aggressive optimizations when using simde or MOD

Signed-off-by: falkTX <falktx@falktx.com>
tags/23.02
falkTX 2 years ago
parent
commit
d0a354a411
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
11 changed files with 54 additions and 8 deletions
  1. +6
    -0
      include/simd-compat/emmintrin.h
  2. +6
    -0
      include/simd-compat/immintrin.h
  3. +6
    -0
      include/simd-compat/mmintrin.h
  4. +6
    -0
      include/simd-compat/pmmintrin.h
  5. +6
    -0
      include/simd-compat/xmmintrin.h
  6. +6
    -0
      plugins/Cardinal/src/HostAudio.cpp
  7. +8
    -0
      plugins/Cardinal/src/HostCV.cpp
  8. +1
    -1
      src/CardinalPlugin.cpp
  9. +4
    -0
      src/Makefile
  10. +2
    -2
      src/Makefile.cardinal.mk
  11. +3
    -5
      src/override/Engine.cpp

+ 6
- 0
include/simd-compat/emmintrin.h View File

@@ -20,6 +20,12 @@
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD)
# include_next <emmintrin.h>
#else
# define SIMDE_ACCURACY_PREFERENCE 0
# define SIMDE_ENABLE_NATIVE_ALIASES
# define SIMDE_FAST_CONVERSION_RANGE
# define SIMDE_FAST_MATH
# define SIMDE_FAST_NANS
# define SIMDE_FAST_ROUND_MODE
# define SIMDE_FAST_ROUND_TIES
# include "../simde/simde/x86/sse.h"
#endif

+ 6
- 0
include/simd-compat/immintrin.h View File

@@ -20,7 +20,13 @@
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD)
# include_next <immintrin.h>
#else
# define SIMDE_ACCURACY_PREFERENCE 0
# define SIMDE_ENABLE_NATIVE_ALIASES
# define SIMDE_FAST_CONVERSION_RANGE
# define SIMDE_FAST_MATH
# define SIMDE_FAST_NANS
# define SIMDE_FAST_ROUND_MODE
# define SIMDE_FAST_ROUND_TIES
# include "../simde/simde/x86/sse.h"
# include "../simde/simde/x86/sse2.h"
#endif

+ 6
- 0
include/simd-compat/mmintrin.h View File

@@ -22,6 +22,12 @@
#elif defined(__EMSCRIPTEN__) && !defined(CARDINAL_NOSIMD)
# include <wasm_simd128.h>
#else
# define SIMDE_ACCURACY_PREFERENCE 0
# define SIMDE_ENABLE_NATIVE_ALIASES
# define SIMDE_FAST_CONVERSION_RANGE
# define SIMDE_FAST_MATH
# define SIMDE_FAST_NANS
# define SIMDE_FAST_ROUND_MODE
# define SIMDE_FAST_ROUND_TIES
# include "../simde/simde/x86/mmx.h"
#endif

+ 6
- 0
include/simd-compat/pmmintrin.h View File

@@ -67,7 +67,13 @@ __m64 _mm_set1_pi16(short w)
*/

#else
# define SIMDE_ACCURACY_PREFERENCE 0
# define SIMDE_ENABLE_NATIVE_ALIASES
# define SIMDE_FAST_CONVERSION_RANGE
# define SIMDE_FAST_MATH
# define SIMDE_FAST_NANS
# define SIMDE_FAST_ROUND_MODE
# define SIMDE_FAST_ROUND_TIES
# include "../simde/simde/x86/sse.h"
# include "../simde/simde/x86/sse2.h"
# include "../simde/simde/x86/sse3.h"


+ 6
- 0
include/simd-compat/xmmintrin.h View File

@@ -20,6 +20,12 @@
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD)
# include_next <xmmintrin.h>
#else
# define SIMDE_ACCURACY_PREFERENCE 0
# define SIMDE_ENABLE_NATIVE_ALIASES
# define SIMDE_FAST_CONVERSION_RANGE
# define SIMDE_FAST_MATH
# define SIMDE_FAST_NANS
# define SIMDE_FAST_ROUND_MODE
# define SIMDE_FAST_ROUND_TIES
# include "../simde/simde/x86/avx.h"
#endif

+ 6
- 0
plugins/Cardinal/src/HostAudio.cpp View File

@@ -182,6 +182,9 @@ struct HostAudio2 : HostAudio<2> {

if (in1connected)
{
if (!std::isfinite(dataOuts[0][k]))
__builtin_unreachable();

valueL = inputs[0].getVoltageSum() * 0.1f;

if (dcFilterEnabled)
@@ -200,6 +203,9 @@ struct HostAudio2 : HostAudio<2> {

if (in2connected)
{
if (!std::isfinite(dataOuts[1][k]))
__builtin_unreachable();

valueR = inputs[1].getVoltageSum() * 0.1f;

if (dcFilterEnabled)


+ 8
- 0
plugins/Cardinal/src/HostCV.cpp View File

@@ -146,14 +146,22 @@ struct HostCV : TerminalModule {
inputOffset = params[BIPOLAR_INPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f;

for (int i=0; i<5; ++i)
{
if (!std::isfinite(dataOuts[i+ioOffset][k]))
__builtin_unreachable();
dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset;
}

if (pcontext->variant == kCardinalVariantMain)
{
inputOffset = params[BIPOLAR_INPUTS_6_10].getValue() > 0.1f ? 5.0f : 0.0f;

for (int i=5; i<10; ++i)
{
if (!std::isfinite(dataOuts[i+ioOffset][k]))
__builtin_unreachable();
dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset;
}
}
}
};


+ 1
- 1
src/CardinalPlugin.cpp View File

@@ -924,7 +924,7 @@ protected:
json_object_set_new(moduleJ, "favorite", json_boolean(m.favorite));
if (m.added > 0)
json_object_set_new(moduleJ, "added", json_integer(m.added));
if (std::isfinite(m.lastAdded))
if (std::isfinite(m.lastAdded) && d_isNotZero(m.lastAdded))
json_object_set_new(moduleJ, "lastAdded", json_real(m.lastAdded));
if (json_object_size(moduleJ))


+ 4
- 0
src/Makefile View File

@@ -104,6 +104,10 @@ ifeq ($(HAIKU),true)
BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC
endif

ifeq ($(MOD_BUILD),true)
BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp
endif

ifneq ($(WASM),true)
ifneq ($(HAIKU),true)
BASE_FLAGS += -pthread


+ 2
- 2
src/Makefile.cardinal.mk View File

@@ -323,6 +323,8 @@ BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=0
else
BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=1
endif
BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp
LINK_FLAGS += -fopenmp
endif

ifneq ($(WASM),true)
@@ -346,8 +348,6 @@ BASE_FLAGS += -DNANOVG_GLES3_FORCED
endif

BUILD_C_FLAGS += -std=gnu11
BUILD_C_FLAGS += -fno-finite-math-only -fno-strict-aliasing
BUILD_CXX_FLAGS += -fno-finite-math-only -fno-strict-aliasing

ifneq ($(MACOS),true)
BUILD_CXX_FLAGS += -faligned-new -Wno-abi


+ 3
- 5
src/override/Engine.cpp View File

@@ -140,11 +140,9 @@ static void Cable_step(Cable* that) {
const int channels = output->channels;
// Copy all voltages from output to input
for (int c = 0; c < channels; c++) {
float v = output->voltages[c];
// Set 0V if infinite or NaN
if (!std::isfinite(v))
v = 0.f;
input->voltages[c] = v;
if (!std::isfinite(output->voltages[c]))
__builtin_unreachable();
input->voltages[c] = output->voltages[c];
}
// Set higher channel voltages to 0
for (int c = channels; c < input->channels; c++) {


Loading…
Cancel
Save