From: David Hildenbrand Date: Mon, 25 Feb 2019 20:03:15 +0000 (+0100) Subject: s390x/tcg: Factor out vec_full_reg_offset() X-Git-Tag: v4.0.0-rc0~66^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=27197fec128d5ee97ec060f99b95df2c48668783;p=thirdparty%2Fqemu.git s390x/tcg: Factor out vec_full_reg_offset() We'll use that a lot along with gvec helpers, to calculate the start address of a vector. Reviewed-by: Thomas Huth Reviewed-by: Richard Henderson Signed-off-by: David Hildenbrand Message-Id: <20190225200318.16102-5-david@redhat.com> Signed-off-by: Cornelia Huck --- diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 6647a67998b..933bf29331a 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -145,13 +145,18 @@ void s390x_translate_init(void) } } +static inline int vec_full_reg_offset(uint8_t reg) +{ + g_assert(reg < 32); + return offsetof(CPUS390XState, vregs[reg][0].d); +} + static inline int vec_reg_offset(uint8_t reg, uint8_t enr, TCGMemOp es) { /* Convert element size (es) - e.g. MO_8 - to bytes */ const uint8_t bytes = 1 << es; int offs = enr * bytes; - g_assert(reg < 32); /* * vregs[n][0] is the lowest 8 byte and vregs[n][1] the highest 8 byte * of the 16 byte vector, on both, little and big endian systems. @@ -178,7 +183,7 @@ static inline int vec_reg_offset(uint8_t reg, uint8_t enr, TCGMemOp es) #ifndef HOST_WORDS_BIGENDIAN offs ^= (8 - bytes); #endif - return offs + offsetof(CPUS390XState, vregs[reg][0].d); + return offs + vec_full_reg_offset(reg); } static inline int freg64_offset(uint8_t reg)