This dumps a ton of configure-time checks for system endian macros. Given that we're marking the mixed-endian fixup code as cold, getting at the system macros is a waste of code.
Signed-off-by: Eric Anholt <e...@anholt.net> --- configure.ac | 60 ------------------------------------------------- glx/glxbyteorder.h | 40 ++++++++++++++++----------------- include/dix-config.h.in | 15 ------------- 3 files changed, 20 insertions(+), 95 deletions(-) diff --git a/configure.ac b/configure.ac index 8881ec34f7cd..07c5520940a1 100644 --- a/configure.ac +++ b/configure.ac @@ -147,66 +147,6 @@ fi AC_TYPE_PID_T -# Checks for headers/macros for byte swapping -# Known variants: -# <byteswap.h> bswap_16, bswap_32, bswap_64 (glibc) -# <sys/endian.h> __swap16, __swap32, __swap64 (OpenBSD) -# <sys/endian.h> bswap16, bswap32, bswap64 (other BSD's) -# and a fallback to local macros if none of the above are found - -# if <byteswap.h> is found, assume it's the correct version -AC_CHECK_HEADERS([byteswap.h]) - -# if <sys/endian.h> is found, have to check which version -AC_CHECK_HEADER([sys/endian.h], [HAVE_SYS_ENDIAN_H="yes"], [HAVE_SYS_ENDIAN_H="no"]) - -if test "x$HAVE_SYS_ENDIAN_H" = "xyes" ; then - AC_MSG_CHECKING([for __swap16 variant of <sys/endian.h> byteswapping macros]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([ -#include <sys/types.h> -#include <sys/endian.h> - ], [ -int a = 1, b; -b = __swap16(a); - ]) -], [SYS_ENDIAN__SWAP='yes'], [SYS_ENDIAN__SWAP='no']) - AC_MSG_RESULT([$SYS_ENDIAN__SWAP]) - - AC_MSG_CHECKING([for bswap16 variant of <sys/endian.h> byteswapping macros]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([ -#include <sys/types.h> -#include <sys/endian.h> - ], [ -int a = 1, b; -b = bswap16(a); - ]) -], [SYS_ENDIAN_BSWAP='yes'], [SYS_ENDIAN_BSWAP='no']) - AC_MSG_RESULT([$SYS_ENDIAN_BSWAP]) - - if test "$SYS_ENDIAN_BSWAP" = "yes" ; then - USE_SYS_ENDIAN_H=yes - BSWAP=bswap - else - if test "$SYS_ENDIAN__SWAP" = "yes" ; then - USE_SYS_ENDIAN_H=yes - BSWAP=__swap - else - USE_SYS_ENDIAN_H=no - fi - fi - - if test "$USE_SYS_ENDIAN_H" = "yes" ; then - AC_DEFINE([USE_SYS_ENDIAN_H], 1, - [Define to use byteswap macros from <sys/endian.h>]) - AC_DEFINE_UNQUOTED([bswap_16], ${BSWAP}16, - [Define to 16-bit byteswap macro]) - AC_DEFINE_UNQUOTED([bswap_32], ${BSWAP}32, - [Define to 32-bit byteswap macro]) - AC_DEFINE_UNQUOTED([bswap_64], ${BSWAP}64, - [Define to 64-bit byteswap macro]) - fi -fi - dnl Check to see if dlopen is in default libraries (like Solaris, which dnl has it in libc), or if libdl is needed to get it. AC_CHECK_FUNC([dlopen], [], diff --git a/glx/glxbyteorder.h b/glx/glxbyteorder.h index aa88b44b9b24..5e94e8626e66 100644 --- a/glx/glxbyteorder.h +++ b/glx/glxbyteorder.h @@ -35,27 +35,27 @@ #include <dix-config.h> #endif -#if HAVE_BYTESWAP_H -#include <byteswap.h> -#elif defined(USE_SYS_ENDIAN_H) -#include <sys/endian.h> -#elif defined(__APPLE__) -#include <libkern/OSByteOrder.h> -#define bswap_16 OSSwapInt16 -#define bswap_32 OSSwapInt32 -#define bswap_64 OSSwapInt64 -#else -#define bswap_16(value) \ - ((((value) & 0xff) << 8) | ((value) >> 8)) +#include "misc.h" -#define bswap_32(value) \ - (((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \ - (uint32_t)bswap_16((uint16_t)((value) >> 16))) +static inline uint16_t +bswap_16(uint16_t val) +{ + swap_uint16(&val); + return val; +} -#define bswap_64(value) \ - (((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \ - << 32) | \ - (uint64_t)bswap_32((uint32_t)((value) >> 32))) -#endif +static inline uint32_t +bswap_32(uint32_t val) +{ + swap_uint32(&val); + return val; +} + +static inline uint64_t +bswap_64(uint64_t val) +{ + swap_uint64(&val); + return val; +} #endif /* !defined(__GLXBYTEORDER_H__) */ diff --git a/include/dix-config.h.in b/include/dix-config.h.in index a59d441bb641..ad1ab20a6f06 100644 --- a/include/dix-config.h.in +++ b/include/dix-config.h.in @@ -63,9 +63,6 @@ /* Has libunwind support */ #undef HAVE_LIBUNWIND -/* Define to 1 if you have the <byteswap.h> header file. */ -#undef HAVE_BYTESWAP_H - /* Define to 1 if you have the `cbrt' function. */ #undef HAVE_CBRT @@ -322,9 +319,6 @@ /* Support UNIX socket connections */ #undef UNIXCONN -/* Define to use byteswap macros from <sys/endian.h> */ -#undef USE_SYS_ENDIAN_H - /* unaligned word accesses behave as expected */ #undef WORKING_UNALIGNED_INT @@ -454,15 +448,6 @@ /* Define to 1 if the DTrace Xserver provider probes should be built in */ #undef XSERVER_DTRACE -/* Define to 16-bit byteswap macro */ -#undef bswap_16 - -/* Define to 32-bit byteswap macro */ -#undef bswap_32 - -/* Define to 64-bit byteswap macro */ -#undef bswap_64 - /* Define to 1 if typeof works with your compiler. */ #undef HAVE_TYPEOF -- 2.11.0 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel