target/sparc: Avoid helper_raise_exception in helper_st_asi
Always use cpu_raise_exception_ra with GETPC for unwind. Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
186e78905a
commit
d9125cf27c
@ -1650,7 +1650,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||||||
int idx = ((asi & 2) >> 1) | ((asi & 8) >> 2);
|
int idx = ((asi & 2) >> 1) | ((asi & 8) >> 2);
|
||||||
env->dmmu.sun4v_tsb_pointers[idx] = val;
|
env->dmmu.sun4v_tsb_pointers[idx] = val;
|
||||||
} else {
|
} else {
|
||||||
helper_raise_exception(env, TT_ILL_INSN);
|
goto illegal_insn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x33:
|
case 0x33:
|
||||||
@ -1662,7 +1662,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||||||
*/
|
*/
|
||||||
env->dmmu.sun4v_ctx_config[(asi & 8) >> 3] = val;
|
env->dmmu.sun4v_ctx_config[(asi & 8) >> 3] = val;
|
||||||
} else {
|
} else {
|
||||||
helper_raise_exception(env, TT_ILL_INSN);
|
goto illegal_insn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x35:
|
case 0x35:
|
||||||
@ -1679,7 +1679,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||||||
int idx = ((asi & 2) >> 1) | ((asi & 8) >> 2);
|
int idx = ((asi & 2) >> 1) | ((asi & 8) >> 2);
|
||||||
env->immu.sun4v_tsb_pointers[idx] = val;
|
env->immu.sun4v_tsb_pointers[idx] = val;
|
||||||
} else {
|
} else {
|
||||||
helper_raise_exception(env, TT_ILL_INSN);
|
goto illegal_insn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x37:
|
case 0x37:
|
||||||
@ -1691,7 +1691,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||||||
*/
|
*/
|
||||||
env->immu.sun4v_ctx_config[(asi & 8) >> 3] = val;
|
env->immu.sun4v_ctx_config[(asi & 8) >> 3] = val;
|
||||||
} else {
|
} else {
|
||||||
helper_raise_exception(env, TT_ILL_INSN);
|
goto illegal_insn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ASI_UPA_CONFIG: /* UPA config */
|
case ASI_UPA_CONFIG: /* UPA config */
|
||||||
@ -1920,6 +1920,8 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||||||
default:
|
default:
|
||||||
sparc_raise_mmu_fault(cs, addr, true, false, 1, size, GETPC());
|
sparc_raise_mmu_fault(cs, addr, true, false, 1, size, GETPC());
|
||||||
return;
|
return;
|
||||||
|
illegal_insn:
|
||||||
|
cpu_raise_exception_ra(env, TT_ILL_INSN, GETPC());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_USER_ONLY */
|
#endif /* CONFIG_USER_ONLY */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user