mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
target/sh4: Fix TB_FLAG_UNALIGN
The value previously chosen overlaps GUSA_MASK.
Rename all DELAY_SLOT_* and GUSA_* defines to emphasize
that they are included in TB_FLAGs. Add aliases for the
FPSCR and SR bits that are included in TB_FLAGS, so that
we don't accidentally reassign those bits.
Fixes: 4da06fb306
("target/sh4: Implement prctl_unalign_sigbus")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/856
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
20add58829
commit
ab419fd8a0
5 changed files with 88 additions and 76 deletions
|
@ -147,11 +147,11 @@ void superh_cpu_do_interrupt(CPUState *cs)
|
|||
env->sr |= (1u << SR_BL) | (1u << SR_MD) | (1u << SR_RB);
|
||||
env->lock_addr = -1;
|
||||
|
||||
if (env->flags & DELAY_SLOT_MASK) {
|
||||
if (env->flags & TB_FLAG_DELAY_SLOT_MASK) {
|
||||
/* Branch instruction should be executed again before delay slot. */
|
||||
env->spc -= 2;
|
||||
/* Clear flags for exception/interrupt routine. */
|
||||
env->flags &= ~DELAY_SLOT_MASK;
|
||||
env->flags &= ~TB_FLAG_DELAY_SLOT_MASK;
|
||||
}
|
||||
|
||||
if (do_exp) {
|
||||
|
@ -786,7 +786,7 @@ bool superh_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
|||
CPUSH4State *env = &cpu->env;
|
||||
|
||||
/* Delay slots are indivisible, ignore interrupts */
|
||||
if (env->flags & DELAY_SLOT_MASK) {
|
||||
if (env->flags & TB_FLAG_DELAY_SLOT_MASK) {
|
||||
return false;
|
||||
} else {
|
||||
superh_cpu_do_interrupt(cs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue