mirror of https://gitee.com/openkylin/qemu.git
85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
#ifndef BSWAP_H
|
|
#define BSWAP_H
|
|
|
|
#include "config-host.h"
|
|
|
|
#include <inttypes.h>
|
|
|
|
#ifdef HAVE_BYTESWAP_H
|
|
#include <byteswap.h>
|
|
#else
|
|
|
|
#define bswap_16(x) \
|
|
({ \
|
|
uint16_t __x = (x); \
|
|
((uint16_t)( \
|
|
(((uint16_t)(__x) & (uint16_t)0x00ffU) << 8) | \
|
|
(((uint16_t)(__x) & (uint16_t)0xff00U) >> 8) )); \
|
|
})
|
|
|
|
#define bswap_32(x) \
|
|
({ \
|
|
uint32_t __x = (x); \
|
|
((uint32_t)( \
|
|
(((uint32_t)(__x) & (uint32_t)0x000000ffUL) << 24) | \
|
|
(((uint32_t)(__x) & (uint32_t)0x0000ff00UL) << 8) | \
|
|
(((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >> 8) | \
|
|
(((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) )); \
|
|
})
|
|
|
|
#define bswap_64(x) \
|
|
({ \
|
|
uint64_t __x = (x); \
|
|
((uint64_t)( \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000000000ffULL) << 56) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000000000ff00ULL) << 40) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000000000ff0000ULL) << 24) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00000000ff000000ULL) << 8) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x000000ff00000000ULL) >> 8) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x0000ff0000000000ULL) >> 24) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0x00ff000000000000ULL) >> 40) | \
|
|
(uint64_t)(((uint64_t)(__x) & (uint64_t)0xff00000000000000ULL) >> 56) )); \
|
|
})
|
|
|
|
#endif /* !HAVE_BYTESWAP_H */
|
|
|
|
#if defined(__alpha__) || defined (__ia64__)
|
|
#define HOST_LONG_BITS 64
|
|
#else
|
|
#define HOST_LONG_BITS 32
|
|
#endif
|
|
|
|
#define HOST_LONG_SIZE (HOST_LONG_BITS / 8)
|
|
|
|
static inline uint16_t bswap16(uint16_t x)
|
|
{
|
|
return bswap_16(x);
|
|
}
|
|
|
|
static inline uint32_t bswap32(uint32_t x)
|
|
{
|
|
return bswap_32(x);
|
|
}
|
|
|
|
static inline uint64_t bswap64(uint64_t x)
|
|
{
|
|
return bswap_64(x);
|
|
}
|
|
|
|
static inline void bswap16s(uint16_t *s)
|
|
{
|
|
*s = bswap16(*s);
|
|
}
|
|
|
|
static inline void bswap32s(uint32_t *s)
|
|
{
|
|
*s = bswap32(*s);
|
|
}
|
|
|
|
static inline void bswap64s(uint64_t *s)
|
|
{
|
|
*s = bswap64(*s);
|
|
}
|
|
|
|
#endif /* BSWAP_H */
|