target/arm: Move neon_element_offset to translate.c
This will shortly have users outside of translate-neon.c.inc. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20201030022618.785675-3-richard.henderson@linaro.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
015ee81a4c
commit
7ec85c0283
@ -60,25 +60,6 @@ static inline int neon_3same_fp_size(DisasContext *s, int x)
|
||||
#include "decode-neon-ls.c.inc"
|
||||
#include "decode-neon-shared.c.inc"
|
||||
|
||||
/* Return the offset of a 2**SIZE piece of a NEON register, at index ELE,
|
||||
* where 0 is the least significant end of the register.
|
||||
*/
|
||||
static inline long
|
||||
neon_element_offset(int reg, int element, MemOp size)
|
||||
{
|
||||
int element_size = 1 << size;
|
||||
int ofs = element * element_size;
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
/* Calculate the offset assuming fully little-endian,
|
||||
* then XOR to account for the order of the 8-byte units.
|
||||
*/
|
||||
if (element_size < 8) {
|
||||
ofs ^= 8 - element_size;
|
||||
}
|
||||
#endif
|
||||
return neon_full_reg_offset(reg) + ofs;
|
||||
}
|
||||
|
||||
static void neon_load_element(TCGv_i32 var, int reg, int ele, MemOp mop)
|
||||
{
|
||||
long offset = neon_element_offset(reg, ele, mop & MO_SIZE);
|
||||
|
@ -1102,6 +1102,26 @@ static long neon_full_reg_offset(unsigned reg)
|
||||
return offsetof(CPUARMState, vfp.zregs[reg >> 1].d[reg & 1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the offset of a 2**SIZE piece of a NEON register, at index ELE,
|
||||
* where 0 is the least significant end of the register.
|
||||
*/
|
||||
static long neon_element_offset(int reg, int element, MemOp size)
|
||||
{
|
||||
int element_size = 1 << size;
|
||||
int ofs = element * element_size;
|
||||
#ifdef HOST_WORDS_BIGENDIAN
|
||||
/*
|
||||
* Calculate the offset assuming fully little-endian,
|
||||
* then XOR to account for the order of the 8-byte units.
|
||||
*/
|
||||
if (element_size < 8) {
|
||||
ofs ^= 8 - element_size;
|
||||
}
|
||||
#endif
|
||||
return neon_full_reg_offset(reg) + ofs;
|
||||
}
|
||||
|
||||
static inline long vfp_reg_offset(bool dp, unsigned reg)
|
||||
{
|
||||
if (dp) {
|
||||
|
Loading…
Reference in New Issue
Block a user