xref: /onnv-gate/usr/src/grub/grub-0.97/netboot/i386_byteswap.h (revision 8044:b3af80bbf173)
1*8044SWilliam.Kucharski@Sun.COM #ifndef ETHERBOOT_BITS_BYTESWAP_H
2*8044SWilliam.Kucharski@Sun.COM #define ETHERBOOT_BITS_BYTESWAP_H
3*8044SWilliam.Kucharski@Sun.COM 
4*8044SWilliam.Kucharski@Sun.COM #include "types.h"
__i386_bswap_16(uint16_t x)5*8044SWilliam.Kucharski@Sun.COM static inline uint16_t __i386_bswap_16(uint16_t x)
6*8044SWilliam.Kucharski@Sun.COM {
7*8044SWilliam.Kucharski@Sun.COM 	__asm__("xchgb %b0,%h0\n\t"
8*8044SWilliam.Kucharski@Sun.COM 		: "=q" (x)
9*8044SWilliam.Kucharski@Sun.COM 		: "0" (x));
10*8044SWilliam.Kucharski@Sun.COM 	return x;
11*8044SWilliam.Kucharski@Sun.COM }
12*8044SWilliam.Kucharski@Sun.COM 
__i386_bswap_32(uint32_t x)13*8044SWilliam.Kucharski@Sun.COM static inline uint32_t __i386_bswap_32(uint32_t x)
14*8044SWilliam.Kucharski@Sun.COM {
15*8044SWilliam.Kucharski@Sun.COM 	__asm__("xchgb %b0,%h0\n\t"
16*8044SWilliam.Kucharski@Sun.COM 		"rorl $16,%0\n\t"
17*8044SWilliam.Kucharski@Sun.COM 		"xchgb %b0,%h0"
18*8044SWilliam.Kucharski@Sun.COM 		: "=q" (x)
19*8044SWilliam.Kucharski@Sun.COM 		: "0" (x));
20*8044SWilliam.Kucharski@Sun.COM 	return x;
21*8044SWilliam.Kucharski@Sun.COM }
22*8044SWilliam.Kucharski@Sun.COM 
23*8044SWilliam.Kucharski@Sun.COM 
24*8044SWilliam.Kucharski@Sun.COM #define __bswap_constant_16(x) \
25*8044SWilliam.Kucharski@Sun.COM 	((uint16_t)((((uint16_t)(x) & 0x00ff) << 8) | \
26*8044SWilliam.Kucharski@Sun.COM 		(((uint16_t)(x) & 0xff00) >> 8)))
27*8044SWilliam.Kucharski@Sun.COM 
28*8044SWilliam.Kucharski@Sun.COM #define __bswap_constant_32(x) \
29*8044SWilliam.Kucharski@Sun.COM 	((uint32_t)((((uint32_t)(x) & 0x000000ffU) << 24) | \
30*8044SWilliam.Kucharski@Sun.COM 		(((uint32_t)(x) & 0x0000ff00U) <<  8) | \
31*8044SWilliam.Kucharski@Sun.COM 		(((uint32_t)(x) & 0x00ff0000U) >>  8) | \
32*8044SWilliam.Kucharski@Sun.COM 		(((uint32_t)(x) & 0xff000000U) >> 24)))
33*8044SWilliam.Kucharski@Sun.COM 
34*8044SWilliam.Kucharski@Sun.COM #define __bswap_16(x) \
35*8044SWilliam.Kucharski@Sun.COM 	(__builtin_constant_p(x) ? \
36*8044SWilliam.Kucharski@Sun.COM 	__bswap_constant_16(x) : \
37*8044SWilliam.Kucharski@Sun.COM 	__i386_bswap_16(x))
38*8044SWilliam.Kucharski@Sun.COM 
39*8044SWilliam.Kucharski@Sun.COM 
40*8044SWilliam.Kucharski@Sun.COM #define __bswap_32(x) \
41*8044SWilliam.Kucharski@Sun.COM 	(__builtin_constant_p(x) ? \
42*8044SWilliam.Kucharski@Sun.COM 	__bswap_constant_32(x) : \
43*8044SWilliam.Kucharski@Sun.COM 	__i386_bswap_32(x))
44*8044SWilliam.Kucharski@Sun.COM 
45*8044SWilliam.Kucharski@Sun.COM 
46*8044SWilliam.Kucharski@Sun.COM #endif /* ETHERBOOT_BITS_BYTESWAP_H */
47