From 4f6091a7e2bfafcc760162dc7d73b39500ed099b Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 1 Feb 2020 16:10:25 +0100 Subject: [PATCH 1/3] Do not generate instruction "yield" on older ARM than v6 --- src/external/atomic_queue/defs.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/external/atomic_queue/defs.h b/src/external/atomic_queue/defs.h index 1f721f6c..49d7d615 100644 --- a/src/external/atomic_queue/defs.h +++ b/src/external/atomic_queue/defs.h @@ -20,7 +20,21 @@ static inline void spin_loop_pause() noexcept { namespace atomic_queue { constexpr int CACHE_LINE_SIZE = 64; static inline void spin_loop_pause() noexcept { - __asm__ __volatile__("yield"); +#if (defined(__ARM_ARCH_6K__) || \ + defined(__ARM_ARCH_6Z__) || \ + defined(__ARM_ARCH_6ZK__) || \ + defined(__ARM_ARCH_6T2__) || \ + defined(__ARM_ARCH_7__) || \ + defined(__ARM_ARCH_7A__) || \ + defined(__ARM_ARCH_7R__) || \ + defined(__ARM_ARCH_7M__) || \ + defined(__ARM_ARCH_7S__) || \ + defined(__ARM_ARCH_8A__) || \ + defined(__aarch64__)) + asm volatile ("yield" ::: "memory"); +#else + asm volatile ("nop" ::: "memory"); +#endif } } // namespace atomic_queue #else From 05608108fc7c7dfd1a48b0ab4b40031e5fe8e769 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 1 Feb 2020 16:11:11 +0100 Subject: [PATCH 2/3] Check for existence of libatomic, some Linux don't have it --- src/CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 66708d72..4b5ca6f2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,5 @@ +include(CheckLibraryExists) + set (SFIZZ_SOURCES sfizz/Synth.cpp sfizz/FilePool.cpp @@ -30,7 +32,10 @@ target_link_libraries (sfizz_static PRIVATE sfizz_parser absl::flat_hash_map Thr add_library (sfizz::parser ALIAS sfizz_parser) add_library (sfizz::sfizz ALIAS sfizz_static) if (UNIX AND NOT APPLE) - target_link_libraries (sfizz_static PRIVATE atomic) + check_library_exists(atomic __atomic_load "" LIBATOMIC_FOUND) + if (LIBATOMIC_FOUND) + target_link_libraries (sfizz_static PRIVATE atomic) + endif() endif() # Shared library and installation target @@ -55,7 +60,9 @@ if (SFIZZ_SHARED) endif() if (UNIX AND NOT APPLE) - target_link_libraries (sfizz_shared PRIVATE atomic) + if (LIBATOMIC_FOUND) + target_link_libraries (sfizz_shared PRIVATE atomic) + endif() endif() endif() From 9c321af37ba4bd3de9744907eb9b1ef26570a216 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sat, 1 Feb 2020 16:11:40 +0100 Subject: [PATCH 3/3] Fixes to allow building on GCC 5.3.1 --- src/sfizz/Region.cpp | 2 +- src/sfizz/Synth.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sfizz/Region.cpp b/src/sfizz/Region.cpp index d3c71232..2428f079 100644 --- a/src/sfizz/Region.cpp +++ b/src/sfizz/Region.cpp @@ -767,7 +767,7 @@ float sfz::Region::velocityCurve(uint8_t velocity) const noexcept return gain; } -constexpr uint8_t offsetAndClamp(uint8_t key, int offset, sfz::Range range) +uint8_t offsetAndClamp(uint8_t key, int offset, sfz::Range range) { const int offsetKey { key + offset }; if (offsetKey > std::numeric_limits::max()) diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 4a2ad7de..d9f88d15 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -165,7 +165,7 @@ void sfz::Synth::handleControlOpcodes(const std::vector& members) [[fallthrough]]; case hash("label_cc"): if (member.parameter && Default::ccNumberRange.containsWithEnd(*member.parameter)) - ccNames.emplace_back(*member.parameter, member.value); + ccNames.emplace_back(*member.parameter, std::string(member.value)); break; case hash("Default_path"): [[fallthrough]];