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@gmx.de>
This commit is contained in:
Ed Schouten 2009-04-08 19:06:47 +00:00
parent 2f6a18582c
commit 17cfde3df4
2 changed files with 2 additions and 44 deletions

View File

@ -135,26 +135,6 @@ __extension__ ({ register __uint64_t __X = (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)

View File

@ -109,26 +109,6 @@ __extension__ ({ register __uint32_t __X = (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)