Port x86_64 Specific Plugins to aarch64
ryukau opened this issue · comments
This issue is related to #17 and #21.
Following plugins are only available on x86_64 platforms.
- CubicPadSynth
- EnvelopedSine
- EsPhaser
- IterativeSinCluster
The reason is dependency to x86_64 SIMD instructions through vector class library (VCL).
A band-aid solution is available. Passing -DDISABLE_X86_64_PLUGINS=TRUE
option to CMake disables the build of affected plugins.
Proper solution requires some work. A problem is that the new code must be as fast as existing code. Otherwise they won't run on real-time due to high CPU load.
Plans
- Plan A: Use sse2neon (Issue 57 in VCL repository).
- Plan B: Fork VCL and replace x86_64 SIMD calls to simde.
- Plan C: Plain rewrite using simde.
Failed Attempts
Replacing Vec16f
to C++ standard library container ended up high CPU load that is unusable in real-time.
std::valarray
(EsPhaser onnon_simd_valarray
branch)std::array
(EsPhaser onnon_simd_array
branch)
TODO: Remove these branches when this issue is done.
Plan A is implemented on add_sse2neon
branch. VCL is forked to omit x86_64 assembly part (link to the fork).
Plan A seems to not working on Linux aarch64 (reference). The error might be solved by casting -1
to char
, but it's not good idea to patch without understanding the underlying things. It feels like triggering unintentional UB.
I couldn't figure out a way for plan B.
Currently heading in to plan C.
add_sse2neon
is merged into develop
.
Context: #21 (comment)
Now the aarch64 code path is live on master
branch.
Tag: UhhyouPlugins0.50.0