Revision 16c00cb2

b/target-mips/op.c
1365 1365
        !(env->hflags & MIPS_HFLAG_DM) &&
1366 1366
        (val & (1 << CP0St_UM)))
1367 1367
        env->hflags |= MIPS_HFLAG_UM;
1368
    env->CP0_Status = val;
1368
    env->CP0_Status = (env->CP0_Status & ~0xF878FF17) | val;
1369 1369
    if (loglevel & CPU_LOG_EXEC)
1370 1370
        CALL_FROM_TB2(do_mtc0_status_debug, old, val);
1371 1371
    CALL_FROM_TB1(cpu_mips_update_irq, env);
......
2181 2181
    RETURN();
2182 2182
}
2183 2183

  
2184
void op_interrupt_restart (void)
2185
{
2186
    if (!(env->CP0_Status & (1 << CP0St_EXL)) &&
2187
        !(env->CP0_Status & (1 << CP0St_ERL)) &&
2188
        !(env->hflags & MIPS_HFLAG_DM) &&
2189
        (env->CP0_Status & (1 << CP0St_IE)) &&
2190
        (env->CP0_Status & env->CP0_Cause & CP0Ca_IP_mask)) {
2191
        env->CP0_Cause &= ~(0x1f << CP0Ca_EC);
2192
        CALL_FROM_TB1(do_raise_exception, EXCP_EXT_INTERRUPT);
2193
    }
2194
    RETURN();
2195
}
2196

  
2184 2197
void op_raise_exception (void)
2185 2198
{
2186 2199
    CALL_FROM_TB1(do_raise_exception, PARAM1);
b/target-mips/translate.c
5234 5234
    if (env->singlestep_enabled) {
5235 5235
        save_cpu_state(ctxp, ctx.bstate == BS_NONE);
5236 5236
        gen_op_debug();
5237
        goto done_generating;
5238
    }
5239
    else if (ctx.bstate != BS_BRANCH && ctx.bstate != BS_EXCP) {
5240
        save_cpu_state(ctxp, 0);
5241
        gen_goto_tb(&ctx, 0, ctx.pc);
5237
    } else {
5238
	switch (ctx.bstate) {
5239
        case BS_EXCP:
5240
            gen_op_interrupt_restart();
5241
            break;
5242
        case BS_STOP:
5243
            gen_op_interrupt_restart();
5244
            /* Fall through. */
5245
        case BS_NONE:
5246
            save_cpu_state(ctxp, 0);
5247
            gen_goto_tb(&ctx, 0, ctx.pc);
5248
            break;
5249
        case BS_BRANCH:
5250
        default:
5251
            break;
5252
	}
5253
        gen_op_reset_T0();
5254
        /* Generate the return instruction. */
5255
        gen_op_exit_tb();
5242 5256
    }
5243
    gen_op_reset_T0();
5244
    /* Generate the return instruction */
5245
    gen_op_exit_tb();
5246 5257
done_generating:
5247 5258
    *gen_opc_ptr = INDEX_op_end;
5248 5259
    if (search_pc) {

Also available in: Unified diff