svn commit: r211266 - projects/ofed/head/sys/amd64/include

Jeff Roberson jeff at FreeBSD.org
Fri Aug 13 03:15:42 UTC 2010


Author: jeff
Date: Fri Aug 13 03:15:41 2010
New Revision: 211266
URL: http://svn.freebsd.org/changeset/base/211266

Log:
   - Allow endian related macros to do compile time conversion of constants.
  
  Sponsored by:	Isilon Systems, iX Systems, and Panasas.

Modified:
  projects/ofed/head/sys/amd64/include/endian.h

Modified: projects/ofed/head/sys/amd64/include/endian.h
==============================================================================
--- projects/ofed/head/sys/amd64/include/endian.h	Fri Aug 13 03:15:02 2010	(r211265)
+++ projects/ofed/head/sys/amd64/include/endian.h	Fri Aug 13 03:15:41 2010	(r211266)
@@ -69,10 +69,16 @@ extern "C" {
 
 #if defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE_BUILTIN_CONSTANT_P)
 
-#define __byte_swap_int_var(x) \
-__extension__ ({ register __uint32_t __X = (x); \
-   __asm ("bswap %0" : "+r" (__X)); \
-   __X; })
+static inline __uint32_t
+__byte_swap_int_var(__uint32_t x)
+{
+	register __uint32_t _x;
+
+
+	_x = x;
+	__asm ("bswap %0" : "+r" (_x));
+	return (_x);
+}
 
 #ifdef __OPTIMIZE__
 
@@ -81,60 +87,47 @@ __extension__ ({ register __uint32_t __X
 	 (((x) & 0x00ff0000) >>  8) | \
 	 (((x) & 0x0000ff00) <<  8) | \
 	 (((x) & 0x000000ff) << 24))
-#define	__byte_swap_int(x) (__builtin_constant_p(x) ? \
+#define	__bswap32(x)	(__builtin_constant_p(x) ? \
 	__byte_swap_int_const(x) : __byte_swap_int_var(x))
 
 #else	/* __OPTIMIZE__ */
 
-#define	__byte_swap_int(x) __byte_swap_int_var(x)
+#define	__bswap32(x)	__byte_swap_int_var(x)
 
 #endif	/* __OPTIMIZE__ */
 
-#define __byte_swap_long_var(x) \
-__extension__ ({ register __uint64_t __X = (x); \
-   __asm ("bswap %0" : "+r" (__X)); \
-   __X; })
+static inline __uint64_t
+__byte_swap_long_var(__uint64_t x)
+{
+	register __uint64_t _x;
+
+	_x = x;
+	__asm ("bswap %0" : "+r" (_x));
+	return (_x);
+}
 
 #ifdef __OPTIMIZE__
 
 #define	__byte_swap_long_const(x) \
-	(((x >> 56) | \
-	 ((x >> 40) & 0xff00) | \
-	 ((x >> 24) & 0xff0000) | \
-	 ((x >> 8) & 0xff000000) | \
-	 ((x << 8) & (0xfful << 32)) | \
-	 ((x << 24) & (0xfful << 40)) | \
-	 ((x << 40) & (0xfful << 48)) | \
-	 ((x << 56))))
+	((__uint64_t)(((__uint64_t)x >> 56) |		\
+	 (((__uint64_t)x >> 40) & 0xff00) |		\
+	 (((__uint64_t)x >> 24) & 0xff0000) |		\
+	 (((__uint64_t)x >> 8) & 0xff000000) |		\
+	 (((__uint64_t)x << 8) & (0xfful << 32)) |	\
+	 (((__uint64_t)x << 24) & (0xfful << 40)) |	\
+	 (((__uint64_t)x << 40) & (0xfful << 48)) |	\
+	 (((__uint64_t)x << 56))))
 
-#define	__byte_swap_long(x) (__builtin_constant_p(x) ? \
+#define	__bswap64(x)	(__builtin_constant_p(x) ? \
 	__byte_swap_long_const(x) : __byte_swap_long_var(x))
 
 #else	/* __OPTIMIZE__ */
 
-#define	__byte_swap_long(x) __byte_swap_long_var(x)
+#define	__bswap64(x)	__byte_swap_long_var(x)
 
 #endif	/* __OPTIMIZE__ */
 
-static __inline __uint64_t
-__bswap64(__uint64_t _x)
-{
-
-	return (__byte_swap_long(_x));
-}
-
-static __inline __uint32_t
-__bswap32(__uint32_t _x)
-{
-
-	return (__byte_swap_int(_x));
-}
-
-static __inline __uint16_t
-__bswap16(__uint16_t _x)
-{
-	return (_x << 8 | _x >> 8);
-}
+#define	__bswap16(_x)	(__uint16_t)((_x) << 8 | (_x) >> 8)
 
 #define	__htonl(x)	__bswap32(x)
 #define	__htons(x)	__bswap16(x)


More information about the svn-src-projects mailing list