[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 3/3] Add support for OpenBSD



On Thursday 19 October 2006 09:51, Keir Fraser wrote:
> On 18/10/06 8:08 am, "Christoph Egger" <Christoph.Egger@xxxxxxx> wrote:
> > /usr/include/sys/endian.h:156:1: this is the location of the previous
> > definition
> > boot/mkelf32.c:94:1: "swap32" redefined
> > /usr/include/sys/endian.h:157:1: this is the location of the previous
> > definition
> > boot/mkelf32.c:95:1: "swap64" redefined
> > /usr/include/sys/endian.h:158:1: this is the location of the previous
> > definition
>
> Is there a standard definition for these functions (i.e., can we be *sure*
> the original definitions have the same semantics as our own)? If not, which
> I think is the case, we're better off #undef'ing the old definitions.

This is the snippet of /usr/include/endian.h:

-----------------------------------------------------------------------------------
#ifdef __GNUC__

#define __swap16gen(x) __statement({                                    \
        __uint16_t __swap16gen_x = (x);                                 \
                                                                        \
        (__uint16_t)((__swap16gen_x & 0xff) << 8 |                      \
            (__swap16gen_x & 0xff00) >> 8);                             \
})

#define __swap32gen(x) __statement({                                    \
        __uint32_t __swap32gen_x = (x);                                 \
                                                                        \
        (__uint32_t)((__swap32gen_x & 0xff) << 24 |                     \
            (__swap32gen_x & 0xff00) << 8 |                             \
            (__swap32gen_x & 0xff0000) >> 8 |                           \
            (__swap32gen_x & 0xff000000) >> 24);                        \
})

#define __swap64gen(x) __statement({                                    \
        __uint64_t __swap64gen_x = (x);                                 \
                                                                        \
        (__uint64_t)((__swap64gen_x & 0xff) << 56 |                     \
            (__swap64gen_x & 0xff00ULL) << 40 |                         \
            (__swap64gen_x & 0xff0000ULL) << 24 |                       \
            (__swap64gen_x & 0xff000000ULL) << 8 |                      \
            (__swap64gen_x & 0xff00000000ULL) >> 8 |                    \
            (__swap64gen_x & 0xff0000000000ULL) >> 24 |                 \
            (__swap64gen_x & 0xff000000000000ULL) >> 40 |               \
            (__swap64gen_x & 0xff00000000000000ULL) >> 56);             \
})

#else /* __GNUC__ */

/* Note that these macros evaluate their arguments several times.  */
#define __swap16gen(x)                                                  \
    (__uint16_t)(((__uint16_t)(x) & 0xffU) << 8 | ((__uint16_t)(x) & 0xff00U) 
>> 8)

#define __swap32gen(x)                                                  \
    (__uint32_t)(((__uint32_t)(x) & 0xff) << 24 |                       \
    ((__uint32_t)(x) & 0xff00) << 8 | ((__uint32_t)(x) & 0xff0000) >> 8 |\
    ((__uint32_t)(x) & 0xff000000) >> 24)

#define __swap64gen(x)                                                  \
        (__uint64_t)((((__uint64_t)(x) & 0xff) << 56) |                 \
            ((__uint64_t)(x) & 0xff00ULL) << 40 |                       \
            ((__uint64_t)(x) & 0xff0000ULL) << 24 |                     \
            ((__uint64_t)(x) & 0xff000000ULL) << 8 |                    \
            ((__uint64_t)(x) & 0xff00000000ULL) >> 8 |                  \
            ((__uint64_t)(x) & 0xff0000000000ULL) >> 24 |               \
            ((__uint64_t)(x) & 0xff000000000000ULL) >> 40 |             \
            ((__uint64_t)(x) & 0xff00000000000000ULL) >> 56)

#endif /* __GNUC__ */
-----------------------------------------------------------------------------------




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.