mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Replace config-time define HOST_WORDS_BIGENDIAN
Replace a config-time define with a compile time condition define (compatible with clang and gcc) that must be declared prior to its usage. This avoids having a global configure time define, but also prevents from bad usage, if the config header wasn't included before. This can help to make some code independent from qemu too. gcc supports __BYTE_ORDER__ from about 4.6 and clang from 3.2. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> [ For the s390x parts I'm involved in ] Acked-by: Halil Pasic <pasic@linux.ibm.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220323155743.1585078-7-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
3f6c2e8b79
commit
e03b56863d
+2
-2
@@ -1202,8 +1202,8 @@ void kvm_hwpoison_page_add(ram_addr_t ram_addr)
|
||||
|
||||
static uint32_t adjust_ioeventfd_endianness(uint32_t val, uint32_t size)
|
||||
{
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
/* The kernel expects ioeventfd values in HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN != defined(TARGET_WORDS_BIGENDIAN)
|
||||
/* The kernel expects ioeventfd values in HOST_BIG_ENDIAN
|
||||
* endianness, but the memory core hands them in target endianness.
|
||||
* For example, PPC is always treated as big-endian even if running
|
||||
* on KVM and on PPC64LE. Correct here.
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
the ATOMIC_NAME macro, and redefined below. */
|
||||
#if DATA_SIZE == 1
|
||||
# define END
|
||||
#elif defined(HOST_WORDS_BIGENDIAN)
|
||||
#elif HOST_BIG_ENDIAN
|
||||
# define END _be
|
||||
#else
|
||||
# define END _le
|
||||
@@ -196,7 +196,7 @@ GEN_ATOMIC_HELPER_FN(umax_fetch, MAX, DATA_TYPE, new)
|
||||
|
||||
/* Define reverse-host-endian atomic operations. Note that END is used
|
||||
within the ATOMIC_NAME macro. */
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
# define END _le
|
||||
#else
|
||||
# define END _be
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@
|
||||
|
||||
typedef void (*audio_callback_fn) (void *opaque, int avail);
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define AUDIO_HOST_ENDIANNESS 1
|
||||
#else
|
||||
#define AUDIO_HOST_ENDIANNESS 0
|
||||
|
||||
+1
-1
@@ -122,7 +122,7 @@ static size_t dbus_put_buffer_out(HWVoiceOut *hw, void *buf, size_t size)
|
||||
return size;
|
||||
}
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define AUDIO_HOST_BE TRUE
|
||||
#else
|
||||
#define AUDIO_HOST_BE FALSE
|
||||
|
||||
@@ -144,7 +144,7 @@ static void initialize_debug_host(CPUDebug *s)
|
||||
|
||||
s->info.read_memory_func = host_read_memory;
|
||||
s->info.print_address_func = host_print_address;
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
s->info.endian = BFD_ENDIAN_BIG;
|
||||
#else
|
||||
s->info.endian = BFD_ENDIAN_LITTLE;
|
||||
|
||||
+2
-2
@@ -474,7 +474,7 @@ ssize_t load_elf_ram_sym(const char *filename,
|
||||
ret = ELF_LOAD_NOT_ELF;
|
||||
goto fail;
|
||||
}
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
data_order = ELFDATA2MSB;
|
||||
#else
|
||||
data_order = ELFDATA2LSB;
|
||||
@@ -511,7 +511,7 @@ ssize_t load_elf_ram_sym(const char *filename,
|
||||
|
||||
static void bswap_uboot_header(uboot_image_header_t *hdr)
|
||||
{
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
bswap32s(&hdr->ih_magic);
|
||||
bswap32s(&hdr->ih_hcrc);
|
||||
bswap32s(&hdr->ih_time);
|
||||
|
||||
+3
-3
@@ -26,7 +26,7 @@
|
||||
#define TYPE_ARTIST "artist"
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(ARTISTState, ARTIST)
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define ROP8OFF(_i) (3 - (_i))
|
||||
#else
|
||||
#define ROP8OFF
|
||||
@@ -712,7 +712,7 @@ static void combine_write_reg(hwaddr addr, uint64_t val, int size, void *out)
|
||||
* FIXME: is there a qemu helper for this?
|
||||
*/
|
||||
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
addr ^= 3;
|
||||
#endif
|
||||
|
||||
@@ -1087,7 +1087,7 @@ static uint64_t combine_read_reg(hwaddr addr, int size, void *in)
|
||||
* FIXME: is there a qemu helper for this?
|
||||
*/
|
||||
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
addr ^= 3;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -15,18 +15,18 @@
|
||||
|
||||
#if ORDER == 0
|
||||
#define NAME glue(lblp_, BORDER)
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define SWAP_WORDS 1
|
||||
#endif
|
||||
#elif ORDER == 1
|
||||
#define NAME glue(bbbp_, BORDER)
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
#define SWAP_WORDS 1
|
||||
#endif
|
||||
#else
|
||||
#define SWAP_PIXELS 1
|
||||
#define NAME glue(lbbp_, BORDER)
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define SWAP_WORDS 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -199,7 +199,7 @@ typedef struct QEMU_PACKED {
|
||||
SKIP_PIXEL(to); \
|
||||
} while (0)
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
# define SWAP_WORDS 1
|
||||
#endif
|
||||
|
||||
|
||||
+6
-6
@@ -94,19 +94,19 @@ const uint8_t gr_mask[16] = {
|
||||
(((uint32_t)(__x) & (uint32_t)0x00ff0000UL) >> 8) | \
|
||||
(((uint32_t)(__x) & (uint32_t)0xff000000UL) >> 24) ))
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define PAT(x) cbswap_32(x)
|
||||
#else
|
||||
#define PAT(x) (x)
|
||||
#endif
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define BIG 1
|
||||
#else
|
||||
#define BIG 0
|
||||
#endif
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define GET_PLANE(data, p) (((data) >> (24 - (p) * 8)) & 0xff)
|
||||
#else
|
||||
#define GET_PLANE(data, p) (((data) >> ((p) * 8)) & 0xff)
|
||||
@@ -133,7 +133,7 @@ static const uint32_t mask16[16] = {
|
||||
|
||||
#undef PAT
|
||||
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define PAT(x) (x)
|
||||
#else
|
||||
#define PAT(x) cbswap_32(x)
|
||||
@@ -1296,7 +1296,7 @@ static void vga_draw_text(VGACommonState *s, int full_update)
|
||||
if (cx > cx_max)
|
||||
cx_max = cx;
|
||||
*ch_attr_ptr = ch_attr;
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
ch = ch_attr >> 8;
|
||||
cattr = ch_attr & 0xff;
|
||||
#else
|
||||
@@ -1477,7 +1477,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
|
||||
vga_draw_line_func *vga_draw_line = NULL;
|
||||
bool share_surface, force_shadow = false;
|
||||
pixman_format_code_t format;
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
bool byteswap = !s->big_endian_fb;
|
||||
#else
|
||||
bool byteswap = s->big_endian_fb;
|
||||
|
||||
@@ -108,7 +108,7 @@ static void virtio_gpu_gl_device_realize(DeviceState *qdev, Error **errp)
|
||||
{
|
||||
VirtIOGPU *g = VIRTIO_GPU(qdev);
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
error_setg(errp, "virgl is not supported on bigendian platforms");
|
||||
return;
|
||||
#endif
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "exec/hwaddr.h"
|
||||
#include "net/can_emu.h"
|
||||
|
||||
#ifndef HOST_WORDS_BIGENDIAN
|
||||
#if !HOST_BIG_ENDIAN
|
||||
#define __LITTLE_ENDIAN_BITFIELD 1
|
||||
#endif
|
||||
|
||||
|
||||
+2
-2
@@ -35,7 +35,7 @@
|
||||
#define __le32 uint32_t
|
||||
#define __le64 uint64_t
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define __BIG_ENDIAN_BITFIELD
|
||||
#else
|
||||
#endif
|
||||
@@ -800,7 +800,7 @@ struct Vmxnet3_DriverShared {
|
||||
#undef __le16
|
||||
#undef __le32
|
||||
#undef __le64
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#undef __BIG_ENDIAN_BITFIELD
|
||||
#endif
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ typedef struct SCLPEventsBus {
|
||||
} SCLPEventsBus;
|
||||
|
||||
/* we need to save 32 bit chunks for compatibility */
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define RECV_MASK_LOWER 1
|
||||
#define RECV_MASK_UPPER 0
|
||||
#else /* little endian host */
|
||||
|
||||
+1
-1
@@ -989,7 +989,7 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
|
||||
if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
|
||||
return false;
|
||||
}
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
|
||||
#else
|
||||
return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
|
||||
|
||||
@@ -34,13 +34,14 @@
|
||||
|
||||
/* some important defines:
|
||||
*
|
||||
* HOST_WORDS_BIGENDIAN : if defined, the host cpu is big endian and
|
||||
* HOST_BIG_ENDIAN : whether the host cpu is big endian and
|
||||
* otherwise little endian.
|
||||
*
|
||||
* TARGET_WORDS_BIGENDIAN : same for target cpu
|
||||
* TARGET_WORDS_BIGENDIAN : if defined, the host cpu is big endian and otherwise
|
||||
* little endian.
|
||||
*/
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN != defined(TARGET_WORDS_BIGENDIAN)
|
||||
#define BSWAP_NEEDED
|
||||
#endif
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ enum device_endian {
|
||||
DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN
|
||||
#define DEVICE_HOST_ENDIAN DEVICE_BIG_ENDIAN
|
||||
#else
|
||||
#define DEVICE_HOST_ENDIAN DEVICE_LITTLE_ENDIAN
|
||||
|
||||
@@ -28,7 +28,7 @@ typedef enum MemOp {
|
||||
MO_SIGN = 0x08, /* Sign-extended, otherwise zero-extended. */
|
||||
|
||||
MO_BSWAP = 0x10, /* Host reverse endian. */
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
MO_LE = MO_BSWAP,
|
||||
MO_BE = 0,
|
||||
#else
|
||||
|
||||
@@ -2931,7 +2931,7 @@ static inline MemOp devend_memop(enum device_endian end)
|
||||
QEMU_BUILD_BUG_ON(DEVICE_HOST_ENDIAN != DEVICE_LITTLE_ENDIAN &&
|
||||
DEVICE_HOST_ENDIAN != DEVICE_BIG_ENDIAN);
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
#if HOST_BIG_ENDIAN != defined(TARGET_WORDS_BIGENDIAN)
|
||||
/* Swap if non-host endianness or native (target) endianness */
|
||||
return (end == DEVICE_HOST_ENDIAN) ? 0 : MO_BSWAP;
|
||||
#else
|
||||
|
||||
@@ -103,7 +103,7 @@ typedef struct {
|
||||
#define make_floatx80(exp, mant) ((floatx80) { mant, exp })
|
||||
#define make_floatx80_init(exp, mant) { .low = mant, .high = exp }
|
||||
typedef struct {
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
#if HOST_BIG_ENDIAN
|
||||
uint64_t high, low;
|
||||
#else
|
||||
uint64_t low, high;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user