summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/swap.h63
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 @@
62namespace Common { 57namespace Common {
63 58
64#ifdef _MSC_VER 59#ifdef _MSC_VER
65inline u16 swap16(u16 _data) { 60inline u16 swap16(u16 data) {
66 return _byteswap_ushort(_data); 61 return _byteswap_ushort(data);
67}
68inline u32 swap32(u32 _data) {
69 return _byteswap_ulong(_data);
70}
71inline u64 swap64(u64 _data) {
72 return _byteswap_uint64(_data);
73}
74#elif __linux__
75inline u16 swap16(u16 _data) {
76 return bswap_16(_data);
77}
78inline u32 swap32(u32 _data) {
79 return bswap_32(_data);
80}
81inline u64 swap64(u64 _data) {
82 return bswap_64(_data);
83}
84#elif __APPLE__
85inline __attribute__((always_inline)) u16 swap16(u16 _data) {
86 return (_data >> 8) | (_data << 8);
87} 62}
88inline __attribute__((always_inline)) u32 swap32(u32 _data) { 63inline u32 swap32(u32 data) {
89 return __builtin_bswap32(_data); 64 return _byteswap_ulong(data);
90} 65}
91inline __attribute__((always_inline)) u64 swap64(u64 _data) { 66inline 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
99inline u16 swap16(u16 _data) { 75#endif
100 return __swap16(_data); 76inline u16 swap16(u16 data) {
101} 77 return __builtin_bswap16(data);
102inline u32 swap32(u32 _data) {
103 return __swap32(_data);
104}
105inline u64 swap64(u64 _data) {
106 return __swap64(_data);
107}
108#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)
109inline u16 swap16(u16 _data) {
110 return bswap16(_data);
111} 78}
112inline u32 swap32(u32 _data) { 79inline u32 swap32(u32 data) {
113 return bswap32(_data); 80 return __builtin_bswap32(data);
114} 81}
115inline u64 swap64(u64 _data) { 82inline 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.