mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
target/hppa: Mask reserved PSW bits in expand_sm_imm
The system mask is a restricted subset of the psw, with only a couple of reserved bits. It is better to handle this up front in the translator than require helper_swap_system_mask to use cpu_hppa_get_psw and cpu_hppa_put_psw. Signed-off-by: Helge Deller <deller@gmx.de> [rth: Handle this in expand_sm_imm not helper_swap_system_mask.] Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
69680740ea
commit
881d1073d0
1 changed files with 8 additions and 5 deletions
|
@ -77,11 +77,14 @@ typedef struct DisasContext {
|
||||||
/* Note that ssm/rsm instructions number PSW_W and PSW_E differently. */
|
/* Note that ssm/rsm instructions number PSW_W and PSW_E differently. */
|
||||||
static int expand_sm_imm(DisasContext *ctx, int val)
|
static int expand_sm_imm(DisasContext *ctx, int val)
|
||||||
{
|
{
|
||||||
if (val & PSW_SM_E) {
|
/* Keep unimplemented bits disabled -- see cpu_hppa_put_psw. */
|
||||||
val = (val & ~PSW_SM_E) | PSW_E;
|
if (ctx->is_pa20) {
|
||||||
}
|
if (val & PSW_SM_W) {
|
||||||
if (val & PSW_SM_W) {
|
val |= PSW_W;
|
||||||
val = (val & ~PSW_SM_W) | PSW_W;
|
}
|
||||||
|
val &= ~(PSW_SM_W | PSW_SM_E | PSW_G);
|
||||||
|
} else {
|
||||||
|
val &= ~(PSW_SM_W | PSW_SM_E | PSW_O);
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue