tcg: Avoid stores to unaligned addresses
Avoid stores to unaligned addresses in TCG code generation, by using the usual memcpy() approach. (Using bswap.h would drag a lot of QEMU baggage into TCG, so it's simpler just to do direct memcpy() here.) Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
86360ad71d
commit
4387345a96
@ -125,21 +125,21 @@ static inline void tcg_out8(TCGContext *s, uint8_t v)
|
|||||||
static inline void tcg_out16(TCGContext *s, uint16_t v)
|
static inline void tcg_out16(TCGContext *s, uint16_t v)
|
||||||
{
|
{
|
||||||
uint8_t *p = s->code_ptr;
|
uint8_t *p = s->code_ptr;
|
||||||
*(uint16_t *)p = v;
|
memcpy(p, &v, sizeof(v));
|
||||||
s->code_ptr = p + 2;
|
s->code_ptr = p + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void tcg_out32(TCGContext *s, uint32_t v)
|
static inline void tcg_out32(TCGContext *s, uint32_t v)
|
||||||
{
|
{
|
||||||
uint8_t *p = s->code_ptr;
|
uint8_t *p = s->code_ptr;
|
||||||
*(uint32_t *)p = v;
|
memcpy(p, &v, sizeof(v));
|
||||||
s->code_ptr = p + 4;
|
s->code_ptr = p + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void tcg_out64(TCGContext *s, uint64_t v)
|
static inline void tcg_out64(TCGContext *s, uint64_t v)
|
||||||
{
|
{
|
||||||
uint8_t *p = s->code_ptr;
|
uint8_t *p = s->code_ptr;
|
||||||
*(uint64_t *)p = v;
|
memcpy(p, &v, sizeof(v));
|
||||||
s->code_ptr = p + 8;
|
s->code_ptr = p + 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user