static void gen_cp0 (CPUMIPSState *env, DisasContext *ctx, uint32_t opc, int rt, int rd)

{

    const char *opn = "ldst";




    switch (opc) {

    case OPC_MFC0:

        if (rt == 0) {

            /* Treat as NOP. */

            return;

        }

        gen_mfc0(env, ctx, cpu_gpr[rt], rd, ctx->opcode & 0x7);

        opn = "mfc0";

        break;

    case OPC_MTC0:

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, rt);

            gen_mtc0(env, ctx, t0, rd, ctx->opcode & 0x7);

            tcg_temp_free(t0);

        }

        opn = "mtc0";

        break;

#if defined(TARGET_MIPS64)

    case OPC_DMFC0:

        check_insn(env, ctx, ISA_MIPS3);

        if (rt == 0) {

            /* Treat as NOP. */

            return;

        }

        gen_dmfc0(env, ctx, cpu_gpr[rt], rd, ctx->opcode & 0x7);

        opn = "dmfc0";

        break;

    case OPC_DMTC0:

        check_insn(env, ctx, ISA_MIPS3);

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, rt);

            gen_dmtc0(env, ctx, t0, rd, ctx->opcode & 0x7);

            tcg_temp_free(t0);

        }

        opn = "dmtc0";

        break;

#endif

    case OPC_MFTR:

        check_insn(env, ctx, ASE_MT);

        if (rd == 0) {

            /* Treat as NOP. */

            return;

        }

        gen_mftr(env, ctx, rt, rd, (ctx->opcode >> 5) & 1,

                 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1);

        opn = "mftr";

        break;

    case OPC_MTTR:

        check_insn(env, ctx, ASE_MT);

        gen_mttr(env, ctx, rd, rt, (ctx->opcode >> 5) & 1,

                 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1);

        opn = "mttr";

        break;

    case OPC_TLBWI:

        opn = "tlbwi";

        if (!env->tlb->helper_tlbwi)

            goto die;

        gen_helper_tlbwi();

        break;

    case OPC_TLBWR:

        opn = "tlbwr";

        if (!env->tlb->helper_tlbwr)

            goto die;

        gen_helper_tlbwr();

        break;

    case OPC_TLBP:

        opn = "tlbp";

        if (!env->tlb->helper_tlbp)

            goto die;

        gen_helper_tlbp();

        break;

    case OPC_TLBR:

        opn = "tlbr";

        if (!env->tlb->helper_tlbr)

            goto die;

        gen_helper_tlbr();

        break;

    case OPC_ERET:

        opn = "eret";

        check_insn(env, ctx, ISA_MIPS2);

        gen_helper_eret();

        ctx->bstate = BS_EXCP;

        break;

    case OPC_DERET:

        opn = "deret";

        check_insn(env, ctx, ISA_MIPS32);

        if (!(ctx->hflags & MIPS_HFLAG_DM)) {

            MIPS_INVAL(opn);

            generate_exception(ctx, EXCP_RI);

        } else {

            gen_helper_deret();

            ctx->bstate = BS_EXCP;

        }

        break;

    case OPC_WAIT:

        opn = "wait";

        check_insn(env, ctx, ISA_MIPS3 | ISA_MIPS32);

        /* If we get an exception, we want to restart at next instruction */

        ctx->pc += 4;

        save_cpu_state(ctx, 1);

        ctx->pc -= 4;

        gen_helper_wait();

        ctx->bstate = BS_EXCP;

        break;

    default:

 die:

        MIPS_INVAL(opn);

        generate_exception(ctx, EXCP_RI);

        return;

    }

    (void)opn; /* avoid a compiler warning */

    MIPS_DEBUG("%s %s %d", opn, regnames[rt], rd);

}
static void gen_cp0 (CPUMIPSState *env, DisasContext *ctx, uint32_t opc, int rt, int rd)

