On Fri, 27 Feb 2026 at 12:55, Martin Kröning
<[email protected]> wrote:
>
> These functions are needed to support semihosting on CPUs that support
> runtime-configurable endianness. They should not be used in other contexts.
>
> Signed-off-by: Martin Kröning <[email protected]>
> ---
> include/exec/tswap.h | 36 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 36 insertions(+)
>
> diff --git a/include/exec/tswap.h b/include/exec/tswap.h
> index 9e94fa0021..6d9301129d 100644
> --- a/include/exec/tswap.h
> +++ b/include/exec/tswap.h
> @@ -10,6 +10,7 @@
>
> #include "qemu/bswap.h"
> #include "qemu/target-info.h"
> +#include "hw/core/cpu.h"
>
> /*
> * If we're in target-specific code, we can hard-code the swapping
> @@ -72,4 +73,39 @@ static inline void tswap64s(uint64_t *s)
> }
> #endif
>
> +/*
> + * If we're in semihosting code, have to swap depending on the currently
> + * configured endianness of the CPU. These functions should not be used in
> + * other contexts.
> + */
> +#define cpu_internal_needs_bswap(cpu) \
> + (HOST_BIG_ENDIAN != cpu_internal_is_big_endian(cpu))
> +
> +static inline uint16_t cpu_internal_tswap16(CPUState *cpu, uint16_t s)
> +{
> + if (target_needs_bswap() || cpu_internal_needs_bswap(cpu)) {
I don't think these should have the target_needs_bswap()
check in them. Otherwise for a normally big-endian CPU on
a little-endian host where the CPU is currently in
little-endian mode, target_needs_bswap() will return true
and we'll swap the data, even though we should not
(because cpu_internal_needs_bswap() returns false).
> + return bswap16(s);
> + } else {
> + return s;
> + }
> +}
> +
> +static inline uint32_t cpu_internal_tswap32(CPUState *cpu, uint32_t s)
> +{
> + if (target_needs_bswap() || cpu_internal_needs_bswap(cpu)) {
> + return bswap32(s);
> + } else {
> + return s;
> + }
> +}
> +
> +static inline uint64_t cpu_internal_tswap64(CPUState *cpu, uint64_t s)
> +{
> + if (target_needs_bswap() || cpu_internal_needs_bswap(cpu)) {
> + return bswap64(s);
> + } else {
> + return s;
> + }
> +}
thanks
-- PMM