6a46812
--- a/source/modules/water/memory/ByteOrder.h.orig	2018-12-25 09:55:04.000000000 +0100
6a46812
+++ b/source/modules/water/memory/ByteOrder.h	2018-12-25 13:00:27.500279074 +0100
6a46812
@@ -28,7 +28,11 @@
6a46812
 
6a46812
 #include "../water.h"
6a46812
 
6a46812
-#ifdef CARLA_OS_MAC
6a46812
+#if defined(CARLA_OS_BSD)
6a46812
+# include <sys/endian.h>
6a46812
+#elif defined(CARLA_OS_LINUX)
6a46812
+# include <byteswap.h>
6a46812
+#elif defined(CARLA_OS_MAC)
6a46812
 # include <libkern/OSByteOrder.h>
6a46812
 #endif
6a46812
 
6a46812
@@ -146,14 +150,24 @@
6a46812
 //==============================================================================
6a46812
 inline uint16 ByteOrder::swap (uint16 n) noexcept
be46962
 {
6a46812
+   #if defined(CARLA_OS_BSD)
6a46812
+    return bswap16 (n);
6a46812
+   #elif defined(CARLA_OS_LINUX)
6a46812
+    return bswap_16 (n);
6a46812
+   #else
6a46812
     return static_cast<uint16> ((n << 8) | (n >> 8));
6a46812
+   #endif
6a46812
 }
6a46812
 
6a46812
 inline uint32 ByteOrder::swap (uint32 n) noexcept
6a46812
 {
6a46812
-   #ifdef CARLA_OS_MAC
6a46812
+   #if defined(CARLA_OS_BSD)
6a46812
+    return bswap32 (n);
6a46812
+   #elif defined(CARLA_OS_LINUX)
6a46812
+    return bswap_32 (n);
6a46812
+   #elif defined(CARLA_OS_MAC)
be46962
     return OSSwapInt32 (n);
be46962
-   #elif defined(CARLA_OS_WIN) || ! (defined (__arm__) || defined (__arm64__) || defined (__aarch64__))
6a46812
+   #elif defined(__i386__) || defined(__x86_64__)
be46962
     asm("bswap %%eax" : "=a"(n) : "a"(n));
be46962
     return n;
be46962
    #else
6a46812
@@ -163,7 +177,11 @@
6a46812
 
6a46812
 inline uint64 ByteOrder::swap (uint64 value) noexcept
6a46812
 {
6a46812
-   #ifdef CARLA_OS_MAC
6a46812
+   #if defined(CARLA_OS_BSD)
6a46812
+    return bswap64 (value);
6a46812
+   #elif defined(CARLA_OS_LINUX)
6a46812
+    return bswap_64 (value);
6a46812
+   #elif defined(CARLA_OS_MAC)
6a46812
     return OSSwapInt64 (value);
6a46812
    #else
6a46812
     return (((uint64) swap ((uint32) value)) << 32) | swap ((uint32) (value >> 32));