* [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
@ 2025-10-10 13:42 Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 01/16] linux-user/arm: Checkpatch style cleanups Philippe Mathieu-Daudé
` (16 more replies)
0 siblings, 17 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Philippe Mathieu-Daudé (16):
linux-user/arm: Checkpatch style cleanups
linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
ui: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
net: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
disas: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
hw/core/loader: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
hw/display: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
hw/virtio: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/alpha: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/mips: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/ppc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/riscv: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/s390x: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
target/sparc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
util/bitmap: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
include/hw/virtio/virtio-access.h | 6 +-
include/hw/virtio/virtio-gpu-bswap.h | 6 +-
target/arm/cpu.h | 8 +-
target/arm/tcg/translate-a64.h | 5 +-
disas/disas-host.c | 6 +-
hw/core/loader.c | 5 +-
hw/display/artist.c | 12 +-
hw/display/vga.c | 20 +-
hw/display/virtio-gpu-gl.c | 8 +-
hw/display/virtio-gpu-rutabaga.c | 8 +-
hw/virtio/vhost.c | 7 +-
linux-user/arm/nwfpe/double_cpdo.c | 12 +-
linux-user/arm/nwfpe/fpa11_cpdt.c | 77 +-
net/net.c | 14 +-
target/alpha/translate.c | 11 +-
target/arm/tcg/sve_helper.c | 10 +-
target/arm/tcg/translate-sve.c | 22 +-
target/arm/tcg/translate-vfp.c | 8 +-
target/arm/tcg/translate.c | 6 +-
target/mips/tcg/msa_helper.c | 889 ++++++++++++------------
target/ppc/arch_dump.c | 9 +-
target/ppc/int_helper.c | 28 +-
target/ppc/kvm.c | 25 +-
target/riscv/vector_helper.c | 32 +-
target/s390x/tcg/translate.c | 6 +-
target/sparc/vis_helper.c | 18 +-
ui/vdagent.c | 16 +-
ui/vnc.c | 6 +-
util/bitmap.c | 19 +-
target/ppc/translate/vmx-impl.c.inc | 14 +-
target/ppc/translate/vsx-impl.c.inc | 6 +-
target/riscv/insn_trans/trans_rvv.c.inc | 16 +-
target/s390x/tcg/translate_vx.c.inc | 6 +-
tcg/ppc/tcg-target.c.inc | 24 +-
34 files changed, 656 insertions(+), 709 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 01/16] linux-user/arm: Checkpatch style cleanups
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 02/16] linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (15 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Laurent Vivier
Update style in a pair of methods we are going to modify in
the following commit. No functional change.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
linux-user/arm/nwfpe/fpa11_cpdt.c | 66 ++++++++++++++++---------------
1 file changed, 35 insertions(+), 31 deletions(-)
diff --git a/linux-user/arm/nwfpe/fpa11_cpdt.c b/linux-user/arm/nwfpe/fpa11_cpdt.c
index fee525937c5..6b0317883a7 100644
--- a/linux-user/arm/nwfpe/fpa11_cpdt.c
+++ b/linux-user/arm/nwfpe/fpa11_cpdt.c
@@ -40,18 +40,18 @@ void loadSingle(const unsigned int Fn, target_ulong addr)
static inline
void loadDouble(const unsigned int Fn, target_ulong addr)
{
- FPA11 *fpa11 = GET_FPA11();
- unsigned int *p;
- p = (unsigned int*)&fpa11->fpreg[Fn].fDouble;
- fpa11->fType[Fn] = typeDouble;
+ FPA11 *fpa11 = GET_FPA11();
+ unsigned int *p;
+ p = (unsigned int *)&fpa11->fpreg[Fn].fDouble;
+ fpa11->fType[Fn] = typeDouble;
#if HOST_BIG_ENDIAN
- /* FIXME - handle failure of get_user() */
- get_user_u32(p[0], addr); /* sign & exponent */
- get_user_u32(p[1], addr + 4);
+ /* FIXME - handle failure of get_user() */
+ get_user_u32(p[0], addr); /* sign & exponent */
+ get_user_u32(p[1], addr + 4);
#else
- /* FIXME - handle failure of get_user() */
- get_user_u32(p[0], addr + 4);
- get_user_u32(p[1], addr); /* sign & exponent */
+ /* FIXME - handle failure of get_user() */
+ get_user_u32(p[0], addr + 4);
+ get_user_u32(p[1], addr); /* sign & exponent */
#endif
}
@@ -108,16 +108,18 @@ void storeSingle(const unsigned int Fn, target_ulong addr)
{
FPA11 *fpa11 = GET_FPA11();
float32 val;
- register unsigned int *p = (unsigned int*)&val;
+ register unsigned int *p = (unsigned int *)&val;
switch (fpa11->fType[Fn])
{
case typeDouble:
- val = float64_to_float32(fpa11->fpreg[Fn].fDouble, &fpa11->fp_status);
+ val = float64_to_float32(fpa11->fpreg[Fn].fDouble,
+ &fpa11->fp_status);
break;
case typeExtended:
- val = floatx80_to_float32(fpa11->fpreg[Fn].fExtended, &fpa11->fp_status);
+ val = floatx80_to_float32(fpa11->fpreg[Fn].fExtended,
+ &fpa11->fp_status);
break;
default: val = fpa11->fpreg[Fn].fSingle;
@@ -130,29 +132,31 @@ void storeSingle(const unsigned int Fn, target_ulong addr)
static inline
void storeDouble(const unsigned int Fn, target_ulong addr)
{
- FPA11 *fpa11 = GET_FPA11();
- float64 val;
- register unsigned int *p = (unsigned int*)&val;
+ FPA11 *fpa11 = GET_FPA11();
+ float64 val;
+ register unsigned int *p = (unsigned int *)&val;
- switch (fpa11->fType[Fn])
- {
- case typeSingle:
- val = float32_to_float64(fpa11->fpreg[Fn].fSingle, &fpa11->fp_status);
- break;
+ switch (fpa11->fType[Fn]) {
+ case typeSingle:
+ val = float32_to_float64(fpa11->fpreg[Fn].fSingle,
+ &fpa11->fp_status);
+ break;
- case typeExtended:
- val = floatx80_to_float64(fpa11->fpreg[Fn].fExtended, &fpa11->fp_status);
- break;
+ case typeExtended:
+ val = floatx80_to_float64(fpa11->fpreg[Fn].fExtended,
+ &fpa11->fp_status);
+ break;
- default: val = fpa11->fpreg[Fn].fDouble;
- }
- /* FIXME - handle put_user() failures */
+ default:
+ val = fpa11->fpreg[Fn].fDouble;
+ }
+ /* FIXME - handle put_user() failures */
#if HOST_BIG_ENDIAN
- put_user_u32(p[0], addr); /* msw */
- put_user_u32(p[1], addr + 4); /* lsw */
+ put_user_u32(p[0], addr); /* msw */
+ put_user_u32(p[1], addr + 4); /* lsw */
#else
- put_user_u32(p[1], addr); /* msw */
- put_user_u32(p[0], addr + 4); /* lsw */
+ put_user_u32(p[1], addr); /* msw */
+ put_user_u32(p[0], addr + 4); /* lsw */
#endif
}
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 02/16] linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 01/16] linux-user/arm: Checkpatch style cleanups Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 03/16] ui: " Philippe Mathieu-Daudé
` (14 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Laurent Vivier
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
linux-user/arm/nwfpe/double_cpdo.c | 12 ++----------
linux-user/arm/nwfpe/fpa11_cpdt.c | 29 ++++++++++++++---------------
2 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/linux-user/arm/nwfpe/double_cpdo.c b/linux-user/arm/nwfpe/double_cpdo.c
index d45ece2e2fe..e29b38aada0 100644
--- a/linux-user/arm/nwfpe/double_cpdo.c
+++ b/linux-user/arm/nwfpe/double_cpdo.c
@@ -150,11 +150,7 @@ unsigned int DoubleCPDO(const unsigned int opcode)
case MNF_CODE:
{
unsigned int *p = (unsigned int*)&rFm;
-#if HOST_BIG_ENDIAN
- p[0] ^= 0x80000000;
-#else
- p[1] ^= 0x80000000;
-#endif
+ p[!HOST_BIG_ENDIAN] ^= 0x80000000;
fpa11->fpreg[Fd].fDouble = rFm;
}
break;
@@ -162,11 +158,7 @@ unsigned int DoubleCPDO(const unsigned int opcode)
case ABS_CODE:
{
unsigned int *p = (unsigned int*)&rFm;
-#if HOST_BIG_ENDIAN
- p[0] &= 0x7fffffff;
-#else
- p[1] &= 0x7fffffff;
-#endif
+ p[!HOST_BIG_ENDIAN] &= 0x7fffffff;
fpa11->fpreg[Fd].fDouble = rFm;
}
break;
diff --git a/linux-user/arm/nwfpe/fpa11_cpdt.c b/linux-user/arm/nwfpe/fpa11_cpdt.c
index 6b0317883a7..7b0a715d403 100644
--- a/linux-user/arm/nwfpe/fpa11_cpdt.c
+++ b/linux-user/arm/nwfpe/fpa11_cpdt.c
@@ -44,15 +44,14 @@ void loadDouble(const unsigned int Fn, target_ulong addr)
unsigned int *p;
p = (unsigned int *)&fpa11->fpreg[Fn].fDouble;
fpa11->fType[Fn] = typeDouble;
-#if HOST_BIG_ENDIAN
/* FIXME - handle failure of get_user() */
- get_user_u32(p[0], addr); /* sign & exponent */
- get_user_u32(p[1], addr + 4);
-#else
- /* FIXME - handle failure of get_user() */
- get_user_u32(p[0], addr + 4);
- get_user_u32(p[1], addr); /* sign & exponent */
-#endif
+ if (HOST_BIG_ENDIAN) {
+ get_user_u32(p[0], addr); /* sign & exponent */
+ get_user_u32(p[1], addr + 4);
+ } else {
+ get_user_u32(p[0], addr + 4);
+ get_user_u32(p[1], addr); /* sign & exponent */
+ }
}
static inline
@@ -151,13 +150,13 @@ void storeDouble(const unsigned int Fn, target_ulong addr)
val = fpa11->fpreg[Fn].fDouble;
}
/* FIXME - handle put_user() failures */
-#if HOST_BIG_ENDIAN
- put_user_u32(p[0], addr); /* msw */
- put_user_u32(p[1], addr + 4); /* lsw */
-#else
- put_user_u32(p[1], addr); /* msw */
- put_user_u32(p[0], addr + 4); /* lsw */
-#endif
+ if (HOST_BIG_ENDIAN) {
+ put_user_u32(p[0], addr); /* msw */
+ put_user_u32(p[1], addr + 4); /* lsw */
+ } else {
+ put_user_u32(p[1], addr); /* msw */
+ put_user_u32(p[0], addr + 4); /* lsw */
+ }
}
static inline
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 03/16] ui: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 01/16] linux-user/arm: Checkpatch style cleanups Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 02/16] linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-13 11:57 ` Marc-André Lureau
2025-10-10 13:42 ` [PATCH 04/16] net: " Philippe Mathieu-Daudé
` (13 subsequent siblings)
16 siblings, 1 reply; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Marc-André Lureau
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
ui/vdagent.c | 16 ++++++++--------
ui/vnc.c | 6 +-----
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/ui/vdagent.c b/ui/vdagent.c
index ddb91e75c64..66dc33567df 100644
--- a/ui/vdagent.c
+++ b/ui/vdagent.c
@@ -660,14 +660,14 @@ static void vdagent_chr_open(Chardev *chr,
VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(chr);
ChardevQemuVDAgent *cfg = backend->u.qemu_vdagent.data;
-#if HOST_BIG_ENDIAN
- /*
- * TODO: vdagent protocol is defined to be LE,
- * so we have to byteswap everything on BE hosts.
- */
- error_setg(errp, "vdagent is not supported on bigendian hosts");
- return;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ /*
+ * TODO: vdagent protocol is defined to be LE,
+ * so we have to byteswap everything on BE hosts.
+ */
+ error_setg(errp, "vdagent is not supported on bigendian hosts");
+ return;
+ }
vd->mouse = VDAGENT_MOUSE_DEFAULT;
if (cfg->has_mouse) {
diff --git a/ui/vnc.c b/ui/vnc.c
index 77c823bf2e8..e93b5335690 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -2348,11 +2348,7 @@ static void pixel_format_message (VncState *vs) {
vnc_write_u8(vs, vs->client_pf.bits_per_pixel); /* bits-per-pixel */
vnc_write_u8(vs, vs->client_pf.depth); /* depth */
-#if HOST_BIG_ENDIAN
- vnc_write_u8(vs, 1); /* big-endian-flag */
-#else
- vnc_write_u8(vs, 0); /* big-endian-flag */
-#endif
+ vnc_write_u8(vs, HOST_BIG_ENDIAN); /* big-endian-flag */
vnc_write_u8(vs, 1); /* true-color-flag */
vnc_write_u16(vs, vs->client_pf.rmax); /* red-max */
vnc_write_u16(vs, vs->client_pf.gmax); /* green-max */
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 04/16] net: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 03/16] ui: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 05/16] disas: " Philippe Mathieu-Daudé
` (12 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Jason Wang
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
net/net.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/net/net.c b/net/net.c
index 27e0d278071..11d1f7616a6 100644
--- a/net/net.c
+++ b/net/net.c
@@ -593,28 +593,26 @@ bool qemu_get_vnet_hash_supported_types(NetClientState *nc, uint32_t *types)
int qemu_set_vnet_le(NetClientState *nc, bool is_le)
{
-#if HOST_BIG_ENDIAN
+ if (!HOST_BIG_ENDIAN) {
+ return 0;
+ }
if (!nc || !nc->info->set_vnet_le) {
return -ENOSYS;
}
return nc->info->set_vnet_le(nc, is_le);
-#else
- return 0;
-#endif
}
int qemu_set_vnet_be(NetClientState *nc, bool is_be)
{
-#if HOST_BIG_ENDIAN
- return 0;
-#else
+ if (HOST_BIG_ENDIAN) {
+ return 0;
+ }
if (!nc || !nc->info->set_vnet_be) {
return -ENOSYS;
}
return nc->info->set_vnet_be(nc, is_be);
-#endif
}
int qemu_can_receive_packet(NetClientState *nc)
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 05/16] disas: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 04/16] net: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 06/16] hw/core/loader: " Philippe Mathieu-Daudé
` (11 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
disas/disas-host.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/disas/disas-host.c b/disas/disas-host.c
index 8146fafe804..54be5ef18e4 100644
--- a/disas/disas-host.c
+++ b/disas/disas-host.c
@@ -37,11 +37,7 @@ static void initialize_debug_host(CPUDebug *s)
s->info.read_memory_func = host_read_memory;
s->info.print_address_func = host_print_address;
-#if HOST_BIG_ENDIAN
- s->info.endian = BFD_ENDIAN_BIG;
-#else
- s->info.endian = BFD_ENDIAN_LITTLE;
-#endif
+ s->info.endian = HOST_BIG_ENDIAN ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
#if defined(CONFIG_TCG_INTERPRETER)
s->info.print_insn = print_insn_tci;
#elif defined(__i386__)
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 06/16] hw/core/loader: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 05/16] disas: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 07/16] hw/display: " Philippe Mathieu-Daudé
` (10 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/core/loader.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/core/loader.c b/hw/core/loader.c
index 477661a0255..aef10cb3f2b 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -491,7 +491,9 @@ ssize_t load_elf_ram_sym(const char *filename,
static void bswap_uboot_header(uboot_image_header_t *hdr)
{
-#if !HOST_BIG_ENDIAN
+ if (HOST_BIG_ENDIAN) {
+ return;
+ }
bswap32s(&hdr->ih_magic);
bswap32s(&hdr->ih_hcrc);
bswap32s(&hdr->ih_time);
@@ -499,7 +501,6 @@ static void bswap_uboot_header(uboot_image_header_t *hdr)
bswap32s(&hdr->ih_load);
bswap32s(&hdr->ih_ep);
bswap32s(&hdr->ih_dcrc);
-#endif
}
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 07/16] hw/display: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 06/16] hw/core/loader: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 08/16] hw/virtio: " Philippe Mathieu-Daudé
` (9 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Richard Henderson, Helge Deller,
Gerd Hoffmann, Alex Bennée, Akihiko Odaki, Dmitry Osipenko,
Michael S. Tsirkin
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/virtio/virtio-gpu-bswap.h | 6 +++---
hw/display/artist.c | 12 ++++++------
hw/display/vga.c | 20 ++++++++------------
hw/display/virtio-gpu-gl.c | 8 ++++----
hw/display/virtio-gpu-rutabaga.c | 8 ++++----
5 files changed, 25 insertions(+), 29 deletions(-)
diff --git a/include/hw/virtio/virtio-gpu-bswap.h b/include/hw/virtio/virtio-gpu-bswap.h
index dd1975e2d40..279734231e2 100644
--- a/include/hw/virtio/virtio-gpu-bswap.h
+++ b/include/hw/virtio/virtio-gpu-bswap.h
@@ -29,7 +29,9 @@ virtio_gpu_ctrl_hdr_bswap(struct virtio_gpu_ctrl_hdr *hdr)
static inline void
virtio_gpu_bswap_32(void *ptr, size_t size)
{
-#if HOST_BIG_ENDIAN
+ if (!HOST_BIG_ENDIAN) {
+ return;
+ }
size_t i;
struct virtio_gpu_ctrl_hdr *hdr = (struct virtio_gpu_ctrl_hdr *) ptr;
@@ -41,8 +43,6 @@ virtio_gpu_bswap_32(void *ptr, size_t size)
le32_to_cpus((uint32_t *)(ptr + i));
i = i + sizeof(uint32_t);
}
-
-#endif
}
static inline void
diff --git a/hw/display/artist.c b/hw/display/artist.c
index 3c884c92437..8d73f2d894d 100644
--- a/hw/display/artist.c
+++ b/hw/display/artist.c
@@ -738,9 +738,9 @@ static void combine_write_reg(hwaddr addr, uint64_t val, int size, void *out)
* FIXME: is there a qemu helper for this?
*/
-#if !HOST_BIG_ENDIAN
- addr ^= 3;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ addr ^= 3;
+ }
switch (size) {
case 1:
@@ -1132,9 +1132,9 @@ static uint64_t combine_read_reg(hwaddr addr, int size, void *in)
* FIXME: is there a qemu helper for this?
*/
-#if !HOST_BIG_ENDIAN
- addr ^= 3;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ addr ^= 3;
+ }
switch (size) {
case 1:
diff --git a/hw/display/vga.c b/hw/display/vga.c
index 90b89cf4044..01b1cfa98d3 100644
--- a/hw/display/vga.c
+++ b/hw/display/vga.c
@@ -1307,13 +1307,13 @@ static void vga_draw_text(VGACommonState *s, int full_update)
if (cx > cx_max)
cx_max = cx;
*ch_attr_ptr = ch_attr;
-#if HOST_BIG_ENDIAN
- ch = ch_attr >> 8;
- cattr = ch_attr & 0xff;
-#else
- ch = ch_attr & 0xff;
- cattr = ch_attr >> 8;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ ch = ch_attr >> 8;
+ cattr = ch_attr & 0xff;
+ } else {
+ ch = ch_attr & 0xff;
+ cattr = ch_attr >> 8;
+ }
font_ptr = font_base[(cattr >> 3) & 1];
font_ptr += 32 * 4 * ch;
bgcol = palette[cattr >> 4];
@@ -1489,11 +1489,7 @@ static void vga_draw_graphic(VGACommonState *s, int full_update)
vga_draw_line_func *vga_draw_line = NULL;
bool allocate_surface, force_shadow = false;
pixman_format_code_t format;
-#if HOST_BIG_ENDIAN
- bool byteswap = !s->big_endian_fb;
-#else
- bool byteswap = s->big_endian_fb;
-#endif
+ bool byteswap = s->big_endian_fb ^ HOST_BIG_ENDIAN;
full_update |= update_basic_params(s);
diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c
index c06a078fb36..c29152a3c7a 100644
--- a/hw/display/virtio-gpu-gl.c
+++ b/hw/display/virtio-gpu-gl.c
@@ -123,10 +123,10 @@ static void virtio_gpu_gl_device_realize(DeviceState *qdev, Error **errp)
ERRP_GUARD();
VirtIOGPU *g = VIRTIO_GPU(qdev);
-#if HOST_BIG_ENDIAN
- error_setg(errp, "virgl is not supported on bigendian platforms");
- return;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ error_setg(errp, "virgl is not supported on bigendian platforms");
+ return;
+ }
if (!object_resolve_path_type("", TYPE_VIRTIO_GPU_GL, NULL)) {
error_setg(errp, "at most one %s device is permitted", TYPE_VIRTIO_GPU_GL);
diff --git a/hw/display/virtio-gpu-rutabaga.c b/hw/display/virtio-gpu-rutabaga.c
index ed5ae52acbe..f82a84b53aa 100644
--- a/hw/display/virtio-gpu-rutabaga.c
+++ b/hw/display/virtio-gpu-rutabaga.c
@@ -1074,10 +1074,10 @@ static void virtio_gpu_rutabaga_realize(DeviceState *qdev, Error **errp)
VirtIOGPUBase *bdev = VIRTIO_GPU_BASE(qdev);
VirtIOGPU *gpudev = VIRTIO_GPU(qdev);
-#if HOST_BIG_ENDIAN
- error_setg(errp, "rutabaga is not supported on bigendian platforms");
- return;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ error_setg(errp, "rutabaga is not supported on bigendian platforms");
+ return;
+ }
if (!virtio_gpu_rutabaga_init(gpudev, errp)) {
return;
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 08/16] hw/virtio: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 07/16] hw/display: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 19:23 ` Farhan Ali
2025-10-10 13:42 ` [PATCH 09/16] target/alpha: " Philippe Mathieu-Daudé
` (8 subsequent siblings)
16 siblings, 1 reply; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Michael S. Tsirkin,
Stefano Garzarella
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/virtio/virtio-access.h | 6 +-----
hw/virtio/vhost.c | 7 +++----
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
index 07aae69042a..80328912ad3 100644
--- a/include/hw/virtio/virtio-access.h
+++ b/include/hw/virtio/virtio-access.h
@@ -149,11 +149,7 @@ static inline uint64_t virtio_ldq_p(VirtIODevice *vdev, const void *ptr)
static inline uint16_t virtio_tswap16(VirtIODevice *vdev, uint16_t s)
{
-#if HOST_BIG_ENDIAN
- return virtio_access_is_big_endian(vdev) ? s : bswap16(s);
-#else
- return virtio_access_is_big_endian(vdev) ? bswap16(s) : s;
-#endif
+ return HOST_BIG_ENDIAN ^ virtio_access_is_big_endian(vdev) ? s : bswap16(s);
}
static inline uint16_t virtio_lduw_phys_cached(VirtIODevice *vdev,
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 266a11514a1..6343477b42f 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -1168,11 +1168,10 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
return false;
}
-#if HOST_BIG_ENDIAN
- return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
-#else
+ if (HOST_BIG_ENDIAN) {
+ return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
+ }
return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
-#endif
}
static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 09/16] target/alpha: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 08/16] hw/virtio: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 10/16] target/arm: " Philippe Mathieu-Daudé
` (7 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Richard Henderson
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/alpha/translate.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
index a492520075e..b93cbe3b61f 100644
--- a/target/alpha/translate.c
+++ b/target/alpha/translate.c
@@ -235,11 +235,12 @@ static TCGv dest_fpr(DisasContext *ctx, unsigned reg)
static int get_flag_ofs(unsigned shift)
{
int ofs = offsetof(CPUAlphaState, flags);
-#if HOST_BIG_ENDIAN
- ofs += 3 - (shift / 8);
-#else
- ofs += shift / 8;
-#endif
+
+ if (HOST_BIG_ENDIAN) {
+ ofs += 3 - (shift / 8);
+ } else {
+ ofs += shift / 8;
+ }
return ofs;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 10/16] target/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 09/16] target/alpha: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 11/16] target/mips: " Philippe Mathieu-Daudé
` (6 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Peter Maydell
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/arm/cpu.h | 8 ++++----
target/arm/tcg/translate-a64.h | 5 ++---
target/arm/tcg/sve_helper.c | 10 ++--------
target/arm/tcg/translate-sve.c | 22 +++++++++++-----------
target/arm/tcg/translate-vfp.c | 8 +-------
target/arm/tcg/translate.c | 6 +++---
6 files changed, 23 insertions(+), 36 deletions(-)
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 41414ac22b8..3f0a578a72a 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -1249,17 +1249,17 @@ void aarch64_set_svcr(CPUARMState *env, uint64_t new, uint64_t mask);
*/
static inline uint64_t *sve_bswap64(uint64_t *dst, uint64_t *src, int nr)
{
-#if HOST_BIG_ENDIAN
int i;
+ if (!HOST_BIG_ENDIAN) {
+ return src;
+ }
+
for (i = 0; i < nr; ++i) {
dst[i] = bswap64(src[i]);
}
return dst;
-#else
- return src;
-#endif
}
void aarch64_sync_32_to_64(CPUARMState *env);
diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h
index 9c45f89305b..ce8303286ef 100644
--- a/target/arm/tcg/translate-a64.h
+++ b/target/arm/tcg/translate-a64.h
@@ -82,7 +82,7 @@ static inline int vec_reg_offset(DisasContext *s, int regno,
{
int element_size = 1 << size;
int offs = element * element_size;
-#if HOST_BIG_ENDIAN
+
/* This is complicated slightly because vfp.zregs[n].d[0] is
* still the lowest and vfp.zregs[n].d[15] the highest of the
* 256 byte vector, even on big endian systems.
@@ -97,10 +97,9 @@ static inline int vec_reg_offset(DisasContext *s, int regno,
* operations will have to special case loading and storing from
* the zregs array.
*/
- if (element_size < 8) {
+ if (HOST_BIG_ENDIAN && element_size < 8) {
offs ^= 8 - element_size;
}
-#endif
offs += offsetof(CPUARMState, vfp.zregs[regno]);
assert_fp_access_checked(s);
return offs;
diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c
index c442fcb540d..dd829666cc2 100644
--- a/target/arm/tcg/sve_helper.c
+++ b/target/arm/tcg/sve_helper.c
@@ -2861,12 +2861,9 @@ static void swap_memmove(void *vd, void *vs, size_t n)
{
uintptr_t d = (uintptr_t)vd;
uintptr_t s = (uintptr_t)vs;
- uintptr_t o = (d | s | n) & 7;
+ uintptr_t o = HOST_BIG_ENDIAN ? (d | s | n) & 7 : 0;
size_t i;
-#if !HOST_BIG_ENDIAN
- o = 0;
-#endif
switch (o) {
case 0:
memmove(vd, vs, n);
@@ -2918,7 +2915,7 @@ static void swap_memmove(void *vd, void *vs, size_t n)
static void swap_memzero(void *vd, size_t n)
{
uintptr_t d = (uintptr_t)vd;
- uintptr_t o = (d | n) & 7;
+ uintptr_t o = HOST_BIG_ENDIAN ? (d | n) & 7 : 0;
size_t i;
/* Usually, the first bit of a predicate is set, so N is 0. */
@@ -2926,9 +2923,6 @@ static void swap_memzero(void *vd, size_t n)
return;
}
-#if !HOST_BIG_ENDIAN
- o = 0;
-#endif
switch (o) {
case 0:
memset(vd, 0, n);
diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c
index 07b827fa8e8..60a99fbe15e 100644
--- a/target/arm/tcg/translate-sve.c
+++ b/target/arm/tcg/translate-sve.c
@@ -2770,12 +2770,12 @@ static TCGv_i64 load_last_active(DisasContext *s, TCGv_i32 last,
* The final adjustment for the vector register base
* is added via constant offset to the load.
*/
-#if HOST_BIG_ENDIAN
- /* Adjust for element ordering. See vec_reg_offset. */
- if (esz < 3) {
- tcg_gen_xori_i32(last, last, 8 - (1 << esz));
+ if (HOST_BIG_ENDIAN) {
+ /* Adjust for element ordering. See vec_reg_offset. */
+ if (esz < 3) {
+ tcg_gen_xori_i32(last, last, 8 - (1 << esz));
+ }
}
-#endif
tcg_gen_ext_i32_ptr(p, last);
tcg_gen_add_ptr(p, p, tcg_env);
@@ -5394,9 +5394,9 @@ static void do_ldrq(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
* for this load operation.
*/
TCGv_i64 tmp = tcg_temp_new_i64();
-#if HOST_BIG_ENDIAN
- poff += 6;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ poff += 6;
+ }
tcg_gen_ld16u_i64(tmp, tcg_env, poff);
poff = offsetof(CPUARMState, vfp.preg_tmp);
@@ -5478,9 +5478,9 @@ static void do_ldro(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
* for this load operation.
*/
TCGv_i64 tmp = tcg_temp_new_i64();
-#if HOST_BIG_ENDIAN
- poff += 4;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ poff += 4;
+ }
tcg_gen_ld32u_i64(tmp, tcg_env, poff);
poff = offsetof(CPUARMState, vfp.preg_tmp);
diff --git a/target/arm/tcg/translate-vfp.c b/target/arm/tcg/translate-vfp.c
index 8d9d1ab877a..cf3ca4b33c4 100644
--- a/target/arm/tcg/translate-vfp.c
+++ b/target/arm/tcg/translate-vfp.c
@@ -95,15 +95,9 @@ uint64_t vfp_expand_imm(int size, uint8_t imm8)
static inline long vfp_f16_offset(unsigned reg, bool top)
{
long offs = vfp_reg_offset(false, reg);
-#if HOST_BIG_ENDIAN
- if (!top) {
+ if (top ^ HOST_BIG_ENDIAN) {
offs += 2;
}
-#else
- if (top) {
- offs += 2;
- }
-#endif
return offs;
}
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
index 51654b0b91d..8ba0622489c 100644
--- a/target/arm/tcg/translate.c
+++ b/target/arm/tcg/translate.c
@@ -1148,15 +1148,15 @@ long neon_element_offset(int reg, int element, MemOp memop)
{
int element_size = 1 << (memop & MO_SIZE);
int ofs = element * element_size;
-#if HOST_BIG_ENDIAN
+
/*
* Calculate the offset assuming fully little-endian,
* then XOR to account for the order of the 8-byte units.
*/
- if (element_size < 8) {
+ if (HOST_BIG_ENDIAN && element_size < 8) {
ofs ^= 8 - element_size;
}
-#endif
+
return neon_full_reg_offset(reg) + ofs;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 11/16] target/mips: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 10/16] target/arm: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 12/16] target/ppc: " Philippe Mathieu-Daudé
` (5 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Aurelien Jarno, Jiaxun Yang,
Aleksandar Rikalo
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/mips/tcg/msa_helper.c | 889 +++++++++++++++++------------------
1 file changed, 444 insertions(+), 445 deletions(-)
diff --git a/target/mips/tcg/msa_helper.c b/target/mips/tcg/msa_helper.c
index f554b3d10ee..9f2d2bd6adc 100644
--- a/target/mips/tcg/msa_helper.c
+++ b/target/mips/tcg/msa_helper.c
@@ -4148,41 +4148,41 @@ void helper_msa_ilvev_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[8] = pws->b[9];
- pwd->b[9] = pwt->b[9];
- pwd->b[10] = pws->b[11];
- pwd->b[11] = pwt->b[11];
- pwd->b[12] = pws->b[13];
- pwd->b[13] = pwt->b[13];
- pwd->b[14] = pws->b[15];
- pwd->b[15] = pwt->b[15];
- pwd->b[0] = pws->b[1];
- pwd->b[1] = pwt->b[1];
- pwd->b[2] = pws->b[3];
- pwd->b[3] = pwt->b[3];
- pwd->b[4] = pws->b[5];
- pwd->b[5] = pwt->b[5];
- pwd->b[6] = pws->b[7];
- pwd->b[7] = pwt->b[7];
-#else
- pwd->b[15] = pws->b[14];
- pwd->b[14] = pwt->b[14];
- pwd->b[13] = pws->b[12];
- pwd->b[12] = pwt->b[12];
- pwd->b[11] = pws->b[10];
- pwd->b[10] = pwt->b[10];
- pwd->b[9] = pws->b[8];
- pwd->b[8] = pwt->b[8];
- pwd->b[7] = pws->b[6];
- pwd->b[6] = pwt->b[6];
- pwd->b[5] = pws->b[4];
- pwd->b[4] = pwt->b[4];
- pwd->b[3] = pws->b[2];
- pwd->b[2] = pwt->b[2];
- pwd->b[1] = pws->b[0];
- pwd->b[0] = pwt->b[0];
-#endif
+if (HOST_BIG_ENDIAN) {
+ pwd->b[8] = pws->b[9];
+ pwd->b[9] = pwt->b[9];
+ pwd->b[10] = pws->b[11];
+ pwd->b[11] = pwt->b[11];
+ pwd->b[12] = pws->b[13];
+ pwd->b[13] = pwt->b[13];
+ pwd->b[14] = pws->b[15];
+ pwd->b[15] = pwt->b[15];
+ pwd->b[0] = pws->b[1];
+ pwd->b[1] = pwt->b[1];
+ pwd->b[2] = pws->b[3];
+ pwd->b[3] = pwt->b[3];
+ pwd->b[4] = pws->b[5];
+ pwd->b[5] = pwt->b[5];
+ pwd->b[6] = pws->b[7];
+ pwd->b[7] = pwt->b[7];
+ } else {
+ pwd->b[15] = pws->b[14];
+ pwd->b[14] = pwt->b[14];
+ pwd->b[13] = pws->b[12];
+ pwd->b[12] = pwt->b[12];
+ pwd->b[11] = pws->b[10];
+ pwd->b[10] = pwt->b[10];
+ pwd->b[9] = pws->b[8];
+ pwd->b[8] = pwt->b[8];
+ pwd->b[7] = pws->b[6];
+ pwd->b[6] = pwt->b[6];
+ pwd->b[5] = pws->b[4];
+ pwd->b[4] = pwt->b[4];
+ pwd->b[3] = pws->b[2];
+ pwd->b[2] = pwt->b[2];
+ pwd->b[1] = pws->b[0];
+ pwd->b[0] = pwt->b[0];
+ }
}
void helper_msa_ilvev_h(CPUMIPSState *env,
@@ -4192,25 +4192,25 @@ void helper_msa_ilvev_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[4] = pws->h[5];
- pwd->h[5] = pwt->h[5];
- pwd->h[6] = pws->h[7];
- pwd->h[7] = pwt->h[7];
- pwd->h[0] = pws->h[1];
- pwd->h[1] = pwt->h[1];
- pwd->h[2] = pws->h[3];
- pwd->h[3] = pwt->h[3];
-#else
- pwd->h[7] = pws->h[6];
- pwd->h[6] = pwt->h[6];
- pwd->h[5] = pws->h[4];
- pwd->h[4] = pwt->h[4];
- pwd->h[3] = pws->h[2];
- pwd->h[2] = pwt->h[2];
- pwd->h[1] = pws->h[0];
- pwd->h[0] = pwt->h[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[4] = pws->h[5];
+ pwd->h[5] = pwt->h[5];
+ pwd->h[6] = pws->h[7];
+ pwd->h[7] = pwt->h[7];
+ pwd->h[0] = pws->h[1];
+ pwd->h[1] = pwt->h[1];
+ pwd->h[2] = pws->h[3];
+ pwd->h[3] = pwt->h[3];
+ } else {
+ pwd->h[7] = pws->h[6];
+ pwd->h[6] = pwt->h[6];
+ pwd->h[5] = pws->h[4];
+ pwd->h[4] = pwt->h[4];
+ pwd->h[3] = pws->h[2];
+ pwd->h[2] = pwt->h[2];
+ pwd->h[1] = pws->h[0];
+ pwd->h[0] = pwt->h[0];
+ }
}
void helper_msa_ilvev_w(CPUMIPSState *env,
@@ -4220,17 +4220,17 @@ void helper_msa_ilvev_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[2] = pws->w[3];
- pwd->w[3] = pwt->w[3];
- pwd->w[0] = pws->w[1];
- pwd->w[1] = pwt->w[1];
-#else
- pwd->w[3] = pws->w[2];
- pwd->w[2] = pwt->w[2];
- pwd->w[1] = pws->w[0];
- pwd->w[0] = pwt->w[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[2] = pws->w[3];
+ pwd->w[3] = pwt->w[3];
+ pwd->w[0] = pws->w[1];
+ pwd->w[1] = pwt->w[1];
+ } else {
+ pwd->w[3] = pws->w[2];
+ pwd->w[2] = pwt->w[2];
+ pwd->w[1] = pws->w[0];
+ pwd->w[0] = pwt->w[0];
+ }
}
void helper_msa_ilvev_d(CPUMIPSState *env,
@@ -4252,41 +4252,41 @@ void helper_msa_ilvod_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[7] = pwt->b[6];
- pwd->b[6] = pws->b[6];
- pwd->b[5] = pwt->b[4];
- pwd->b[4] = pws->b[4];
- pwd->b[3] = pwt->b[2];
- pwd->b[2] = pws->b[2];
- pwd->b[1] = pwt->b[0];
- pwd->b[0] = pws->b[0];
- pwd->b[15] = pwt->b[14];
- pwd->b[14] = pws->b[14];
- pwd->b[13] = pwt->b[12];
- pwd->b[12] = pws->b[12];
- pwd->b[11] = pwt->b[10];
- pwd->b[10] = pws->b[10];
- pwd->b[9] = pwt->b[8];
- pwd->b[8] = pws->b[8];
-#else
- pwd->b[0] = pwt->b[1];
- pwd->b[1] = pws->b[1];
- pwd->b[2] = pwt->b[3];
- pwd->b[3] = pws->b[3];
- pwd->b[4] = pwt->b[5];
- pwd->b[5] = pws->b[5];
- pwd->b[6] = pwt->b[7];
- pwd->b[7] = pws->b[7];
- pwd->b[8] = pwt->b[9];
- pwd->b[9] = pws->b[9];
- pwd->b[10] = pwt->b[11];
- pwd->b[11] = pws->b[11];
- pwd->b[12] = pwt->b[13];
- pwd->b[13] = pws->b[13];
- pwd->b[14] = pwt->b[15];
- pwd->b[15] = pws->b[15];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->b[7] = pwt->b[6];
+ pwd->b[6] = pws->b[6];
+ pwd->b[5] = pwt->b[4];
+ pwd->b[4] = pws->b[4];
+ pwd->b[3] = pwt->b[2];
+ pwd->b[2] = pws->b[2];
+ pwd->b[1] = pwt->b[0];
+ pwd->b[0] = pws->b[0];
+ pwd->b[15] = pwt->b[14];
+ pwd->b[14] = pws->b[14];
+ pwd->b[13] = pwt->b[12];
+ pwd->b[12] = pws->b[12];
+ pwd->b[11] = pwt->b[10];
+ pwd->b[10] = pws->b[10];
+ pwd->b[9] = pwt->b[8];
+ pwd->b[8] = pws->b[8];
+ } else {
+ pwd->b[0] = pwt->b[1];
+ pwd->b[1] = pws->b[1];
+ pwd->b[2] = pwt->b[3];
+ pwd->b[3] = pws->b[3];
+ pwd->b[4] = pwt->b[5];
+ pwd->b[5] = pws->b[5];
+ pwd->b[6] = pwt->b[7];
+ pwd->b[7] = pws->b[7];
+ pwd->b[8] = pwt->b[9];
+ pwd->b[9] = pws->b[9];
+ pwd->b[10] = pwt->b[11];
+ pwd->b[11] = pws->b[11];
+ pwd->b[12] = pwt->b[13];
+ pwd->b[13] = pws->b[13];
+ pwd->b[14] = pwt->b[15];
+ pwd->b[15] = pws->b[15];
+ }
}
void helper_msa_ilvod_h(CPUMIPSState *env,
@@ -4296,25 +4296,25 @@ void helper_msa_ilvod_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[3] = pwt->h[2];
- pwd->h[2] = pws->h[2];
- pwd->h[1] = pwt->h[0];
- pwd->h[0] = pws->h[0];
- pwd->h[7] = pwt->h[6];
- pwd->h[6] = pws->h[6];
- pwd->h[5] = pwt->h[4];
- pwd->h[4] = pws->h[4];
-#else
- pwd->h[0] = pwt->h[1];
- pwd->h[1] = pws->h[1];
- pwd->h[2] = pwt->h[3];
- pwd->h[3] = pws->h[3];
- pwd->h[4] = pwt->h[5];
- pwd->h[5] = pws->h[5];
- pwd->h[6] = pwt->h[7];
- pwd->h[7] = pws->h[7];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[3] = pwt->h[2];
+ pwd->h[2] = pws->h[2];
+ pwd->h[1] = pwt->h[0];
+ pwd->h[0] = pws->h[0];
+ pwd->h[7] = pwt->h[6];
+ pwd->h[6] = pws->h[6];
+ pwd->h[5] = pwt->h[4];
+ pwd->h[4] = pws->h[4];
+ } else {
+ pwd->h[0] = pwt->h[1];
+ pwd->h[1] = pws->h[1];
+ pwd->h[2] = pwt->h[3];
+ pwd->h[3] = pws->h[3];
+ pwd->h[4] = pwt->h[5];
+ pwd->h[5] = pws->h[5];
+ pwd->h[6] = pwt->h[7];
+ pwd->h[7] = pws->h[7];
+ }
}
void helper_msa_ilvod_w(CPUMIPSState *env,
@@ -4324,17 +4324,17 @@ void helper_msa_ilvod_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[1] = pwt->w[0];
- pwd->w[0] = pws->w[0];
- pwd->w[3] = pwt->w[2];
- pwd->w[2] = pws->w[2];
-#else
- pwd->w[0] = pwt->w[1];
- pwd->w[1] = pws->w[1];
- pwd->w[2] = pwt->w[3];
- pwd->w[3] = pws->w[3];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[1] = pwt->w[0];
+ pwd->w[0] = pws->w[0];
+ pwd->w[3] = pwt->w[2];
+ pwd->w[2] = pws->w[2];
+ } else {
+ pwd->w[0] = pwt->w[1];
+ pwd->w[1] = pws->w[1];
+ pwd->w[2] = pwt->w[3];
+ pwd->w[3] = pws->w[3];
+ }
}
void helper_msa_ilvod_d(CPUMIPSState *env,
@@ -4356,41 +4356,41 @@ void helper_msa_ilvl_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[7] = pwt->b[15];
- pwd->b[6] = pws->b[15];
- pwd->b[5] = pwt->b[14];
- pwd->b[4] = pws->b[14];
- pwd->b[3] = pwt->b[13];
- pwd->b[2] = pws->b[13];
- pwd->b[1] = pwt->b[12];
- pwd->b[0] = pws->b[12];
- pwd->b[15] = pwt->b[11];
- pwd->b[14] = pws->b[11];
- pwd->b[13] = pwt->b[10];
- pwd->b[12] = pws->b[10];
- pwd->b[11] = pwt->b[9];
- pwd->b[10] = pws->b[9];
- pwd->b[9] = pwt->b[8];
- pwd->b[8] = pws->b[8];
-#else
- pwd->b[0] = pwt->b[8];
- pwd->b[1] = pws->b[8];
- pwd->b[2] = pwt->b[9];
- pwd->b[3] = pws->b[9];
- pwd->b[4] = pwt->b[10];
- pwd->b[5] = pws->b[10];
- pwd->b[6] = pwt->b[11];
- pwd->b[7] = pws->b[11];
- pwd->b[8] = pwt->b[12];
- pwd->b[9] = pws->b[12];
- pwd->b[10] = pwt->b[13];
- pwd->b[11] = pws->b[13];
- pwd->b[12] = pwt->b[14];
- pwd->b[13] = pws->b[14];
- pwd->b[14] = pwt->b[15];
- pwd->b[15] = pws->b[15];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->b[7] = pwt->b[15];
+ pwd->b[6] = pws->b[15];
+ pwd->b[5] = pwt->b[14];
+ pwd->b[4] = pws->b[14];
+ pwd->b[3] = pwt->b[13];
+ pwd->b[2] = pws->b[13];
+ pwd->b[1] = pwt->b[12];
+ pwd->b[0] = pws->b[12];
+ pwd->b[15] = pwt->b[11];
+ pwd->b[14] = pws->b[11];
+ pwd->b[13] = pwt->b[10];
+ pwd->b[12] = pws->b[10];
+ pwd->b[11] = pwt->b[9];
+ pwd->b[10] = pws->b[9];
+ pwd->b[9] = pwt->b[8];
+ pwd->b[8] = pws->b[8];
+ } else {
+ pwd->b[0] = pwt->b[8];
+ pwd->b[1] = pws->b[8];
+ pwd->b[2] = pwt->b[9];
+ pwd->b[3] = pws->b[9];
+ pwd->b[4] = pwt->b[10];
+ pwd->b[5] = pws->b[10];
+ pwd->b[6] = pwt->b[11];
+ pwd->b[7] = pws->b[11];
+ pwd->b[8] = pwt->b[12];
+ pwd->b[9] = pws->b[12];
+ pwd->b[10] = pwt->b[13];
+ pwd->b[11] = pws->b[13];
+ pwd->b[12] = pwt->b[14];
+ pwd->b[13] = pws->b[14];
+ pwd->b[14] = pwt->b[15];
+ pwd->b[15] = pws->b[15];
+ }
}
void helper_msa_ilvl_h(CPUMIPSState *env,
@@ -4400,25 +4400,25 @@ void helper_msa_ilvl_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[3] = pwt->h[7];
- pwd->h[2] = pws->h[7];
- pwd->h[1] = pwt->h[6];
- pwd->h[0] = pws->h[6];
- pwd->h[7] = pwt->h[5];
- pwd->h[6] = pws->h[5];
- pwd->h[5] = pwt->h[4];
- pwd->h[4] = pws->h[4];
-#else
- pwd->h[0] = pwt->h[4];
- pwd->h[1] = pws->h[4];
- pwd->h[2] = pwt->h[5];
- pwd->h[3] = pws->h[5];
- pwd->h[4] = pwt->h[6];
- pwd->h[5] = pws->h[6];
- pwd->h[6] = pwt->h[7];
- pwd->h[7] = pws->h[7];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[3] = pwt->h[7];
+ pwd->h[2] = pws->h[7];
+ pwd->h[1] = pwt->h[6];
+ pwd->h[0] = pws->h[6];
+ pwd->h[7] = pwt->h[5];
+ pwd->h[6] = pws->h[5];
+ pwd->h[5] = pwt->h[4];
+ pwd->h[4] = pws->h[4];
+ } else {
+ pwd->h[0] = pwt->h[4];
+ pwd->h[1] = pws->h[4];
+ pwd->h[2] = pwt->h[5];
+ pwd->h[3] = pws->h[5];
+ pwd->h[4] = pwt->h[6];
+ pwd->h[5] = pws->h[6];
+ pwd->h[6] = pwt->h[7];
+ pwd->h[7] = pws->h[7];
+ }
}
void helper_msa_ilvl_w(CPUMIPSState *env,
@@ -4428,17 +4428,17 @@ void helper_msa_ilvl_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[1] = pwt->w[3];
- pwd->w[0] = pws->w[3];
- pwd->w[3] = pwt->w[2];
- pwd->w[2] = pws->w[2];
-#else
- pwd->w[0] = pwt->w[2];
- pwd->w[1] = pws->w[2];
- pwd->w[2] = pwt->w[3];
- pwd->w[3] = pws->w[3];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[1] = pwt->w[3];
+ pwd->w[0] = pws->w[3];
+ pwd->w[3] = pwt->w[2];
+ pwd->w[2] = pws->w[2];
+ } else {
+ pwd->w[0] = pwt->w[2];
+ pwd->w[1] = pws->w[2];
+ pwd->w[2] = pwt->w[3];
+ pwd->w[3] = pws->w[3];
+ }
}
void helper_msa_ilvl_d(CPUMIPSState *env,
@@ -4460,41 +4460,41 @@ void helper_msa_ilvr_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[8] = pws->b[0];
- pwd->b[9] = pwt->b[0];
- pwd->b[10] = pws->b[1];
- pwd->b[11] = pwt->b[1];
- pwd->b[12] = pws->b[2];
- pwd->b[13] = pwt->b[2];
- pwd->b[14] = pws->b[3];
- pwd->b[15] = pwt->b[3];
- pwd->b[0] = pws->b[4];
- pwd->b[1] = pwt->b[4];
- pwd->b[2] = pws->b[5];
- pwd->b[3] = pwt->b[5];
- pwd->b[4] = pws->b[6];
- pwd->b[5] = pwt->b[6];
- pwd->b[6] = pws->b[7];
- pwd->b[7] = pwt->b[7];
-#else
- pwd->b[15] = pws->b[7];
- pwd->b[14] = pwt->b[7];
- pwd->b[13] = pws->b[6];
- pwd->b[12] = pwt->b[6];
- pwd->b[11] = pws->b[5];
- pwd->b[10] = pwt->b[5];
- pwd->b[9] = pws->b[4];
- pwd->b[8] = pwt->b[4];
- pwd->b[7] = pws->b[3];
- pwd->b[6] = pwt->b[3];
- pwd->b[5] = pws->b[2];
- pwd->b[4] = pwt->b[2];
- pwd->b[3] = pws->b[1];
- pwd->b[2] = pwt->b[1];
- pwd->b[1] = pws->b[0];
- pwd->b[0] = pwt->b[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->b[8] = pws->b[0];
+ pwd->b[9] = pwt->b[0];
+ pwd->b[10] = pws->b[1];
+ pwd->b[11] = pwt->b[1];
+ pwd->b[12] = pws->b[2];
+ pwd->b[13] = pwt->b[2];
+ pwd->b[14] = pws->b[3];
+ pwd->b[15] = pwt->b[3];
+ pwd->b[0] = pws->b[4];
+ pwd->b[1] = pwt->b[4];
+ pwd->b[2] = pws->b[5];
+ pwd->b[3] = pwt->b[5];
+ pwd->b[4] = pws->b[6];
+ pwd->b[5] = pwt->b[6];
+ pwd->b[6] = pws->b[7];
+ pwd->b[7] = pwt->b[7];
+ } else {
+ pwd->b[15] = pws->b[7];
+ pwd->b[14] = pwt->b[7];
+ pwd->b[13] = pws->b[6];
+ pwd->b[12] = pwt->b[6];
+ pwd->b[11] = pws->b[5];
+ pwd->b[10] = pwt->b[5];
+ pwd->b[9] = pws->b[4];
+ pwd->b[8] = pwt->b[4];
+ pwd->b[7] = pws->b[3];
+ pwd->b[6] = pwt->b[3];
+ pwd->b[5] = pws->b[2];
+ pwd->b[4] = pwt->b[2];
+ pwd->b[3] = pws->b[1];
+ pwd->b[2] = pwt->b[1];
+ pwd->b[1] = pws->b[0];
+ pwd->b[0] = pwt->b[0];
+ }
}
void helper_msa_ilvr_h(CPUMIPSState *env,
@@ -4504,25 +4504,25 @@ void helper_msa_ilvr_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[4] = pws->h[0];
- pwd->h[5] = pwt->h[0];
- pwd->h[6] = pws->h[1];
- pwd->h[7] = pwt->h[1];
- pwd->h[0] = pws->h[2];
- pwd->h[1] = pwt->h[2];
- pwd->h[2] = pws->h[3];
- pwd->h[3] = pwt->h[3];
-#else
- pwd->h[7] = pws->h[3];
- pwd->h[6] = pwt->h[3];
- pwd->h[5] = pws->h[2];
- pwd->h[4] = pwt->h[2];
- pwd->h[3] = pws->h[1];
- pwd->h[2] = pwt->h[1];
- pwd->h[1] = pws->h[0];
- pwd->h[0] = pwt->h[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[4] = pws->h[0];
+ pwd->h[5] = pwt->h[0];
+ pwd->h[6] = pws->h[1];
+ pwd->h[7] = pwt->h[1];
+ pwd->h[0] = pws->h[2];
+ pwd->h[1] = pwt->h[2];
+ pwd->h[2] = pws->h[3];
+ pwd->h[3] = pwt->h[3];
+ } else {
+ pwd->h[7] = pws->h[3];
+ pwd->h[6] = pwt->h[3];
+ pwd->h[5] = pws->h[2];
+ pwd->h[4] = pwt->h[2];
+ pwd->h[3] = pws->h[1];
+ pwd->h[2] = pwt->h[1];
+ pwd->h[1] = pws->h[0];
+ pwd->h[0] = pwt->h[0];
+ }
}
void helper_msa_ilvr_w(CPUMIPSState *env,
@@ -4532,17 +4532,17 @@ void helper_msa_ilvr_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[2] = pws->w[0];
- pwd->w[3] = pwt->w[0];
- pwd->w[0] = pws->w[1];
- pwd->w[1] = pwt->w[1];
-#else
- pwd->w[3] = pws->w[1];
- pwd->w[2] = pwt->w[1];
- pwd->w[1] = pws->w[0];
- pwd->w[0] = pwt->w[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[2] = pws->w[0];
+ pwd->w[3] = pwt->w[0];
+ pwd->w[0] = pws->w[1];
+ pwd->w[1] = pwt->w[1];
+ } else {
+ pwd->w[3] = pws->w[1];
+ pwd->w[2] = pwt->w[1];
+ pwd->w[1] = pws->w[0];
+ pwd->w[0] = pwt->w[0];
+ }
}
void helper_msa_ilvr_d(CPUMIPSState *env,
@@ -4663,41 +4663,41 @@ void helper_msa_pckev_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[8] = pws->b[9];
- pwd->b[10] = pws->b[13];
- pwd->b[12] = pws->b[1];
- pwd->b[14] = pws->b[5];
- pwd->b[0] = pwt->b[9];
- pwd->b[2] = pwt->b[13];
- pwd->b[4] = pwt->b[1];
- pwd->b[6] = pwt->b[5];
- pwd->b[9] = pws->b[11];
- pwd->b[13] = pws->b[3];
- pwd->b[1] = pwt->b[11];
- pwd->b[5] = pwt->b[3];
- pwd->b[11] = pws->b[15];
- pwd->b[3] = pwt->b[15];
- pwd->b[15] = pws->b[7];
- pwd->b[7] = pwt->b[7];
-#else
- pwd->b[15] = pws->b[14];
- pwd->b[13] = pws->b[10];
- pwd->b[11] = pws->b[6];
- pwd->b[9] = pws->b[2];
- pwd->b[7] = pwt->b[14];
- pwd->b[5] = pwt->b[10];
- pwd->b[3] = pwt->b[6];
- pwd->b[1] = pwt->b[2];
- pwd->b[14] = pws->b[12];
- pwd->b[10] = pws->b[4];
- pwd->b[6] = pwt->b[12];
- pwd->b[2] = pwt->b[4];
- pwd->b[12] = pws->b[8];
- pwd->b[4] = pwt->b[8];
- pwd->b[8] = pws->b[0];
- pwd->b[0] = pwt->b[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->b[8] = pws->b[9];
+ pwd->b[10] = pws->b[13];
+ pwd->b[12] = pws->b[1];
+ pwd->b[14] = pws->b[5];
+ pwd->b[0] = pwt->b[9];
+ pwd->b[2] = pwt->b[13];
+ pwd->b[4] = pwt->b[1];
+ pwd->b[6] = pwt->b[5];
+ pwd->b[9] = pws->b[11];
+ pwd->b[13] = pws->b[3];
+ pwd->b[1] = pwt->b[11];
+ pwd->b[5] = pwt->b[3];
+ pwd->b[11] = pws->b[15];
+ pwd->b[3] = pwt->b[15];
+ pwd->b[15] = pws->b[7];
+ pwd->b[7] = pwt->b[7];
+ } else {
+ pwd->b[15] = pws->b[14];
+ pwd->b[13] = pws->b[10];
+ pwd->b[11] = pws->b[6];
+ pwd->b[9] = pws->b[2];
+ pwd->b[7] = pwt->b[14];
+ pwd->b[5] = pwt->b[10];
+ pwd->b[3] = pwt->b[6];
+ pwd->b[1] = pwt->b[2];
+ pwd->b[14] = pws->b[12];
+ pwd->b[10] = pws->b[4];
+ pwd->b[6] = pwt->b[12];
+ pwd->b[2] = pwt->b[4];
+ pwd->b[12] = pws->b[8];
+ pwd->b[4] = pwt->b[8];
+ pwd->b[8] = pws->b[0];
+ pwd->b[0] = pwt->b[0];
+ }
}
void helper_msa_pckev_h(CPUMIPSState *env,
@@ -4707,25 +4707,25 @@ void helper_msa_pckev_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[4] = pws->h[5];
- pwd->h[6] = pws->h[1];
- pwd->h[0] = pwt->h[5];
- pwd->h[2] = pwt->h[1];
- pwd->h[5] = pws->h[7];
- pwd->h[1] = pwt->h[7];
- pwd->h[7] = pws->h[3];
- pwd->h[3] = pwt->h[3];
-#else
- pwd->h[7] = pws->h[6];
- pwd->h[5] = pws->h[2];
- pwd->h[3] = pwt->h[6];
- pwd->h[1] = pwt->h[2];
- pwd->h[6] = pws->h[4];
- pwd->h[2] = pwt->h[4];
- pwd->h[4] = pws->h[0];
- pwd->h[0] = pwt->h[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[4] = pws->h[5];
+ pwd->h[6] = pws->h[1];
+ pwd->h[0] = pwt->h[5];
+ pwd->h[2] = pwt->h[1];
+ pwd->h[5] = pws->h[7];
+ pwd->h[1] = pwt->h[7];
+ pwd->h[7] = pws->h[3];
+ pwd->h[3] = pwt->h[3];
+ } else {
+ pwd->h[7] = pws->h[6];
+ pwd->h[5] = pws->h[2];
+ pwd->h[3] = pwt->h[6];
+ pwd->h[1] = pwt->h[2];
+ pwd->h[6] = pws->h[4];
+ pwd->h[2] = pwt->h[4];
+ pwd->h[4] = pws->h[0];
+ pwd->h[0] = pwt->h[0];
+ }
}
void helper_msa_pckev_w(CPUMIPSState *env,
@@ -4735,17 +4735,17 @@ void helper_msa_pckev_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[2] = pws->w[3];
- pwd->w[0] = pwt->w[3];
- pwd->w[3] = pws->w[1];
- pwd->w[1] = pwt->w[1];
-#else
- pwd->w[3] = pws->w[2];
- pwd->w[1] = pwt->w[2];
- pwd->w[2] = pws->w[0];
- pwd->w[0] = pwt->w[0];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[2] = pws->w[3];
+ pwd->w[0] = pwt->w[3];
+ pwd->w[3] = pws->w[1];
+ pwd->w[1] = pwt->w[1];
+ } else {
+ pwd->w[3] = pws->w[2];
+ pwd->w[1] = pwt->w[2];
+ pwd->w[2] = pws->w[0];
+ pwd->w[0] = pwt->w[0];
+ }
}
void helper_msa_pckev_d(CPUMIPSState *env,
@@ -4767,42 +4767,41 @@ void helper_msa_pckod_b(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->b[7] = pwt->b[6];
- pwd->b[5] = pwt->b[2];
- pwd->b[3] = pwt->b[14];
- pwd->b[1] = pwt->b[10];
- pwd->b[15] = pws->b[6];
- pwd->b[13] = pws->b[2];
- pwd->b[11] = pws->b[14];
- pwd->b[9] = pws->b[10];
- pwd->b[6] = pwt->b[4];
- pwd->b[2] = pwt->b[12];
- pwd->b[14] = pws->b[4];
- pwd->b[10] = pws->b[12];
- pwd->b[4] = pwt->b[0];
- pwd->b[12] = pws->b[0];
- pwd->b[0] = pwt->b[8];
- pwd->b[8] = pws->b[8];
-#else
- pwd->b[0] = pwt->b[1];
- pwd->b[2] = pwt->b[5];
- pwd->b[4] = pwt->b[9];
- pwd->b[6] = pwt->b[13];
- pwd->b[8] = pws->b[1];
- pwd->b[10] = pws->b[5];
- pwd->b[12] = pws->b[9];
- pwd->b[14] = pws->b[13];
- pwd->b[1] = pwt->b[3];
- pwd->b[5] = pwt->b[11];
- pwd->b[9] = pws->b[3];
- pwd->b[13] = pws->b[11];
- pwd->b[3] = pwt->b[7];
- pwd->b[11] = pws->b[7];
- pwd->b[7] = pwt->b[15];
- pwd->b[15] = pws->b[15];
-#endif
-
+ if (HOST_BIG_ENDIAN) {
+ pwd->b[7] = pwt->b[6];
+ pwd->b[5] = pwt->b[2];
+ pwd->b[3] = pwt->b[14];
+ pwd->b[1] = pwt->b[10];
+ pwd->b[15] = pws->b[6];
+ pwd->b[13] = pws->b[2];
+ pwd->b[11] = pws->b[14];
+ pwd->b[9] = pws->b[10];
+ pwd->b[6] = pwt->b[4];
+ pwd->b[2] = pwt->b[12];
+ pwd->b[14] = pws->b[4];
+ pwd->b[10] = pws->b[12];
+ pwd->b[4] = pwt->b[0];
+ pwd->b[12] = pws->b[0];
+ pwd->b[0] = pwt->b[8];
+ pwd->b[8] = pws->b[8];
+ } else {
+ pwd->b[0] = pwt->b[1];
+ pwd->b[2] = pwt->b[5];
+ pwd->b[4] = pwt->b[9];
+ pwd->b[6] = pwt->b[13];
+ pwd->b[8] = pws->b[1];
+ pwd->b[10] = pws->b[5];
+ pwd->b[12] = pws->b[9];
+ pwd->b[14] = pws->b[13];
+ pwd->b[1] = pwt->b[3];
+ pwd->b[5] = pwt->b[11];
+ pwd->b[9] = pws->b[3];
+ pwd->b[13] = pws->b[11];
+ pwd->b[3] = pwt->b[7];
+ pwd->b[11] = pws->b[7];
+ pwd->b[7] = pwt->b[15];
+ pwd->b[15] = pws->b[15];
+ }
}
void helper_msa_pckod_h(CPUMIPSState *env,
@@ -4812,25 +4811,25 @@ void helper_msa_pckod_h(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->h[3] = pwt->h[2];
- pwd->h[1] = pwt->h[6];
- pwd->h[7] = pws->h[2];
- pwd->h[5] = pws->h[6];
- pwd->h[2] = pwt->h[0];
- pwd->h[6] = pws->h[0];
- pwd->h[0] = pwt->h[4];
- pwd->h[4] = pws->h[4];
-#else
- pwd->h[0] = pwt->h[1];
- pwd->h[2] = pwt->h[5];
- pwd->h[4] = pws->h[1];
- pwd->h[6] = pws->h[5];
- pwd->h[1] = pwt->h[3];
- pwd->h[5] = pws->h[3];
- pwd->h[3] = pwt->h[7];
- pwd->h[7] = pws->h[7];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->h[3] = pwt->h[2];
+ pwd->h[1] = pwt->h[6];
+ pwd->h[7] = pws->h[2];
+ pwd->h[5] = pws->h[6];
+ pwd->h[2] = pwt->h[0];
+ pwd->h[6] = pws->h[0];
+ pwd->h[0] = pwt->h[4];
+ pwd->h[4] = pws->h[4];
+ } else {
+ pwd->h[0] = pwt->h[1];
+ pwd->h[2] = pwt->h[5];
+ pwd->h[4] = pws->h[1];
+ pwd->h[6] = pws->h[5];
+ pwd->h[1] = pwt->h[3];
+ pwd->h[5] = pws->h[3];
+ pwd->h[3] = pwt->h[7];
+ pwd->h[7] = pws->h[7];
+ }
}
void helper_msa_pckod_w(CPUMIPSState *env,
@@ -4840,17 +4839,17 @@ void helper_msa_pckod_w(CPUMIPSState *env,
wr_t *pws = &(env->active_fpu.fpr[ws].wr);
wr_t *pwt = &(env->active_fpu.fpr[wt].wr);
-#if HOST_BIG_ENDIAN
- pwd->w[1] = pwt->w[0];
- pwd->w[3] = pws->w[0];
- pwd->w[0] = pwt->w[2];
- pwd->w[2] = pws->w[2];
-#else
- pwd->w[0] = pwt->w[1];
- pwd->w[2] = pws->w[1];
- pwd->w[1] = pwt->w[3];
- pwd->w[3] = pws->w[3];
-#endif
+ if (HOST_BIG_ENDIAN) {
+ pwd->w[1] = pwt->w[0];
+ pwd->w[3] = pws->w[0];
+ pwd->w[0] = pwt->w[2];
+ pwd->w[2] = pws->w[2];
+ } else {
+ pwd->w[0] = pwt->w[1];
+ pwd->w[2] = pws->w[1];
+ pwd->w[1] = pwt->w[3];
+ pwd->w[3] = pws->w[3];
+ }
}
void helper_msa_pckod_d(CPUMIPSState *env,
@@ -5928,13 +5927,13 @@ void helper_msa_copy_s_b(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 16;
-#if HOST_BIG_ENDIAN
- if (n < 8) {
- n = 8 - n - 1;
- } else {
- n = 24 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 8) {
+ n = 8 - n - 1;
+ } else {
+ n = 24 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (int8_t)env->active_fpu.fpr[ws].wr.b[n];
}
@@ -5942,13 +5941,13 @@ void helper_msa_copy_s_h(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 8;
-#if HOST_BIG_ENDIAN
- if (n < 4) {
- n = 4 - n - 1;
- } else {
- n = 12 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 4) {
+ n = 4 - n - 1;
+ } else {
+ n = 12 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (int16_t)env->active_fpu.fpr[ws].wr.h[n];
}
@@ -5956,13 +5955,13 @@ void helper_msa_copy_s_w(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 4;
-#if HOST_BIG_ENDIAN
- if (n < 2) {
- n = 2 - n - 1;
- } else {
- n = 6 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 2) {
+ n = 2 - n - 1;
+ } else {
+ n = 6 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (int32_t)env->active_fpu.fpr[ws].wr.w[n];
}
@@ -5977,13 +5976,13 @@ void helper_msa_copy_u_b(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 16;
-#if HOST_BIG_ENDIAN
- if (n < 8) {
- n = 8 - n - 1;
- } else {
- n = 24 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 8) {
+ n = 8 - n - 1;
+ } else {
+ n = 24 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (uint8_t)env->active_fpu.fpr[ws].wr.b[n];
}
@@ -5991,13 +5990,13 @@ void helper_msa_copy_u_h(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 8;
-#if HOST_BIG_ENDIAN
- if (n < 4) {
- n = 4 - n - 1;
- } else {
- n = 12 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 4) {
+ n = 4 - n - 1;
+ } else {
+ n = 12 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (uint16_t)env->active_fpu.fpr[ws].wr.h[n];
}
@@ -6005,13 +6004,13 @@ void helper_msa_copy_u_w(CPUMIPSState *env, uint32_t rd,
uint32_t ws, uint32_t n)
{
n %= 4;
-#if HOST_BIG_ENDIAN
- if (n < 2) {
- n = 2 - n - 1;
- } else {
- n = 6 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 2) {
+ n = 2 - n - 1;
+ } else {
+ n = 6 - n - 1;
+ }
}
-#endif
env->active_tc.gpr[rd] = (uint32_t)env->active_fpu.fpr[ws].wr.w[n];
}
@@ -6021,13 +6020,13 @@ void helper_msa_insert_b(CPUMIPSState *env, uint32_t wd,
wr_t *pwd = &(env->active_fpu.fpr[wd].wr);
target_ulong rs = env->active_tc.gpr[rs_num];
n %= 16;
-#if HOST_BIG_ENDIAN
- if (n < 8) {
- n = 8 - n - 1;
- } else {
- n = 24 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 8) {
+ n = 8 - n - 1;
+ } else {
+ n = 24 - n - 1;
+ }
}
-#endif
pwd->b[n] = (int8_t)rs;
}
@@ -6037,13 +6036,13 @@ void helper_msa_insert_h(CPUMIPSState *env, uint32_t wd,
wr_t *pwd = &(env->active_fpu.fpr[wd].wr);
target_ulong rs = env->active_tc.gpr[rs_num];
n %= 8;
-#if HOST_BIG_ENDIAN
- if (n < 4) {
- n = 4 - n - 1;
- } else {
- n = 12 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 4) {
+ n = 4 - n - 1;
+ } else {
+ n = 12 - n - 1;
+ }
}
-#endif
pwd->h[n] = (int16_t)rs;
}
@@ -6053,13 +6052,13 @@ void helper_msa_insert_w(CPUMIPSState *env, uint32_t wd,
wr_t *pwd = &(env->active_fpu.fpr[wd].wr);
target_ulong rs = env->active_tc.gpr[rs_num];
n %= 4;
-#if HOST_BIG_ENDIAN
- if (n < 2) {
- n = 2 - n - 1;
- } else {
- n = 6 - n - 1;
+ if (HOST_BIG_ENDIAN) {
+ if (n < 2) {
+ n = 2 - n - 1;
+ } else {
+ n = 6 - n - 1;
+ }
}
-#endif
pwd->w[n] = (int32_t)rs;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 12/16] target/ppc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (10 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 11/16] target/mips: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 13/16] target/riscv: " Philippe Mathieu-Daudé
` (4 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Nicholas Piggin, Chinmay Rath,
Harsh Prateek Bora, Paolo Bonzini, Richard Henderson, kvm
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/ppc/arch_dump.c | 9 ++-------
target/ppc/int_helper.c | 28 ++++++++++++++--------------
target/ppc/kvm.c | 25 +++++++++----------------
target/ppc/translate/vmx-impl.c.inc | 14 +++++++-------
target/ppc/translate/vsx-impl.c.inc | 6 +++---
tcg/ppc/tcg-target.c.inc | 24 ++++++++++++------------
6 files changed, 47 insertions(+), 59 deletions(-)
diff --git a/target/ppc/arch_dump.c b/target/ppc/arch_dump.c
index 80ac6c3e320..5cb8dbe9a6a 100644
--- a/target/ppc/arch_dump.c
+++ b/target/ppc/arch_dump.c
@@ -158,21 +158,16 @@ static void ppc_write_elf_vmxregset(NoteFuncArg *arg, PowerPCCPU *cpu, int id)
struct PPCElfVmxregset *vmxregset;
Note *note = &arg->note;
DumpState *s = arg->state;
+ const int host_data_order = HOST_BIG_ENDIAN ? ELFDATA2MSB : ELFDATA2LSB;
+ const bool needs_byteswap = s->dump_info.d_endian == host_data_order;
note->hdr.n_type = cpu_to_dump32(s, NT_PPC_VMX);
vmxregset = ¬e->contents.vmxregset;
memset(vmxregset, 0, sizeof(*vmxregset));
for (i = 0; i < 32; i++) {
- bool needs_byteswap;
ppc_avr_t *avr = cpu_avr_ptr(&cpu->env, i);
-#if HOST_BIG_ENDIAN
- needs_byteswap = s->dump_info.d_endian == ELFDATA2LSB;
-#else
- needs_byteswap = s->dump_info.d_endian == ELFDATA2MSB;
-#endif
-
if (needs_byteswap) {
vmxregset->avr[i].u64[0] = bswap64(avr->u64[1]);
vmxregset->avr[i].u64[1] = bswap64(avr->u64[0]);
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
index ef4b2e75d60..0c6f5b2e519 100644
--- a/target/ppc/int_helper.c
+++ b/target/ppc/int_helper.c
@@ -1678,13 +1678,13 @@ void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
int sh = (b->VsrB(0xf) >> 3) & 0xf;
-#if HOST_BIG_ENDIAN
- memmove(&r->u8[0], &a->u8[sh], 16 - sh);
- memset(&r->u8[16 - sh], 0, sh);
-#else
- memmove(&r->u8[sh], &a->u8[0], 16 - sh);
- memset(&r->u8[0], 0, sh);
-#endif
+ if (HOST_BIG_ENDIAN) {
+ memmove(&r->u8[0], &a->u8[sh], 16 - sh);
+ memset(&r->u8[16 - sh], 0, sh);
+ } else {
+ memmove(&r->u8[sh], &a->u8[0], 16 - sh);
+ memset(&r->u8[0], 0, sh);
+ }
}
#if HOST_BIG_ENDIAN
@@ -1898,13 +1898,13 @@ void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
int sh = (b->VsrB(0xf) >> 3) & 0xf;
-#if HOST_BIG_ENDIAN
- memmove(&r->u8[sh], &a->u8[0], 16 - sh);
- memset(&r->u8[0], 0, sh);
-#else
- memmove(&r->u8[0], &a->u8[sh], 16 - sh);
- memset(&r->u8[16 - sh], 0, sh);
-#endif
+ if (HOST_BIG_ENDIAN) {
+ memmove(&r->u8[sh], &a->u8[0], 16 - sh);
+ memset(&r->u8[0], 0, sh);
+ } else {
+ memmove(&r->u8[0], &a->u8[sh], 16 - sh);
+ memset(&r->u8[16 - sh], 0, sh);
+ }
}
void helper_vsumsws(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 2521ff65c6c..c00d29ce2c8 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -651,13 +651,13 @@ static int kvm_put_fp(CPUState *cs)
uint64_t *fpr = cpu_fpr_ptr(env, i);
uint64_t *vsrl = cpu_vsrl_ptr(env, i);
-#if HOST_BIG_ENDIAN
- vsr[0] = float64_val(*fpr);
- vsr[1] = *vsrl;
-#else
- vsr[0] = *vsrl;
- vsr[1] = float64_val(*fpr);
-#endif
+ if (HOST_BIG_ENDIAN) {
+ vsr[0] = float64_val(*fpr);
+ vsr[1] = *vsrl;
+ } else {
+ vsr[0] = *vsrl;
+ vsr[1] = float64_val(*fpr);
+ }
reg.addr = (uintptr_t) &vsr;
reg.id = vsx ? KVM_REG_PPC_VSR(i) : KVM_REG_PPC_FPR(i);
@@ -728,17 +728,10 @@ static int kvm_get_fp(CPUState *cs)
strerror(errno));
return ret;
} else {
-#if HOST_BIG_ENDIAN
- *fpr = vsr[0];
+ *fpr = vsr[!HOST_BIG_ENDIAN];
if (vsx) {
- *vsrl = vsr[1];
+ *vsrl = vsr[HOST_BIG_ENDIAN];
}
-#else
- *fpr = vsr[1];
- if (vsx) {
- *vsrl = vsr[0];
- }
-#endif
}
}
}
diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
index 92d6e8c6032..ca9cf1823d4 100644
--- a/target/ppc/translate/vmx-impl.c.inc
+++ b/target/ppc/translate/vmx-impl.c.inc
@@ -134,9 +134,9 @@ static void gen_mtvscr(DisasContext *ctx)
val = tcg_temp_new_i32();
bofs = avr_full_offset(rB(ctx->opcode));
-#if HOST_BIG_ENDIAN
- bofs += 3 * 4;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ bofs += 3 * 4;
+ }
tcg_gen_ld_i32(val, tcg_env, bofs);
gen_helper_mtvscr(tcg_env, val);
@@ -1528,10 +1528,10 @@ static void gen_vsplt(DisasContext *ctx, int vece)
/* Experimental testing shows that hardware masks the immediate. */
bofs += (uimm << vece) & 15;
-#if !HOST_BIG_ENDIAN
- bofs ^= 15;
- bofs &= ~((1 << vece) - 1);
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ bofs ^= 15;
+ bofs &= ~((1 << vece) - 1);
+ }
tcg_gen_gvec_dup_mem(vece, dofs, bofs, 16, 16);
}
diff --git a/target/ppc/translate/vsx-impl.c.inc b/target/ppc/translate/vsx-impl.c.inc
index 00ad57c6282..8e5c75961f4 100644
--- a/target/ppc/translate/vsx-impl.c.inc
+++ b/target/ppc/translate/vsx-impl.c.inc
@@ -1642,9 +1642,9 @@ static bool trans_XXSPLTW(DisasContext *ctx, arg_XX2_uim *a)
tofs = vsr_full_offset(a->xt);
bofs = vsr_full_offset(a->xb);
bofs += a->uim << MO_32;
-#if !HOST_BIG_ENDIAN
- bofs ^= 8 | 4;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ bofs ^= 8 | 4;
+ }
tcg_gen_gvec_dup_mem(MO_32, tofs, bofs, 16, 16);
return true;
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
index b8b23d44d5e..61aa77f5454 100644
--- a/tcg/ppc/tcg-target.c.inc
+++ b/tcg/ppc/tcg-target.c.inc
@@ -3951,9 +3951,9 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
tcg_out_mem_long(s, 0, LVEBX, out, base, offset);
}
elt = extract32(offset, 0, 4);
-#if !HOST_BIG_ENDIAN
- elt ^= 15;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ elt ^= 15;
+ }
tcg_out32(s, VSPLTB | VRT(out) | VRB(out) | (elt << 16));
break;
case MO_16:
@@ -3964,9 +3964,9 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
tcg_out_mem_long(s, 0, LVEHX, out, base, offset);
}
elt = extract32(offset, 1, 3);
-#if !HOST_BIG_ENDIAN
- elt ^= 7;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ elt ^= 7;
+ }
tcg_out32(s, VSPLTH | VRT(out) | VRB(out) | (elt << 16));
break;
case MO_32:
@@ -3977,9 +3977,9 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
tcg_debug_assert((offset & 3) == 0);
tcg_out_mem_long(s, 0, LVEWX, out, base, offset);
elt = extract32(offset, 2, 2);
-#if !HOST_BIG_ENDIAN
- elt ^= 3;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ elt ^= 3;
+ }
tcg_out32(s, VSPLTW | VRT(out) | VRB(out) | (elt << 16));
break;
case MO_64:
@@ -3991,9 +3991,9 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece,
tcg_out_mem_long(s, 0, LVX, out, base, offset & -16);
tcg_out_vsldoi(s, TCG_VEC_TMP1, out, out, 8);
elt = extract32(offset, 3, 1);
-#if !HOST_BIG_ENDIAN
- elt = !elt;
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ elt = !elt;
+ }
if (elt) {
tcg_out_vsldoi(s, out, out, TCG_VEC_TMP1, 8);
} else {
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 13/16] target/riscv: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (11 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 12/16] target/ppc: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 14/16] target/s390x: " Philippe Mathieu-Daudé
` (3 subsequent siblings)
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Palmer Dabbelt, Alistair Francis,
Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/riscv/vector_helper.c | 32 ++++++++++++-------------
target/riscv/insn_trans/trans_rvv.c.inc | 16 ++++++-------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/target/riscv/vector_helper.c b/target/riscv/vector_helper.c
index 41ea2231067..2de3358ee86 100644
--- a/target/riscv/vector_helper.c
+++ b/target/riscv/vector_helper.c
@@ -235,26 +235,26 @@ vext_continuous_ldst_host(CPURISCVState *env, vext_ldst_elem_fn_host *ldst_host,
void *vd, uint32_t evl, uint32_t reg_start, void *host,
uint32_t esz, bool is_load)
{
-#if HOST_BIG_ENDIAN
- for (; reg_start < evl; reg_start++, host += esz) {
- ldst_host(vd, reg_start, host);
- }
-#else
- if (esz == 1) {
- uint32_t byte_offset = reg_start * esz;
- uint32_t size = (evl - reg_start) * esz;
-
- if (is_load) {
- memcpy(vd + byte_offset, host, size);
- } else {
- memcpy(host, vd + byte_offset, size);
- }
- } else {
+ if (HOST_BIG_ENDIAN) {
for (; reg_start < evl; reg_start++, host += esz) {
ldst_host(vd, reg_start, host);
}
+ } else {
+ if (esz == 1) {
+ uint32_t byte_offset = reg_start * esz;
+ uint32_t size = (evl - reg_start) * esz;
+
+ if (is_load) {
+ memcpy(vd + byte_offset, host, size);
+ } else {
+ memcpy(host, vd + byte_offset, size);
+ }
+ } else {
+ for (; reg_start < evl; reg_start++, host += esz) {
+ ldst_host(vd, reg_start, host);
+ }
+ }
}
-#endif
}
static void vext_set_tail_elems_1s(target_ulong vl, void *vd,
diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_trans/trans_rvv.c.inc
index f4b5460340e..2a487179f63 100644
--- a/target/riscv/insn_trans/trans_rvv.c.inc
+++ b/target/riscv/insn_trans/trans_rvv.c.inc
@@ -3351,19 +3351,19 @@ static void load_element(TCGv_i64 dest, TCGv_ptr base,
/* offset of the idx element with base register r */
static uint32_t endian_ofs(DisasContext *s, int r, int idx)
{
-#if HOST_BIG_ENDIAN
- return vreg_ofs(s, r) + ((idx ^ (7 >> s->sew)) << s->sew);
-#else
- return vreg_ofs(s, r) + (idx << s->sew);
-#endif
+ if (HOST_BIG_ENDIAN) {
+ return vreg_ofs(s, r) + ((idx ^ (7 >> s->sew)) << s->sew);
+ } else {
+ return vreg_ofs(s, r) + (idx << s->sew);
+ }
}
/* adjust the index according to the endian */
static void endian_adjust(TCGv_i32 ofs, int sew)
{
-#if HOST_BIG_ENDIAN
- tcg_gen_xori_i32(ofs, ofs, 7 >> sew);
-#endif
+ if (HOST_BIG_ENDIAN) {
+ tcg_gen_xori_i32(ofs, ofs, 7 >> sew);
+ }
}
/* Load idx >= VLMAX ? 0 : vreg[idx] */
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 14/16] target/s390x: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (12 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 13/16] target/riscv: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:56 ` David Hildenbrand
2025-10-10 13:42 ` [PATCH 15/16] target/sparc: " Philippe Mathieu-Daudé
` (2 subsequent siblings)
16 siblings, 1 reply; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Richard Henderson, David Hildenbrand,
Ilya Leoshkevich, Thomas Huth
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/s390x/tcg/translate.c | 6 +++---
target/s390x/tcg/translate_vx.c.inc | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
index c7e8574438c..ec9e5a07516 100644
--- a/target/s390x/tcg/translate.c
+++ b/target/s390x/tcg/translate.c
@@ -258,9 +258,9 @@ static inline int vec_reg_offset(uint8_t reg, uint8_t enr, MemOp es)
* 16 byte operations to handle it in a special way.
*/
g_assert(es <= MO_64);
-#if !HOST_BIG_ENDIAN
- offs ^= (8 - bytes);
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ offs ^= (8 - bytes);
+ }
return offs + vec_full_reg_offset(reg);
}
diff --git a/target/s390x/tcg/translate_vx.c.inc b/target/s390x/tcg/translate_vx.c.inc
index e073e5ad3aa..f3b4b48ab7b 100644
--- a/target/s390x/tcg/translate_vx.c.inc
+++ b/target/s390x/tcg/translate_vx.c.inc
@@ -175,9 +175,9 @@ static void get_vec_element_ptr_i64(TCGv_ptr ptr, uint8_t reg, TCGv_i64 enr,
/* convert it to an element offset relative to tcg_env (vec_reg_offset() */
tcg_gen_shli_i64(tmp, tmp, es);
-#if !HOST_BIG_ENDIAN
- tcg_gen_xori_i64(tmp, tmp, 8 - NUM_VEC_ELEMENT_BYTES(es));
-#endif
+ if (!HOST_BIG_ENDIAN) {
+ tcg_gen_xori_i64(tmp, tmp, 8 - NUM_VEC_ELEMENT_BYTES(es));
+ }
tcg_gen_addi_i64(tmp, tmp, vec_full_reg_offset(reg));
/* generate the final ptr by adding tcg_env */
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 15/16] target/sparc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (13 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 14/16] target/s390x: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 16/16] util/bitmap: " Philippe Mathieu-Daudé
2025-10-10 13:51 ` [PATCH 00/16] overall: " Paolo Bonzini
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé, Mark Cave-Ayland, Artyom Tarasenko
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/sparc/vis_helper.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/target/sparc/vis_helper.c b/target/sparc/vis_helper.c
index 371f5445a1f..72926dfb7b0 100644
--- a/target/sparc/vis_helper.c
+++ b/target/sparc/vis_helper.c
@@ -462,15 +462,15 @@ uint64_t helper_bshuffle(uint64_t gsr, uint64_t src1, uint64_t src2)
uint32_t i, mask, host;
/* Set up S such that we can index across all of the bytes. */
-#if HOST_BIG_ENDIAN
- s.ll[0] = src1;
- s.ll[1] = src2;
- host = 0;
-#else
- s.ll[1] = src1;
- s.ll[0] = src2;
- host = 15;
-#endif
+ if (HOST_BIG_ENDIAN) {
+ s.ll[0] = src1;
+ s.ll[1] = src2;
+ host = 0;
+ } else {
+ s.ll[1] = src1;
+ s.ll[0] = src2;
+ host = 15;
+ }
mask = gsr >> 32;
for (i = 0; i < 8; ++i) {
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 16/16] util/bitmap: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (14 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 15/16] target/sparc: " Philippe Mathieu-Daudé
@ 2025-10-10 13:42 ` Philippe Mathieu-Daudé
2025-10-10 13:51 ` [PATCH 00/16] overall: " Paolo Bonzini
16 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 13:42 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Philippe Mathieu-Daudé
Replace compile-time #ifdef with a runtime check to ensure all code
paths are built and tested. This reduces build-time configuration
complexity and improves maintainability.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
util/bitmap.c | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/util/bitmap.c b/util/bitmap.c
index 8d12e90a5a4..2346159116e 100644
--- a/util/bitmap.c
+++ b/util/bitmap.c
@@ -421,19 +421,14 @@ static void bitmap_to_from_le(unsigned long *dst,
{
long len = BITS_TO_LONGS(nbits);
-#if HOST_BIG_ENDIAN
- long index;
-
- for (index = 0; index < len; index++) {
-# if HOST_LONG_BITS == 64
- dst[index] = bswap64(src[index]);
-# else
- dst[index] = bswap32(src[index]);
-# endif
+ if (HOST_BIG_ENDIAN) {
+ for (long index = 0; index < len; index++) {
+ dst[index] = (HOST_LONG_BITS == 64) ? bswap64(src[index])
+ : bswap32(src[index]);
+ }
+ } else {
+ memcpy(dst, src, len * sizeof(unsigned long));
}
-#else
- memcpy(dst, src, len * sizeof(unsigned long));
-#endif
}
void bitmap_from_le(unsigned long *dst, const unsigned long *src,
--
2.51.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
` (15 preceding siblings ...)
2025-10-10 13:42 ` [PATCH 16/16] util/bitmap: " Philippe Mathieu-Daudé
@ 2025-10-10 13:51 ` Paolo Bonzini
2025-10-10 14:37 ` Philippe Mathieu-Daudé
16 siblings, 1 reply; 23+ messages in thread
From: Paolo Bonzini @ 2025-10-10 13:51 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x
On 10/10/25 15:42, Philippe Mathieu-Daudé wrote:
> Replace compile-time #ifdef with a runtime check to ensure all code
> paths are built and tested. This reduces build-time configuration
> complexity and improves maintainability.
>
> No functional change intended.
No need to repost (and I didn't review), but please change throughout
the commit message to mention a *compile-time* if() check. The code for
the wrong endianness will not make it past compilation, and mentioning
runtime checks left me wondering if you had mistaken HOST for TARGET.
Thanks,
Paolo
> Philippe Mathieu-Daudé (16):
> linux-user/arm: Checkpatch style cleanups
> linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> ui: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> net: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> disas: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> hw/core/loader: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> hw/display: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> hw/virtio: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/alpha: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/mips: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/ppc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/riscv: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/s390x: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> target/sparc: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
> util/bitmap: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
>
> include/hw/virtio/virtio-access.h | 6 +-
> include/hw/virtio/virtio-gpu-bswap.h | 6 +-
> target/arm/cpu.h | 8 +-
> target/arm/tcg/translate-a64.h | 5 +-
> disas/disas-host.c | 6 +-
> hw/core/loader.c | 5 +-
> hw/display/artist.c | 12 +-
> hw/display/vga.c | 20 +-
> hw/display/virtio-gpu-gl.c | 8 +-
> hw/display/virtio-gpu-rutabaga.c | 8 +-
> hw/virtio/vhost.c | 7 +-
> linux-user/arm/nwfpe/double_cpdo.c | 12 +-
> linux-user/arm/nwfpe/fpa11_cpdt.c | 77 +-
> net/net.c | 14 +-
> target/alpha/translate.c | 11 +-
> target/arm/tcg/sve_helper.c | 10 +-
> target/arm/tcg/translate-sve.c | 22 +-
> target/arm/tcg/translate-vfp.c | 8 +-
> target/arm/tcg/translate.c | 6 +-
> target/mips/tcg/msa_helper.c | 889 ++++++++++++------------
> target/ppc/arch_dump.c | 9 +-
> target/ppc/int_helper.c | 28 +-
> target/ppc/kvm.c | 25 +-
> target/riscv/vector_helper.c | 32 +-
> target/s390x/tcg/translate.c | 6 +-
> target/sparc/vis_helper.c | 18 +-
> ui/vdagent.c | 16 +-
> ui/vnc.c | 6 +-
> util/bitmap.c | 19 +-
> target/ppc/translate/vmx-impl.c.inc | 14 +-
> target/ppc/translate/vsx-impl.c.inc | 6 +-
> target/riscv/insn_trans/trans_rvv.c.inc | 16 +-
> target/s390x/tcg/translate_vx.c.inc | 6 +-
> tcg/ppc/tcg-target.c.inc | 24 +-
> 34 files changed, 656 insertions(+), 709 deletions(-)
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 14/16] target/s390x: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 ` [PATCH 14/16] target/s390x: " Philippe Mathieu-Daudé
@ 2025-10-10 13:56 ` David Hildenbrand
0 siblings, 0 replies; 23+ messages in thread
From: David Hildenbrand @ 2025-10-10 13:56 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x, Richard Henderson,
Ilya Leoshkevich, Thomas Huth
On 10.10.25 15:42, Philippe Mathieu-Daudé wrote:
> Replace compile-time #ifdef with a runtime check to ensure all code
> paths are built and tested. This reduces build-time configuration
> complexity and improves maintainability.
>
> No functional change intended.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
Reviewed-by: David Hildenbrand <david@redhat.com>
--
Cheers
David / dhildenb
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:51 ` [PATCH 00/16] overall: " Paolo Bonzini
@ 2025-10-10 14:37 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 23+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-10-10 14:37 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel; +Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x
On 10/10/25 15:51, Paolo Bonzini wrote:
> On 10/10/25 15:42, Philippe Mathieu-Daudé wrote:
>> Replace compile-time #ifdef with a runtime check to ensure all code
>> paths are built and tested. This reduces build-time configuration
>> complexity and improves maintainability.
>>
>> No functional change intended.
>
> No need to repost (and I didn't review), but please change throughout
> the commit message to mention a *compile-time* if() check. The code for
> the wrong endianness will not make it past compilation, and mentioning
> runtime checks left me wondering if you had mistaken HOST for TARGET.
I want HOST, and hope the changes are correct: I meant to express the
code is elided by the compiler, indeed not at *runtime* 🤦 I'll reword
the commit description. Thanks for catching this.
>
> Thanks,
>
> Paolo
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 08/16] hw/virtio: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 ` [PATCH 08/16] hw/virtio: " Philippe Mathieu-Daudé
@ 2025-10-10 19:23 ` Farhan Ali
2025-10-11 8:04 ` Lei Yang
0 siblings, 1 reply; 23+ messages in thread
From: Farhan Ali @ 2025-10-10 19:23 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel
Cc: qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x, Michael S. Tsirkin,
Stefano Garzarella
On 10/10/2025 6:42 AM, Philippe Mathieu-Daudé wrote:
> Replace compile-time #ifdef with a runtime check to ensure all code
> paths are built and tested. This reduces build-time configuration
> complexity and improves maintainability.
>
> No functional change intended.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/hw/virtio/virtio-access.h | 6 +-----
> hw/virtio/vhost.c | 7 +++----
> 2 files changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
> index 07aae69042a..80328912ad3 100644
> --- a/include/hw/virtio/virtio-access.h
> +++ b/include/hw/virtio/virtio-access.h
> @@ -149,11 +149,7 @@ static inline uint64_t virtio_ldq_p(VirtIODevice *vdev, const void *ptr)
>
> static inline uint16_t virtio_tswap16(VirtIODevice *vdev, uint16_t s)
> {
> -#if HOST_BIG_ENDIAN
> - return virtio_access_is_big_endian(vdev) ? s : bswap16(s);
> -#else
> - return virtio_access_is_big_endian(vdev) ? bswap16(s) : s;
> -#endif
> + return HOST_BIG_ENDIAN ^ virtio_access_is_big_endian(vdev) ? s : bswap16(s);
This patch breaks virtio devices(at least input/net devices) on s390x. I
am not sure if ^ is the right check here? Changing the logic back to how
it was fixes it for me.
Thanks
Farhan
> }
>
> static inline uint16_t virtio_lduw_phys_cached(VirtIODevice *vdev,
> diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> index 266a11514a1..6343477b42f 100644
> --- a/hw/virtio/vhost.c
> +++ b/hw/virtio/vhost.c
> @@ -1168,11 +1168,10 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
> if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> return false;
> }
> -#if HOST_BIG_ENDIAN
> - return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> -#else
> + if (HOST_BIG_ENDIAN) {
> + return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> + }
> return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
> -#endif
> }
>
> static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 08/16] hw/virtio: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 19:23 ` Farhan Ali
@ 2025-10-11 8:04 ` Lei Yang
0 siblings, 0 replies; 23+ messages in thread
From: Lei Yang @ 2025-10-11 8:04 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x,
Michael S. Tsirkin, Stefano Garzarella, Farhan Ali
Hi Philippe Mathieu-Daudé
According to my test result this change introduced a minor bug, qemu
output error messages "qemu-system-x86_64: virtio-blk missing headers"
reproduced command:
/usr/local/bin/qemu-system-x86_64 -M q35 -m 8G -smp 8 -cpu host
-enable-kvm -device VGA,bus=pcie.0,addr=0x2 -drive
file=///home/fedora-40.qcow2,media=disk,if=virtio -device
virtio-net-pci,mac=00:11:22:33:44:00,netdev=netdev1,id=net1,bus=pcie.0,addr=0x7
-netdev tap,id=netdev1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown
-vnc :0 -monitor stdio
QEMU 10.1.50 monitor - type 'help' for more information
(qemu) qemu-system-x86_64: virtio-blk missing headers
Thanks
Lei
On Sat, Oct 11, 2025 at 3:25 AM Farhan Ali <alifm@linux.ibm.com> wrote:
>
>
> On 10/10/2025 6:42 AM, Philippe Mathieu-Daudé wrote:
> > Replace compile-time #ifdef with a runtime check to ensure all code
> > paths are built and tested. This reduces build-time configuration
> > complexity and improves maintainability.
> >
> > No functional change intended.
> >
> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> > ---
> > include/hw/virtio/virtio-access.h | 6 +-----
> > hw/virtio/vhost.c | 7 +++----
> > 2 files changed, 4 insertions(+), 9 deletions(-)
> >
> > diff --git a/include/hw/virtio/virtio-access.h b/include/hw/virtio/virtio-access.h
> > index 07aae69042a..80328912ad3 100644
> > --- a/include/hw/virtio/virtio-access.h
> > +++ b/include/hw/virtio/virtio-access.h
> > @@ -149,11 +149,7 @@ static inline uint64_t virtio_ldq_p(VirtIODevice *vdev, const void *ptr)
> >
> > static inline uint16_t virtio_tswap16(VirtIODevice *vdev, uint16_t s)
> > {
> > -#if HOST_BIG_ENDIAN
> > - return virtio_access_is_big_endian(vdev) ? s : bswap16(s);
> > -#else
> > - return virtio_access_is_big_endian(vdev) ? bswap16(s) : s;
> > -#endif
> > + return HOST_BIG_ENDIAN ^ virtio_access_is_big_endian(vdev) ? s : bswap16(s);
>
> This patch breaks virtio devices(at least input/net devices) on s390x. I
> am not sure if ^ is the right check here? Changing the logic back to how
> it was fixes it for me.
>
> Thanks
>
> Farhan
>
> > }
> >
> > static inline uint16_t virtio_lduw_phys_cached(VirtIODevice *vdev,
> > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> > index 266a11514a1..6343477b42f 100644
> > --- a/hw/virtio/vhost.c
> > +++ b/hw/virtio/vhost.c
> > @@ -1168,11 +1168,10 @@ static inline bool vhost_needs_vring_endian(VirtIODevice *vdev)
> > if (virtio_vdev_has_feature(vdev, VIRTIO_F_VERSION_1)) {
> > return false;
> > }
> > -#if HOST_BIG_ENDIAN
> > - return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> > -#else
> > + if (HOST_BIG_ENDIAN) {
> > + return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_LITTLE;
> > + }
> > return vdev->device_endian == VIRTIO_DEVICE_ENDIAN_BIG;
> > -#endif
> > }
> >
> > static int vhost_virtqueue_set_vring_endian_legacy(struct vhost_dev *dev,
>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 03/16] ui: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check
2025-10-10 13:42 ` [PATCH 03/16] ui: " Philippe Mathieu-Daudé
@ 2025-10-13 11:57 ` Marc-André Lureau
0 siblings, 0 replies; 23+ messages in thread
From: Marc-André Lureau @ 2025-10-13 11:57 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, qemu-ppc, qemu-arm, qemu-riscv, qemu-s390x
[-- Attachment #1: Type: text/plain, Size: 2314 bytes --]
On Fri, Oct 10, 2025 at 5:42 PM Philippe Mathieu-Daudé <philmd@linaro.org>
wrote:
> Replace compile-time #ifdef with a runtime check to ensure all code
> paths are built and tested. This reduces build-time configuration
> complexity and improves maintainability.
>
> No functional change intended.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> ui/vdagent.c | 16 ++++++++--------
> ui/vnc.c | 6 +-----
> 2 files changed, 9 insertions(+), 13 deletions(-)
>
> diff --git a/ui/vdagent.c b/ui/vdagent.c
> index ddb91e75c64..66dc33567df 100644
> --- a/ui/vdagent.c
> +++ b/ui/vdagent.c
> @@ -660,14 +660,14 @@ static void vdagent_chr_open(Chardev *chr,
> VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(chr);
> ChardevQemuVDAgent *cfg = backend->u.qemu_vdagent.data;
>
> -#if HOST_BIG_ENDIAN
> - /*
> - * TODO: vdagent protocol is defined to be LE,
> - * so we have to byteswap everything on BE hosts.
> - */
> - error_setg(errp, "vdagent is not supported on bigendian hosts");
> - return;
> -#endif
> + if (HOST_BIG_ENDIAN) {
> + /*
> + * TODO: vdagent protocol is defined to be LE,
> + * so we have to byteswap everything on BE hosts.
> + */
> + error_setg(errp, "vdagent is not supported on bigendian hosts");
> + return;
> + }
>
> vd->mouse = VDAGENT_MOUSE_DEFAULT;
> if (cfg->has_mouse) {
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 77c823bf2e8..e93b5335690 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -2348,11 +2348,7 @@ static void pixel_format_message (VncState *vs) {
> vnc_write_u8(vs, vs->client_pf.bits_per_pixel); /* bits-per-pixel */
> vnc_write_u8(vs, vs->client_pf.depth); /* depth */
>
> -#if HOST_BIG_ENDIAN
> - vnc_write_u8(vs, 1); /* big-endian-flag */
> -#else
> - vnc_write_u8(vs, 0); /* big-endian-flag */
> -#endif
> + vnc_write_u8(vs, HOST_BIG_ENDIAN); /* big-endian-flag */
> vnc_write_u8(vs, 1); /* true-color-flag */
> vnc_write_u16(vs, vs->client_pf.rmax); /* red-max */
> vnc_write_u16(vs, vs->client_pf.gmax); /* green-max */
> --
> 2.51.0
>
>
[-- Attachment #2: Type: text/html, Size: 3197 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2025-10-13 11:58 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-10 13:42 [PATCH 00/16] overall: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 01/16] linux-user/arm: Checkpatch style cleanups Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 02/16] linux-user/arm: Replace HOST_BIG_ENDIAN #ifdef with runtime if() check Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 03/16] ui: " Philippe Mathieu-Daudé
2025-10-13 11:57 ` Marc-André Lureau
2025-10-10 13:42 ` [PATCH 04/16] net: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 05/16] disas: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 06/16] hw/core/loader: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 07/16] hw/display: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 08/16] hw/virtio: " Philippe Mathieu-Daudé
2025-10-10 19:23 ` Farhan Ali
2025-10-11 8:04 ` Lei Yang
2025-10-10 13:42 ` [PATCH 09/16] target/alpha: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 10/16] target/arm: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 11/16] target/mips: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 12/16] target/ppc: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 13/16] target/riscv: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 14/16] target/s390x: " Philippe Mathieu-Daudé
2025-10-10 13:56 ` David Hildenbrand
2025-10-10 13:42 ` [PATCH 15/16] target/sparc: " Philippe Mathieu-Daudé
2025-10-10 13:42 ` [PATCH 16/16] util/bitmap: " Philippe Mathieu-Daudé
2025-10-10 13:51 ` [PATCH 00/16] overall: " Paolo Bonzini
2025-10-10 14:37 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).