target-arm: A64: Fix vector register access on bigendian hosts
commite2f90565e7b3e2824fffcfcbcecf86205a1f14e2
authorPeter Maydell <peter.maydell@linaro.org>
Sat, 4 Jan 2014 22:15:49 +0000 (4 22:15 +0000)
committerPeter Maydell <peter.maydell@linaro.org>
Wed, 8 Jan 2014 19:07:21 +0000 (8 19:07 +0000)
tree042c154924257992fb2e5c22953b2c8099bfafbb
parentf6d8a31440c523de15f88a186b9e6daacab17054
target-arm: A64: Fix vector register access on bigendian hosts

The A64 128 bit vector registers are stored as a pair of
uint64_t values in the register array. This means that if
we're directly loading or storing a value of size less than
64 bits we must adjust the offset appropriately to account
for whether the host is bigendian or not. Provide utility
functions to abstract away the offsetof() calculations for
the FP registers.

For do_fp_st() we can sidestep most of the issues for 64 bit
and smaller reg-to-mem transfers by always doing a 64 bit
load from the register and writing just the piece we need
to memory.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <rth@twiddle.net>
target-arm/translate-a64.c