glx: Use the same endian swapping as the rest of the server.

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 <eric@anholt.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Eric Anholt 2017-03-27 14:21:43 -07:00
parent dae97e1bb4
commit be80a3cb48
3 changed files with 20 additions and 95 deletions

View File

@ -147,66 +147,6 @@ fi
AC_TYPE_PID_T 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 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. dnl has it in libc), or if libdl is needed to get it.
AC_CHECK_FUNC([dlopen], [], AC_CHECK_FUNC([dlopen], [],

View File

@ -35,27 +35,27 @@
#include <dix-config.h> #include <dix-config.h>
#endif #endif
#if HAVE_BYTESWAP_H #include "misc.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))
#define bswap_32(value) \ static inline uint16_t
(((uint32_t)bswap_16((uint16_t)((value) & 0xffff)) << 16) | \ bswap_16(uint16_t val)
(uint32_t)bswap_16((uint16_t)((value) >> 16))) {
swap_uint16(&val);
return val;
}
#define bswap_64(value) \ static inline uint32_t
(((uint64_t)bswap_32((uint32_t)((value) & 0xffffffff)) \ bswap_32(uint32_t val)
<< 32) | \ {
(uint64_t)bswap_32((uint32_t)((value) >> 32))) swap_uint32(&val);
#endif return val;
}
static inline uint64_t
bswap_64(uint64_t val)
{
swap_uint64(&val);
return val;
}
#endif /* !defined(__GLXBYTEORDER_H__) */ #endif /* !defined(__GLXBYTEORDER_H__) */

View File

@ -63,9 +63,6 @@
/* Has libunwind support */ /* Has libunwind support */
#undef HAVE_LIBUNWIND #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. */ /* Define to 1 if you have the `cbrt' function. */
#undef HAVE_CBRT #undef HAVE_CBRT
@ -322,9 +319,6 @@
/* Support UNIX socket connections */ /* Support UNIX socket connections */
#undef UNIXCONN #undef UNIXCONN
/* Define to use byteswap macros from <sys/endian.h> */
#undef USE_SYS_ENDIAN_H
/* unaligned word accesses behave as expected */ /* unaligned word accesses behave as expected */
#undef WORKING_UNALIGNED_INT #undef WORKING_UNALIGNED_INT
@ -454,15 +448,6 @@
/* Define to 1 if the DTrace Xserver provider probes should be built in */ /* Define to 1 if the DTrace Xserver provider probes should be built in */
#undef XSERVER_DTRACE #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. */ /* Define to 1 if typeof works with your compiler. */
#undef HAVE_TYPEOF #undef HAVE_TYPEOF