X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=bswap.h;h=82a79517db971137f72d6c160b5721af131e6721;hb=4a81ab81e4d947a3a0c8408c743ad94e7c1b8a30;hp=08b77d9377627ebcdfd9feb43f98ab92acc93b76;hpb=1360677cfe3ca8f945fa1de77823df21a77e4500;p=qemu.git diff --git a/bswap.h b/bswap.h index 08b77d937..82a79517d 100644 --- a/bswap.h +++ b/bswap.h @@ -5,13 +5,13 @@ #include -#ifdef HAVE_MACHINE_BSWAP_H +#ifdef CONFIG_MACHINE_BSWAP_H #include #include #include #else -#ifdef HAVE_BYTESWAP_H +#ifdef CONFIG_BYTESWAP_H #include #else @@ -47,7 +47,7 @@ (uint64_t)(((uint64_t)(__x) & (uint64_t)0xff00000000000000ULL) >> 56) )); \ }) -#endif /* !HAVE_BYTESWAP_H */ +#endif /* !CONFIG_BYTESWAP_H */ static inline uint16_t bswap16(uint16_t x) { @@ -64,7 +64,7 @@ static inline uint64_t bswap64(uint64_t x) return bswap_64(x); } -#endif /* ! HAVE_MACHINE_BSWAP_H */ +#endif /* ! CONFIG_MACHINE_BSWAP_H */ static inline void bswap16s(uint16_t *s) { @@ -81,7 +81,7 @@ static inline void bswap64s(uint64_t *s) *s = bswap64(*s); } -#if defined(WORDS_BIGENDIAN) +#if defined(HOST_WORDS_BIGENDIAN) #define be_bswap(v, size) (v) #define le_bswap(v, size) bswap ## size(v) #define be_bswaps(v, size) @@ -134,7 +134,7 @@ CPU_CONVERT(le, 64, uint64_t) /* unaligned versions (optimized for frequent unaligned accesses)*/ -#if defined(__i386__) || defined(__powerpc__) +#if defined(__i386__) || defined(_ARCH_PPC) #define cpu_to_le16wu(p, v) cpu_to_le16w(p, v) #define cpu_to_le32wu(p, v) cpu_to_le32w(p, v) @@ -144,6 +144,7 @@ CPU_CONVERT(le, 64, uint64_t) #define cpu_to_be16wu(p, v) cpu_to_be16w(p, v) #define cpu_to_be32wu(p, v) cpu_to_be32w(p, v) +#define cpu_to_be64wu(p, v) cpu_to_be64w(p, v) #else @@ -151,7 +152,7 @@ static inline void cpu_to_le16wu(uint16_t *p, uint16_t v) { uint8_t *p1 = (uint8_t *)p; - p1[0] = v; + p1[0] = v & 0xff; p1[1] = v >> 8; } @@ -159,7 +160,7 @@ static inline void cpu_to_le32wu(uint32_t *p, uint32_t v) { uint8_t *p1 = (uint8_t *)p; - p1[0] = v; + p1[0] = v & 0xff; p1[1] = v >> 8; p1[2] = v >> 16; p1[3] = v >> 24; @@ -188,7 +189,7 @@ static inline void cpu_to_be16wu(uint16_t *p, uint16_t v) uint8_t *p1 = (uint8_t *)p; p1[0] = v >> 8; - p1[1] = v; + p1[1] = v & 0xff; } static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) @@ -198,15 +199,31 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) p1[0] = v >> 24; p1[1] = v >> 16; p1[2] = v >> 8; - p1[3] = v; + p1[3] = v & 0xff; +} + +static inline void cpu_to_be64wu(uint64_t *p, uint64_t v) +{ + uint8_t *p1 = (uint8_t *)p; + + p1[0] = v >> 56; + p1[1] = v >> 48; + p1[2] = v >> 40; + p1[3] = v >> 32; + p1[4] = v >> 24; + p1[5] = v >> 16; + p1[6] = v >> 8; + p1[7] = v & 0xff; } #endif -#ifdef WORDS_BIGENDIAN +#ifdef HOST_WORDS_BIGENDIAN #define cpu_to_32wu cpu_to_be32wu +#define leul_to_cpu(v) glue(glue(le,HOST_LONG_BITS),_to_cpu)(v) #else #define cpu_to_32wu cpu_to_le32wu +#define leul_to_cpu(v) (v) #endif #undef le_bswap @@ -214,4 +231,10 @@ static inline void cpu_to_be32wu(uint32_t *p, uint32_t v) #undef le_bswaps #undef be_bswaps +/* len must be one of 1, 2, 4 */ +static inline uint32_t qemu_bswap_len(uint32_t value, int len) +{ + return bswap32(value) >> (32 - 8 * len); +} + #endif /* BSWAP_H */