{

    const char *opn = "ldst";




    switch (opc) {

    case OPC_MFC0:

        if (rt == 0) {

            

            return;

        }

        gen_mfc0(env, ctx, cpu_gpr[rt], rd, ctx->opcode & 0x7);

        opn = "mfc0";

        break;

    case OPC_MTC0:

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, rt);

            gen_mtc0(env, ctx, t0, rd, ctx->opcode & 0x7);

            tcg_temp_free(t0);

        }

        opn = "mtc0";

        break;

#if defined(TARGET_MIPS64)

    case OPC_DMFC0:

        check_insn(env, ctx, ISA_MIPS3);

        if (rt == 0) {

            

            return;

        }

        gen_dmfc0(env, ctx, cpu_gpr[rt], rd, ctx->opcode & 0x7);

        opn = "dmfc0";

        break;

    case OPC_DMTC0:

        check_insn(env, ctx, ISA_MIPS3);

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, rt);

            gen_dmtc0(env, ctx, t0, rd, ctx->opcode & 0x7);

            tcg_temp_free(t0);

        }

        opn = "dmtc0";

        break;

#endif

    case OPC_MFTR:

        check_insn(env, ctx, ASE_MT);

        if (rd == 0) {

            

            return;

        }

        gen_mftr(env, ctx, rt, rd, (ctx->opcode >> 5) & 1,

                 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1);

        opn = "mftr";

        break;

    case OPC_MTTR:

        check_insn(env, ctx, ASE_MT);

        gen_mttr(env, ctx, rd, rt, (ctx->opcode >> 5) & 1,

                 ctx->opcode & 0x7, (ctx->opcode >> 4) & 1);

        opn = "mttr";

        break;

    case OPC_TLBWI:

        opn = "tlbwi";

        if (!env->tlb->helper_tlbwi)

            goto die;

        gen_helper_tlbwi();

        break;

    case OPC_TLBWR:

        opn = "tlbwr";

        if (!env->tlb->helper_tlbwr)

            goto die;

        gen_helper_tlbwr();

        break;

    case OPC_TLBP:

        opn = "tlbp";

        if (!env->tlb->helper_tlbp)

            goto die;

        gen_helper_tlbp();

        break;

    case OPC_TLBR:

        opn = "tlbr";

        if (!env->tlb->helper_tlbr)

            goto die;

        gen_helper_tlbr();

        break;

    case OPC_ERET:

        opn = "eret";

        check_insn(env, ctx, ISA_MIPS2);

        gen_helper_eret();

        ctx->bstate = BS_EXCP;

        break;

    case OPC_DERET:

        opn = "deret";

        check_insn(env, ctx, ISA_MIPS32);

        if (!(ctx->hflags & MIPS_HFLAG_DM)) {

            MIPS_INVAL(opn);

            generate_exception(ctx, EXCP_RI);

        } else {

            gen_helper_deret();

            ctx->bstate = BS_EXCP;

        }

        break;

    case OPC_WAIT:

        opn = "wait";

        check_insn(env, ctx, ISA_MIPS3 | ISA_MIPS32);

        

        ctx->pc += 4;

        save_cpu_state(ctx, 1);

        ctx->pc -= 4;

        gen_helper_wait();

        ctx->bstate = BS_EXCP;

        break;

    default:

 die:

        MIPS_INVAL(opn);

        generate_exception(ctx, EXCP_RI);

        return;

    }

    (void)opn; 

    MIPS_DEBUG("%s %s %d", opn, regnames[rt], rd);

}
static void FUNC_0 (CPUMIPSState *VAR_0, DisasContext *VAR_1, uint32_t VAR_2, int VAR_3, int VAR_4)

{

    const char *VAR_5 = "ldst";




    switch (VAR_2) {

    case OPC_MFC0:

        if (VAR_3 == 0) {

            

            return;

        }

        gen_mfc0(VAR_0, VAR_1, cpu_gpr[VAR_3], VAR_4, VAR_1->opcode & 0x7);

        VAR_5 = "mfc0";

        break;

    case OPC_MTC0:

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, VAR_3);

            gen_mtc0(VAR_0, VAR_1, t0, VAR_4, VAR_1->opcode & 0x7);

            tcg_temp_free(t0);

        }

        VAR_5 = "mtc0";

        break;

