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:
		
							parent
							
								
									dae97e1bb4
								
							
						
					
					
						commit
						be80a3cb48
					
				
							
								
								
									
										60
									
								
								configure.ac
								
								
								
								
							
							
						
						
									
										60
									
								
								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], [], | ||||
|  |  | |||
|  | @ -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__) */ | ||||
|  |  | |||
|  | @ -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 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue