[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/7] xen: implement byteswap.h
On 22.10.2021 12:47, Lin Liu wrote: > --- /dev/null > +++ b/xen/include/xen/byteswap.h > @@ -0,0 +1,93 @@ > +#ifndef _BYTESWAP_H > +#define _BYTESWAP_H > + > +#include <xen/types.h> > + > +#if !__has_builtin(__builtin_bswap16) > +static always_inline uint16_t __builtin_bswap16(uint16_t val) > +{ > + return ((val & 0x00FF) << 8) | ((val & 0xFF00) >> 8); > +} > +#endif > + > +#if !__has_builtin(__builtin_bswap32) > +static always_inline uint32_t __builtin_bswap32(uint32_t val) > +{ > + return ((val & 0x000000FF) << 24) | > + ((val & 0x0000FF00) << 8) | > + ((val & 0x00FF0000) >> 8) | > + ((val & 0xFF000000) >> 24); > +} > +#endif > + > +#if !__has_builtin(__builtin_bswap64) > +static always_inline uint64_t __builtin_bswap64(uint64_t val) > +{ > + return ((val & 0x00000000000000FF) << 56) | > + ((val & 0x000000000000FF00) << 40) | > + ((val & 0x0000000000FF0000) << 24) | > + ((val & 0x00000000FF000000) << 8) | > + ((val & 0x000000FF00000000) >> 8) | > + ((val & 0x0000FF0000000000) >> 24) | > + ((val & 0x00FF000000000000) >> 40) | > + ((val & 0xFF00000000000000) >> 56); > +} > +#endif > + > +#define bswap16(x) __builtin_bswap16(x) > +#define bswap32(x) __builtin_bswap32(x) > +#define bswap64(x) __builtin_bswap64(x) > + > +#define bswap_ul(x) bswap##BITS_PER_LONG(x) I don't see how this is supposed to work - the compiler isn't going to expand BITS_PER_LONG before the token concatenation. You'll need helper macros to achieve that. Linux has __PASTE(); we may want to "steal" that (albeit preferably without any leading underscores). > +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ While you've worked towards abstracting older vs newer compiler versions, I'm afraid these constants aren't available in gcc 4.1 yet. They look to have appeared in 4.6. > +# ifndef __LITTLE_ENDIAN > +# define __LITTLE_ENDIAN 1234 > +# endif > + > +# ifndef __LITTLE_ENDIAN_BITFIELD > +# define __LITTLE_ENDIAN_BITFIELD > +# endif These are definitions which I don't think belong into a header of this name. They're imo well placed in byteorder/*.h. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |