mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
include/exec: Provide the cpu_internal_tswap() functions
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 <martin.kroening@eonerc.rwth-aachen.de> Message-id: 20260311-semihosting-cpu-tswap-v3-2-8e239575ec08@eonerc.rwth-aachen.de Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
committed by
Peter Maydell
parent
95b1f7cfd1
commit
c24e94fd15
@@ -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 (cpu_internal_needs_bswap(cpu)) {
|
||||
return bswap16(s);
|
||||
} else {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
static inline uint32_t cpu_internal_tswap32(CPUState *cpu, uint32_t s)
|
||||
{
|
||||
if (cpu_internal_needs_bswap(cpu)) {
|
||||
return bswap32(s);
|
||||
} else {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
static inline uint64_t cpu_internal_tswap64(CPUState *cpu, uint64_t s)
|
||||
{
|
||||
if (cpu_internal_needs_bswap(cpu)) {
|
||||
return bswap64(s);
|
||||
} else {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* TSWAP_H */
|
||||
|
||||
Reference in New Issue
Block a user