summaryrefslogtreecommitdiff
path: root/include/platform.h
diff options
context:
space:
mode:
authorDenys Vlasenko2010-10-18 11:40:26 +0200
committerDenys Vlasenko2010-10-18 11:40:26 +0200
commit9ff50b869780aba131dc9b542ccd0f1a3959e920 (patch)
treea1f65f2a5f8c3aa1d6f51bc15c734f2b3ae46ead /include/platform.h
parentb102e12253078e8c0ebdeeb5e1893ea6a025a700 (diff)
downloadbusybox-9ff50b869780aba131dc9b542ccd0f1a3959e920.zip
busybox-9ff50b869780aba131dc9b542ccd0f1a3959e920.tar.gz
*: deinline SWAP_xE64 on 32-bit CPUs. Wins !90 bytes both on 32 and 64 bits
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'include/platform.h')
-rw-r--r--include/platform.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/include/platform.h b/include/platform.h
index c255a17..b5c6685 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -150,6 +150,7 @@
/* ---- Endian Detection ------------------------------------ */
+#include <limits.h>
#if defined(__digital__) && defined(__unix__)
# include <sex.h>
#elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \
@@ -189,6 +190,10 @@
# error "Can't determine endianness"
#endif
+#if ULONG_MAX > 0xffffffff
+# define bb_bswap_64(x) bswap_64(x)
+#endif
+
/* SWAP_LEnn means "convert CPU<->little_endian by swapping bytes" */
#if BB_BIG_ENDIAN
# define SWAP_BE16(x) (x)
@@ -196,13 +201,13 @@
# define SWAP_BE64(x) (x)
# define SWAP_LE16(x) bswap_16(x)
# define SWAP_LE32(x) bswap_32(x)
-# define SWAP_LE64(x) bswap_64(x)
+# define SWAP_LE64(x) bb_bswap_64(x)
# define IF_BIG_ENDIAN(...) __VA_ARGS__
# define IF_LITTLE_ENDIAN(...)
#else
# define SWAP_BE16(x) bswap_16(x)
# define SWAP_BE32(x) bswap_32(x)
-# define SWAP_BE64(x) bswap_64(x)
+# define SWAP_BE64(x) bb_bswap_64(x)
# define SWAP_LE16(x) (x)
# define SWAP_LE32(x) (x)
# define SWAP_LE64(x) (x)