From: Mateja Marjanovic <[email protected]> The implementation for ILVOD.D and ILVL.D instructions is equivalent, so use a single handler for both of them.
Suggested-by: Aleksandar Markovic <[email protected]> Signed-off-by: Mateja Marjanovic <[email protected]> --- 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 c6aa995..4837c43 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -28154,19 +28154,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) @@ -28232,9 +28219,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]); @@ -28447,7 +28440,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); @@ -28543,7 +28536,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
