Signed-off-by: falkTX <falktx@falktx.com>tags/23.02
@@ -20,6 +20,12 @@ | |||||
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | #if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | ||||
# include_next <emmintrin.h> | # include_next <emmintrin.h> | ||||
#else | #else | ||||
# define SIMDE_ACCURACY_PREFERENCE 0 | |||||
# define SIMDE_ENABLE_NATIVE_ALIASES | # 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/sse.h" | ||||
#endif | #endif |
@@ -20,7 +20,13 @@ | |||||
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | #if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | ||||
# include_next <immintrin.h> | # include_next <immintrin.h> | ||||
#else | #else | ||||
# define SIMDE_ACCURACY_PREFERENCE 0 | |||||
# define SIMDE_ENABLE_NATIVE_ALIASES | # 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/sse.h" | ||||
# include "../simde/simde/x86/sse2.h" | # include "../simde/simde/x86/sse2.h" | ||||
#endif | #endif |
@@ -22,6 +22,12 @@ | |||||
#elif defined(__EMSCRIPTEN__) && !defined(CARDINAL_NOSIMD) | #elif defined(__EMSCRIPTEN__) && !defined(CARDINAL_NOSIMD) | ||||
# include <wasm_simd128.h> | # include <wasm_simd128.h> | ||||
#else | #else | ||||
# define SIMDE_ACCURACY_PREFERENCE 0 | |||||
# define SIMDE_ENABLE_NATIVE_ALIASES | # 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" | # include "../simde/simde/x86/mmx.h" | ||||
#endif | #endif |
@@ -67,7 +67,13 @@ __m64 _mm_set1_pi16(short w) | |||||
*/ | */ | ||||
#else | #else | ||||
# define SIMDE_ACCURACY_PREFERENCE 0 | |||||
# define SIMDE_ENABLE_NATIVE_ALIASES | # 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/sse.h" | ||||
# include "../simde/simde/x86/sse2.h" | # include "../simde/simde/x86/sse2.h" | ||||
# include "../simde/simde/x86/sse3.h" | # include "../simde/simde/x86/sse3.h" | ||||
@@ -20,6 +20,12 @@ | |||||
#if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | #if (defined(__i386__) || defined(__x86_64__) || defined(__EMSCRIPTEN__)) && !defined(CARDINAL_NOSIMD) | ||||
# include_next <xmmintrin.h> | # include_next <xmmintrin.h> | ||||
#else | #else | ||||
# define SIMDE_ACCURACY_PREFERENCE 0 | |||||
# define SIMDE_ENABLE_NATIVE_ALIASES | # 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" | # include "../simde/simde/x86/avx.h" | ||||
#endif | #endif |
@@ -182,6 +182,9 @@ struct HostAudio2 : HostAudio<2> { | |||||
if (in1connected) | if (in1connected) | ||||
{ | { | ||||
if (!std::isfinite(dataOuts[0][k])) | |||||
__builtin_unreachable(); | |||||
valueL = inputs[0].getVoltageSum() * 0.1f; | valueL = inputs[0].getVoltageSum() * 0.1f; | ||||
if (dcFilterEnabled) | if (dcFilterEnabled) | ||||
@@ -200,6 +203,9 @@ struct HostAudio2 : HostAudio<2> { | |||||
if (in2connected) | if (in2connected) | ||||
{ | { | ||||
if (!std::isfinite(dataOuts[1][k])) | |||||
__builtin_unreachable(); | |||||
valueR = inputs[1].getVoltageSum() * 0.1f; | valueR = inputs[1].getVoltageSum() * 0.1f; | ||||
if (dcFilterEnabled) | if (dcFilterEnabled) | ||||
@@ -146,14 +146,22 @@ struct HostCV : TerminalModule { | |||||
inputOffset = params[BIPOLAR_INPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; | inputOffset = params[BIPOLAR_INPUTS_1_5].getValue() > 0.1f ? 5.0f : 0.0f; | ||||
for (int i=0; i<5; ++i) | for (int i=0; i<5; ++i) | ||||
{ | |||||
if (!std::isfinite(dataOuts[i+ioOffset][k])) | |||||
__builtin_unreachable(); | |||||
dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset; | dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset; | ||||
} | |||||
if (pcontext->variant == kCardinalVariantMain) | if (pcontext->variant == kCardinalVariantMain) | ||||
{ | { | ||||
inputOffset = params[BIPOLAR_INPUTS_6_10].getValue() > 0.1f ? 5.0f : 0.0f; | inputOffset = params[BIPOLAR_INPUTS_6_10].getValue() > 0.1f ? 5.0f : 0.0f; | ||||
for (int i=5; i<10; ++i) | for (int i=5; i<10; ++i) | ||||
{ | |||||
if (!std::isfinite(dataOuts[i+ioOffset][k])) | |||||
__builtin_unreachable(); | |||||
dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset; | dataOuts[i+ioOffset][k] += inputs[i].getVoltage() + inputOffset; | ||||
} | |||||
} | } | ||||
} | } | ||||
}; | }; | ||||
@@ -924,7 +924,7 @@ protected: | |||||
json_object_set_new(moduleJ, "favorite", json_boolean(m.favorite)); | json_object_set_new(moduleJ, "favorite", json_boolean(m.favorite)); | ||||
if (m.added > 0) | if (m.added > 0) | ||||
json_object_set_new(moduleJ, "added", json_integer(m.added)); | 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)); | json_object_set_new(moduleJ, "lastAdded", json_real(m.lastAdded)); | ||||
if (json_object_size(moduleJ)) | if (json_object_size(moduleJ)) | ||||
@@ -104,6 +104,10 @@ ifeq ($(HAIKU),true) | |||||
BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC | BASE_FLAGS += -DCLOCK_MONOTONIC_RAW=CLOCK_MONOTONIC | ||||
endif | endif | ||||
ifeq ($(MOD_BUILD),true) | |||||
BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp | |||||
endif | |||||
ifneq ($(WASM),true) | ifneq ($(WASM),true) | ||||
ifneq ($(HAIKU),true) | ifneq ($(HAIKU),true) | ||||
BASE_FLAGS += -pthread | BASE_FLAGS += -pthread | ||||
@@ -323,6 +323,8 @@ BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=0 | |||||
else | else | ||||
BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=1 | BASE_FLAGS += -DDISTRHO_PLUGIN_USES_CUSTOM_MODGUI=1 | ||||
endif | endif | ||||
BASE_FLAGS += -DSIMDE_ENABLE_OPENMP -fopenmp | |||||
LINK_FLAGS += -fopenmp | |||||
endif | endif | ||||
ifneq ($(WASM),true) | ifneq ($(WASM),true) | ||||
@@ -346,8 +348,6 @@ BASE_FLAGS += -DNANOVG_GLES3_FORCED | |||||
endif | endif | ||||
BUILD_C_FLAGS += -std=gnu11 | 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) | ifneq ($(MACOS),true) | ||||
BUILD_CXX_FLAGS += -faligned-new -Wno-abi | BUILD_CXX_FLAGS += -faligned-new -Wno-abi | ||||
@@ -140,11 +140,9 @@ static void Cable_step(Cable* that) { | |||||
const int channels = output->channels; | const int channels = output->channels; | ||||
// Copy all voltages from output to input | // Copy all voltages from output to input | ||||
for (int c = 0; c < channels; c++) { | 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 | // Set higher channel voltages to 0 | ||||
for (int c = channels; c < input->channels; c++) { | for (int c = channels; c < input->channels; c++) { | ||||