Skip to content

Commit

Permalink
target/hppa: Mask reserved PSW bits in expand_sm_imm
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
hdeller authored and rth7680 committed Nov 12, 2023
1 parent 6968074 commit 881d107
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions target/hppa/translate.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,14 @@ typedef struct DisasContext {
/* Note that ssm/rsm instructions number PSW_W and PSW_E differently. */
static int expand_sm_imm(DisasContext *ctx, int val)
{
if (val & PSW_SM_E) {
val = (val & ~PSW_SM_E) | PSW_E;
}
if (val & PSW_SM_W) {
val = (val & ~PSW_SM_W) | PSW_W;
/* Keep unimplemented bits disabled -- see cpu_hppa_put_psw. */
if (ctx->is_pa20) {
if (val & PSW_SM_W) {
val |= PSW_W;
}
val &= ~(PSW_SM_W | PSW_SM_E | PSW_G);
} else {
val &= ~(PSW_SM_W | PSW_SM_E | PSW_O);
}
return val;
}
Expand Down

0 comments on commit 881d107

Please sign in to comment.