diff options
author | Igor V. Kovalenko <igor.v.kovalenko@gmail.com> | 2010-01-07 23:28:10 +0300 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2010-01-08 17:14:11 +0000 |
commit | 1fae7b705f1e70b3636fcba1e660903898fad9c4 (patch) | |
tree | 4909600040d5390102051b6a62407e395c605648 | |
parent | 68e8a3f05ae21c7217d39bba76e120cbbb956bbd (diff) |
sparc64: use helper_wrpil to check pending irq on write
Signed-off-by: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r-- | target-sparc/helper.h | 1 | ||||
-rw-r--r-- | target-sparc/op_helper.c | 14 | ||||
-rw-r--r-- | target-sparc/translate.c | 5 |
3 files changed, 16 insertions, 4 deletions
diff --git a/target-sparc/helper.h b/target-sparc/helper.h index 4002b9ea49..6f103e7697 100644 --- a/target-sparc/helper.h +++ b/target-sparc/helper.h @@ -5,6 +5,7 @@ DEF_HELPER_0(rett, void) DEF_HELPER_1(wrpsr, void, tl) DEF_HELPER_0(rdpsr, tl) #else +DEF_HELPER_1(wrpil, void, tl) DEF_HELPER_1(wrpstate, void, tl) DEF_HELPER_0(done, void) DEF_HELPER_0(retry, void) diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c index 1d3adefe48..3d7f64c127 100644 --- a/target-sparc/op_helper.c +++ b/target-sparc/op_helper.c @@ -3303,6 +3303,20 @@ void helper_wrpstate(target_ulong new_state) change_pstate(new_state & 0xf3f); } +void helper_wrpil(target_ulong new_pil) +{ +#if !defined(CONFIG_USER_ONLY) + DPRINTF_PSTATE("helper_wrpil old=%x new=%x\n", + env->psrpil, (uint32_t)new_pil); + + env->psrpil = new_pil; + + if (cpu_interrupts_enabled(env)) { + cpu_check_irqs(env); + } +#endif +} + void helper_done(void) { trap_state* tsptr = cpu_tsptr(env); diff --git a/target-sparc/translate.c b/target-sparc/translate.c index bf6df50c8d..7e9f0cfe77 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -3371,10 +3371,7 @@ static void disas_sparc_insn(DisasContext * dc) offsetof(CPUSPARCState, tl)); break; case 8: // pil - tcg_gen_trunc_tl_i32(cpu_tmp32, cpu_tmp0); - tcg_gen_st_i32(cpu_tmp32, cpu_env, - offsetof(CPUSPARCState, - psrpil)); + gen_helper_wrpil(cpu_tmp0); break; case 9: // cwp gen_helper_wrcwp(cpu_tmp0); |