From 0cf5c6771b216793d1fe57d25864d842570f32f6 Mon Sep 17 00:00:00 2001 From: pbrook Date: Sat, 9 Jun 2007 20:48:46 +0000 Subject: M68K status register fixes. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2967 c046a42c-6fe2-441c-8c8c-71466251a162 --- target-m68k/op.c | 7 ++----- target-m68k/op_helper.c | 4 ++-- target-m68k/translate.c | 3 ++- 3 files changed, 6 insertions(+), 8 deletions(-) (limited to 'target-m68k') diff --git a/target-m68k/op.c b/target-m68k/op.c index 932c994..466fdc2 100644 --- a/target-m68k/op.c +++ b/target-m68k/op.c @@ -338,10 +338,7 @@ OP(ext16s32) OP(flush_flags) { - int cc_op = PARAM1; - if (cc_op == CC_OP_DYNAMIC) - cc_op = env->cc_op; - cpu_m68k_flush_flags(env, cc_op); + cpu_m68k_flush_flags(env, env->cc_op); FORCE_RET(); } @@ -480,7 +477,7 @@ OP(fp_result) OP(set_sr) { - env->sr = get_op(PARAM1); + env->sr = get_op(PARAM1) & 0xffff; m68k_switch_sp(env); FORCE_RET(); } diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c index 4c423ca..39cd5d7 100644 --- a/target-m68k/op_helper.c +++ b/target-m68k/op_helper.c @@ -131,6 +131,8 @@ void do_interrupt(int is_hw) vector = env->exception_index << 2; + sp = env->aregs[7]; + fmt |= 0x40000000; fmt |= (sp & 3) << 28; fmt |= vector << 16; @@ -143,8 +145,6 @@ void do_interrupt(int is_hw) } m68k_switch_sp(env); - sp = env->aregs[7]; - /* ??? This could cause MMU faults. */ sp &= ~3; sp -= 4; diff --git a/target-m68k/translate.c b/target-m68k/translate.c index 1c0e431..ad8faad 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -345,7 +345,8 @@ static inline void gen_flush_flags(DisasContext *s) { if (s->cc_op == CC_OP_FLAGS) return; - gen_op_flush_flags(s->cc_op); + gen_flush_cc_op(s); + gen_op_flush_flags(); s->cc_op = CC_OP_FLAGS; } -- cgit v1.1