From 296d8bd729bd5968955ba9c25d64a07a5ca00eaa Mon Sep 17 00:00:00 2001 From: Fredrik Noring Date: Sat, 10 Nov 2018 12:07:22 -0500 Subject: [PATCH] target/mips: Support R5900 DIV1 and DIVU1 instructions Backports commit be9c42c90d162100a63111ddeb8bfe50be897873 from qemu --- qemu/target/mips/translate.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/qemu/target/mips/translate.c b/qemu/target/mips/translate.c index 69a86ffb..9fa08d82 100644 --- a/qemu/target/mips/translate.c +++ b/qemu/target/mips/translate.c @@ -4653,11 +4653,14 @@ static void gen_muldiv(DisasContext *ctx, uint32_t opc, gen_load_gpr(ctx, t1, rt); if (acc != 0) { - check_dsp(ctx); + if (!(ctx->insn_flags & INSN_R5900)) { + check_dsp(ctx); + } } switch (opc) { case OPC_DIV: + case TX79_MMI_DIV1: { TCGv t2 = tcg_temp_new(tcg_ctx); TCGv t3 = tcg_temp_new(tcg_ctx); @@ -4679,6 +4682,7 @@ static void gen_muldiv(DisasContext *ctx, uint32_t opc, } break; case OPC_DIVU: + case TX79_MMI_DIVU1: { TCGv t2 = tcg_const_tl(tcg_ctx, 0); TCGv t3 = tcg_const_tl(tcg_ctx, 1); @@ -24816,6 +24820,10 @@ static void decode_tx79_mmi(CPUMIPSState *env, DisasContext *ctx) case TX79_MMI_MULTU1: gen_mul_txx9(ctx, opc, rd, rs, rt); break; + case TX79_MMI_DIV1: + case TX79_MMI_DIVU1: + gen_muldiv(ctx, opc, 1, rs, rt); + break; case TX79_MMI_MTLO1: case TX79_MMI_MTHI1: gen_HILO(ctx, opc, 1, rs); @@ -24827,8 +24835,6 @@ static void decode_tx79_mmi(CPUMIPSState *env, DisasContext *ctx) case TX79_MMI_MADD: /* TODO: TX79_MMI_MADD */ case TX79_MMI_MADDU: /* TODO: TX79_MMI_MADDU */ case TX79_MMI_PLZCW: /* TODO: TX79_MMI_PLZCW */ - case TX79_MMI_DIV1: /* TODO: TX79_MMI_DIV1 */ - case TX79_MMI_DIVU1: /* TODO: TX79_MMI_DIVU1 */ case TX79_MMI_MADD1: /* TODO: TX79_MMI_MADD1 */ case TX79_MMI_MADDU1: /* TODO: TX79_MMI_MADDU1 */ case TX79_MMI_PMFHL: /* TODO: TX79_MMI_PMFHL */