target/hppa: fix do_stdby_e()
stdby,e,m was writing data from the wrong half of the register
into memory for cases 0-3.
Fixes: 25460fc5a7
("target/hppa: Implement STDBY")
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20240319161921.487080-7-svens@stackframe.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
b5e0b3a53c
commit
518d2f4300
@ -281,17 +281,17 @@ static void do_stdby_e(CPUHPPAState *env, target_ulong addr, uint64_t val,
|
||||
case 3:
|
||||
/* The 3 byte store must appear atomic. */
|
||||
if (parallel) {
|
||||
atomic_store_mask32(env, addr - 3, val, 0xffffff00u, ra);
|
||||
atomic_store_mask32(env, addr - 3, val >> 32, 0xffffff00u, ra);
|
||||
} else {
|
||||
cpu_stw_data_ra(env, addr - 3, val >> 16, ra);
|
||||
cpu_stb_data_ra(env, addr - 1, val >> 8, ra);
|
||||
cpu_stw_data_ra(env, addr - 3, val >> 48, ra);
|
||||
cpu_stb_data_ra(env, addr - 1, val >> 40, ra);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
cpu_stw_data_ra(env, addr - 2, val >> 16, ra);
|
||||
cpu_stw_data_ra(env, addr - 2, val >> 48, ra);
|
||||
break;
|
||||
case 1:
|
||||
cpu_stb_data_ra(env, addr - 1, val >> 24, ra);
|
||||
cpu_stb_data_ra(env, addr - 1, val >> 56, ra);
|
||||
break;
|
||||
default:
|
||||
/* Nothing is stored, but protection is checked and the
|
||||
|
Loading…
Reference in New Issue
Block a user