#if defined(TARGET_MIPS64)

    case OPC_DMFC0:

        check_insn(VAR_0, VAR_1, ISA_MIPS3);

        if (VAR_3 == 0) {

            

            return;

        }

        gen_dmfc0(VAR_0, VAR_1, cpu_gpr[VAR_3], VAR_4, VAR_1->opcode & 0x7);

        VAR_5 = "dmfc0";

        break;

    case OPC_DMTC0:

        check_insn(VAR_0, VAR_1, ISA_MIPS3);

        {

            TCGv t0 = tcg_temp_new();



            gen_load_gpr(t0, VAR_3);

            gen_dmtc0(VAR_0, VAR_1, t0, VAR_4, VAR_1->opcode & 0x7);

            tcg_temp_free(t0);

        }

        VAR_5 = "dmtc0";

        break;

#endif

    case OPC_MFTR:

        check_insn(VAR_0, VAR_1, ASE_MT);

        if (VAR_4 == 0) {

            

            return;

        }

        gen_mftr(VAR_0, VAR_1, VAR_3, VAR_4, (VAR_1->opcode >> 5) & 1,

                 VAR_1->opcode & 0x7, (VAR_1->opcode >> 4) & 1);

        VAR_5 = "mftr";

        break;

    case OPC_MTTR:

        check_insn(VAR_0, VAR_1, ASE_MT);

        gen_mttr(VAR_0, VAR_1, VAR_4, VAR_3, (VAR_1->opcode >> 5) & 1,

                 VAR_1->opcode & 0x7, (VAR_1->opcode >> 4) & 1);

        VAR_5 = "mttr";

        break;

    case OPC_TLBWI:

        VAR_5 = "tlbwi";

        if (!VAR_0->tlb->helper_tlbwi)

            goto die;

        gen_helper_tlbwi();

        break;

    case OPC_TLBWR:

        VAR_5 = "tlbwr";

        if (!VAR_0->tlb->helper_tlbwr)

            goto die;

        gen_helper_tlbwr();

        break;

    case OPC_TLBP:

        VAR_5 = "tlbp";

        if (!VAR_0->tlb->helper_tlbp)

            goto die;

        gen_helper_tlbp();

        break;

    case OPC_TLBR:

        VAR_5 = "tlbr";

        if (!VAR_0->tlb->helper_tlbr)

            goto die;

        gen_helper_tlbr();

        break;

    case OPC_ERET:

        VAR_5 = "eret";

        check_insn(VAR_0, VAR_1, ISA_MIPS2);

        gen_helper_eret();

        VAR_1->bstate = BS_EXCP;

        break;

    case OPC_DERET:

        VAR_5 = "deret";

        check_insn(VAR_0, VAR_1, ISA_MIPS32);

        if (!(VAR_1->hflags & MIPS_HFLAG_DM)) {

            MIPS_INVAL(VAR_5);

            generate_exception(VAR_1, EXCP_RI);

        } else {

            gen_helper_deret();

            VAR_1->bstate = BS_EXCP;

        }

        break;

    case OPC_WAIT:

        VAR_5 = "wait";

        check_insn(VAR_0, VAR_1, ISA_MIPS3 | ISA_MIPS32);

        

        VAR_1->pc += 4;

        save_cpu_state(VAR_1, 1);

        VAR_1->pc -= 4;

        gen_helper_wait();

        VAR_1->bstate = BS_EXCP;

        break;

    default:

 die:

        MIPS_INVAL(VAR_5);

        generate_exception(VAR_1, EXCP_RI);

        return;

    }

    (void)VAR_5; 

    MIPS_DEBUG("%s %s %d", VAR_5, regnames[VAR_3], VAR_4);

}
static void FUNC_0 (CPUMIPSState *VAR_0, DisasContext *VAR_1, uint32_t VAR_2, int VAR_3, int VAR_4)
{ const char *VAR_5 = "ldst"; switch (VAR_2) { case OPC_MFC0:
if (VAR_3 == 0) { return; } gen_mfc0(VAR_0, VAR_1, cpu_gpr[VAR_3], VAR_4, VAR_1->opcode & 0x7); VAR_5 = "mfc0"; break; case OPC_MTC0:
{ TCGv t0 = tcg_temp_new(); gen_load_gpr(t0, VAR_3); gen_mtc0(VAR_0, VAR_1, t0, VAR_4, VAR_1->opcode & 0x7); tcg_temp_free(t0); } VAR_5 = "mtc0"; break; #if defined(TARGET_MIPS64)
case OPC_DMFC0:
check_insn(VAR_0, VAR_1, ISA_MIPS3); if (VAR_3 == 0) { return; } gen_dmfc0(VAR_0, VAR_1, cpu_gpr[VAR_3], VAR_4, VAR_1->opcode & 0x7); VAR_5 = "dmfc0"; break; case OPC_DMTC0:
check_insn(VAR_0, VAR_1, ISA_MIPS3); { TCGv t0 = tcg_temp_new(); gen_load_gpr(t0, VAR_3); gen_dmtc0(VAR_0, VAR_1, t0, VAR_4, VAR_1->opcode & 0x7); tcg_temp_free(t0); } VAR_5 = "dmtc0"; break; #endif
case OPC_MFTR:
check_insn(VAR_0, VAR_1, ASE_MT); if (VAR_4 == 0) { return; } gen_mftr(VAR_0, VAR_1, VAR_3, VAR_4, (VAR_1->opcode >> 5) & 1,
VAR_1->opcode & 0x7, (VAR_1->opcode >> 4) & 1); VAR_5 = "mftr"; break; case OPC_MTTR:
check_insn(VAR_0, VAR_1, ASE_MT); gen_mttr(VAR_0, VAR_1, VAR_4, VAR_3, (VAR_1->opcode >> 5) & 1,
VAR_1->opcode & 0x7, (VAR_1->opcode >> 4) & 1); VAR_5 = "mttr"; break; case OPC_TLBWI:
VAR_5 = "tlbwi"; if (!VAR_0->tlb->helper_tlbwi)
goto die; gen_helper_tlbwi(); break; case OPC_TLBWR:
VAR_5 = "tlbwr"; if (!VAR_0->tlb->helper_tlbwr)
goto die; gen_helper_tlbwr(); break; case OPC_TLBP:
VAR_5 = "tlbp"; if (!VAR_0->tlb->helper_tlbp)
goto die; gen_helper_tlbp(); break; case OPC_TLBR:
VAR_5 = "tlbr"; if (!VAR_0->tlb->helper_tlbr)
goto die; gen_helper_tlbr(); break; case OPC_ERET:
VAR_5 = "eret"; check_insn(VAR_0, VAR_1, ISA_MIPS2); gen_helper_eret(); VAR_1->bstate = BS_EXCP; break; case OPC_DERET:
VAR_5 = "deret"; check_insn(VAR_0, VAR_1, ISA_MIPS32); if (!(VAR_1->hflags & MIPS_HFLAG_DM)) { MIPS_INVAL(VAR_5); generate_exception(VAR_1, EXCP_RI); } else { gen_helper_deret(); VAR_1->bstate = BS_EXCP; } break; case OPC_WAIT:
VAR_5 = "wait"; check_insn(VAR_0, VAR_1, ISA_MIPS3 | ISA_MIPS32); VAR_1->pc += 4; save_cpu_state(VAR_1, 1); VAR_1->pc -= 4; gen_helper_wait(); VAR_1->bstate = BS_EXCP; break; default:
die:
MIPS_INVAL(VAR_5); generate_exception(VAR_1, EXCP_RI); return; } (void)VAR_5; MIPS_DEBUG("%s %s %d", VAR_5, regnames[VAR_3], VAR_4); }