svn commit: r190853 - in head/sys: amd64/include i386/include

Ed Schouten ed at FreeBSD.org
Wed Apr 8 12:06:48 PDT 2009


Author: ed
Date: Wed Apr  8 19:06:47 2009
New Revision: 190853
URL: http://svn.freebsd.org/changeset/base/190853

Log:
  Implement __bswap16() without using inline assembly.
  
  Most compilers nowadays (including GCC) are smart enough to know what's
  going on and generate more efficient code anyway.
  
  Submitted by:	Christoph Mallon <christoph.mallon at gmx.de>

Modified:
  head/sys/amd64/include/endian.h
  head/sys/i386/include/endian.h

Modified: head/sys/amd64/include/endian.h
==============================================================================
--- head/sys/amd64/include/endian.h	Wed Apr  8 18:30:42 2009	(r190852)
+++ head/sys/amd64/include/endian.h	Wed Apr  8 19:06:47 2009	(r190853)
@@ -135,26 +135,6 @@ __extension__ ({ register __uint64_t __X
 
 #endif	/* __OPTIMIZE__ */
 
-#define __byte_swap_word_var(x) \
-__extension__ ({ register __uint16_t __X = (x); \
-   __asm ("xchgb %h0, %b0" : "+Q" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define	__byte_swap_word_const(x) \
-	((((x) & 0xff00) >> 8) | \
-	 (((x) & 0x00ff) << 8))
-
-#define	__byte_swap_word(x) (__builtin_constant_p(x) ? \
-	__byte_swap_word_const(x) : __byte_swap_word_var(x))
-
-#else	/* __OPTIMIZE__ */
-
-#define	__byte_swap_word(x) __byte_swap_word_var(x)
-
-#endif	/* __OPTIMIZE__ */
-
 static __inline __uint64_t
 __bswap64(__uint64_t _x)
 {
@@ -172,8 +152,7 @@ __bswap32(__uint32_t _x)
 static __inline __uint16_t
 __bswap16(__uint16_t _x)
 {
-
-	return (__byte_swap_word(_x));
+	return (_x << 8 | _x >> 8);
 }
 
 #define	__htonl(x)	__bswap32(x)

Modified: head/sys/i386/include/endian.h
==============================================================================
--- head/sys/i386/include/endian.h	Wed Apr  8 18:30:42 2009	(r190852)
+++ head/sys/i386/include/endian.h	Wed Apr  8 19:06:47 2009	(r190853)
@@ -109,26 +109,6 @@ __extension__ ({ register __uint32_t __X
 
 #endif	/* __OPTIMIZE__ */
 
-#define __byte_swap_word_var(x) \
-__extension__ ({ register __uint16_t __X = (x); \
-   __asm ("xchgb %h0, %b0" : "+q" (__X)); \
-   __X; })
-
-#ifdef __OPTIMIZE__
-
-#define	__byte_swap_word_const(x) \
-	((((x) & 0xff00) >> 8) | \
-	 (((x) & 0x00ff) << 8))
-
-#define	__byte_swap_word(x) (__builtin_constant_p(x) ? \
-	__byte_swap_word_const(x) : __byte_swap_word_var(x))
-
-#else	/* __OPTIMIZE__ */
-
-#define	__byte_swap_word(x) __byte_swap_word_var(x)
-
-#endif	/* __OPTIMIZE__ */
-
 static __inline __uint64_t
 __bswap64(__uint64_t _x)
 {
@@ -149,8 +129,7 @@ __bswap32(__uint32_t _x)
 static __inline __uint16_t
 __bswap16(__uint16_t _x)
 {
-
-	return (__byte_swap_word(_x));
+	return (_x << 8 | _x >> 8);
 }
 
 #define	__htonl(x)	__bswap32(x)


More information about the svn-src-head mailing list