diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/swap.h | 63 |
1 files changed, 15 insertions, 48 deletions
diff --git a/src/common/swap.h b/src/common/swap.h index cb723cb8a..fad0f35a7 100644 --- a/src/common/swap.h +++ b/src/common/swap.h | |||
| @@ -21,11 +21,6 @@ | |||
| 21 | 21 | ||
| 22 | #if defined(_MSC_VER) | 22 | #if defined(_MSC_VER) |
| 23 | #include <cstdlib> | 23 | #include <cstdlib> |
| 24 | #elif defined(__linux__) | ||
| 25 | #include <byteswap.h> | ||
| 26 | #elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || \ | ||
| 27 | defined(__NetBSD__) || defined(__OpenBSD__) | ||
| 28 | #include <sys/endian.h> | ||
| 29 | #endif | 24 | #endif |
| 30 | #include <cstring> | 25 | #include <cstring> |
| 31 | #include "common/common_types.h" | 26 | #include "common/common_types.h" |
| @@ -62,58 +57,30 @@ | |||
| 62 | namespace Common { | 57 | namespace Common { |
| 63 | 58 | ||
| 64 | #ifdef _MSC_VER | 59 | #ifdef _MSC_VER |
| 65 | inline u16 swap16(u16 _data) { | 60 | inline u16 swap16(u16 data) { |
| 66 | return _byteswap_ushort(_data); | 61 | return _byteswap_ushort(data); |
| 67 | } | ||
| 68 | inline u32 swap32(u32 _data) { | ||
| 69 | return _byteswap_ulong(_data); | ||
| 70 | } | ||
| 71 | inline u64 swap64(u64 _data) { | ||
| 72 | return _byteswap_uint64(_data); | ||
| 73 | } | ||
| 74 | #elif __linux__ | ||
| 75 | inline u16 swap16(u16 _data) { | ||
| 76 | return bswap_16(_data); | ||
| 77 | } | ||
| 78 | inline u32 swap32(u32 _data) { | ||
| 79 | return bswap_32(_data); | ||
| 80 | } | ||
| 81 | inline u64 swap64(u64 _data) { | ||
| 82 | return bswap_64(_data); | ||
| 83 | } | ||
| 84 | #elif __APPLE__ | ||
| 85 | inline __attribute__((always_inline)) u16 swap16(u16 _data) { | ||
| 86 | return (_data >> 8) | (_data << 8); | ||
| 87 | } | 62 | } |
| 88 | inline __attribute__((always_inline)) u32 swap32(u32 _data) { | 63 | inline u32 swap32(u32 data) { |
| 89 | return __builtin_bswap32(_data); | 64 | return _byteswap_ulong(data); |
| 90 | } | 65 | } |
| 91 | inline __attribute__((always_inline)) u64 swap64(u64 _data) { | 66 | inline u64 swap64(u64 data) { |
| 92 | return __builtin_bswap64(_data); | 67 | return _byteswap_uint64(data); |
| 93 | } | 68 | } |
| 94 | #elif defined(__Bitrig__) || defined(__OpenBSD__) | 69 | #elif defined(__clang__) || defined(__GNUC__) |
| 70 | #if defined(__Bitrig__) || defined(__OpenBSD__) | ||
| 95 | // redefine swap16, swap32, swap64 as inline functions | 71 | // redefine swap16, swap32, swap64 as inline functions |
| 96 | #undef swap16 | 72 | #undef swap16 |
| 97 | #undef swap32 | 73 | #undef swap32 |
| 98 | #undef swap64 | 74 | #undef swap64 |
| 99 | inline u16 swap16(u16 _data) { | 75 | #endif |
| 100 | return __swap16(_data); | 76 | inline u16 swap16(u16 data) { |
| 101 | } | 77 | return __builtin_bswap16(data); |
| 102 | inline u32 swap32(u32 _data) { | ||
| 103 | return __swap32(_data); | ||
| 104 | } | ||
| 105 | inline u64 swap64(u64 _data) { | ||
| 106 | return __swap64(_data); | ||
| 107 | } | ||
| 108 | #elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) | ||
| 109 | inline u16 swap16(u16 _data) { | ||
| 110 | return bswap16(_data); | ||
| 111 | } | 78 | } |
| 112 | inline u32 swap32(u32 _data) { | 79 | inline u32 swap32(u32 data) { |
| 113 | return bswap32(_data); | 80 | return __builtin_bswap32(data); |
| 114 | } | 81 | } |
| 115 | inline u64 swap64(u64 _data) { | 82 | inline u64 swap64(u64 data) { |
| 116 | return bswap64(_data); | 83 | return __builtin_bswap64(data); |
| 117 | } | 84 | } |
| 118 | #else | 85 | #else |
| 119 | // Slow generic implementation. | 86 | // Slow generic implementation. |