From: Mateja Marjanovic <mateja.marjano...@rt-rk.com> The implementation for ILVOD.D and ILVL.D instructions is equivalent, so use a single handler for both of them.
Suggested-by: Aleksandar Markovic <amarko...@wavecomp.com> Signed-off-by: Mateja Marjanovic <mateja.marjano...@rt-rk.com> --- target/mips/translate.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index 019a2c0..020a659 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -28310,19 +28310,6 @@ static inline void gen_ilvl_w(CPUMIPSState *env, uint32_t wd, } /* - * [MSA] ILVL.D wd, ws, wt - * - * Vector Interleave Left (doubleword data elements) - * - */ -static inline void gen_ilvl_d(CPUMIPSState *env, uint32_t wd, - uint32_t ws, uint32_t wt) -{ - tcg_gen_mov_i64(msa_wr_d[wd * 2], msa_wr_d[wt * 2 + 1]); - tcg_gen_mov_i64(msa_wr_d[wd * 2 + 1], msa_wr_d[ws * 2 + 1]); -} - -/* * [MSA] ILVOD.<B|H> wd, ws, wt * * Vector Interleave Odd (<byte|halfword> data elements) @@ -28388,9 +28375,15 @@ static inline void gen_ilvod_w(CPUMIPSState *env, uint32_t wd, * * Vector Interleave Odd (doubleword data elements) * + * [MSA] ILVL.D wd, ws, wt + * + * Vector Interleave Left (doubleword data elements) + * + * These two instructions are functionally equivalent. + * */ -static inline void gen_ilvod_d(CPUMIPSState *env, uint32_t wd, - uint32_t ws, uint32_t wt) +static inline void gen_ilvod_ilvl_d(CPUMIPSState *env, uint32_t wd, + uint32_t ws, uint32_t wt) { tcg_gen_mov_i64(msa_wr_d[wd * 2], msa_wr_d[wt * 2 + 1]); tcg_gen_mov_i64(msa_wr_d[wd * 2 + 1], msa_wr_d[ws * 2 + 1]); @@ -28603,7 +28596,7 @@ static void gen_msa_3r(CPUMIPSState *env, DisasContext *ctx) gen_ilvl_w(env, wd, ws, wt); break; case DF_DOUBLE: - gen_ilvl_d(env, wd, ws, wt); + gen_ilvod_ilvl_d(env, wd, ws, wt); break; default: assert(0); @@ -28699,7 +28692,7 @@ static void gen_msa_3r(CPUMIPSState *env, DisasContext *ctx) gen_ilvod_w(env, wd, ws, wt); break; case DF_DOUBLE: - gen_ilvod_d(env, wd, ws, wt); + gen_ilvod_ilvl_d(env, wd, ws, wt); break; default: assert(0); -- 2.7.4