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.COMstatic 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.COMstatic 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