Revision 0cf5c677

b/target-m68k/op.c
338 338

  
339 339
OP(flush_flags)
340 340
{
341
    int cc_op  = PARAM1;
342
    if (cc_op == CC_OP_DYNAMIC)
343
        cc_op = env->cc_op;
344
    cpu_m68k_flush_flags(env, cc_op);
341
    cpu_m68k_flush_flags(env, env->cc_op);
345 342
    FORCE_RET();
346 343
}
347 344

  
......
480 477

  
481 478
OP(set_sr)
482 479
{
483
    env->sr = get_op(PARAM1);
480
    env->sr = get_op(PARAM1) & 0xffff;
484 481
    m68k_switch_sp(env);
485 482
    FORCE_RET();
486 483
}
b/target-m68k/op_helper.c
131 131

  
132 132
    vector = env->exception_index << 2;
133 133

  
134
    sp = env->aregs[7];
135

  
134 136
    fmt |= 0x40000000;
135 137
    fmt |= (sp & 3) << 28;
136 138
    fmt |= vector << 16;
......
143 145
    }
144 146
    m68k_switch_sp(env);
145 147

  
146
    sp = env->aregs[7];
147

  
148 148
    /* ??? This could cause MMU faults.  */
149 149
    sp &= ~3;
150 150
    sp -= 4;
b/target-m68k/translate.c
345 345
{
346 346
    if (s->cc_op == CC_OP_FLAGS)
347 347
        return;
348
    gen_op_flush_flags(s->cc_op);
348
    gen_flush_cc_op(s);
349
    gen_op_flush_flags();
349 350
    s->cc_op = CC_OP_FLAGS;
350 351
}
351 352

  

Also available in: Unified diff