[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 4/7] target/rx: Swap stack pointers on clrpsw/setpsw instruction
From: |
Richard Henderson |
Subject: |
[PULL 4/7] target/rx: Swap stack pointers on clrpsw/setpsw instruction |
Date: |
Thu, 21 Apr 2022 10:31:11 -0700 |
We properly perform this swap in helper_set_psw for MVTC,
but we missed doing so for the CLRPSW/SETPSW of the U bit.
Reported-by: Tomoaki Kawada <i@yvt.jp>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
Message-Id: <20220417165130.695085-5-richard.henderson@linaro.org>
---
target/rx/translate.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/target/rx/translate.c b/target/rx/translate.c
index bd4d110e8b..63c062993e 100644
--- a/target/rx/translate.c
+++ b/target/rx/translate.c
@@ -2165,7 +2165,12 @@ static inline void clrsetpsw(DisasContext *ctx, int cb,
int val)
ctx->base.is_jmp = DISAS_UPDATE;
break;
case PSW_U:
- tcg_gen_movi_i32(cpu_psw_u, val);
+ if (FIELD_EX32(ctx->tb_flags, PSW, U) != val) {
+ ctx->tb_flags = FIELD_DP32(ctx->tb_flags, PSW, U, val);
+ tcg_gen_movi_i32(cpu_psw_u, val);
+ tcg_gen_mov_i32(val ? cpu_isp : cpu_usp, cpu_sp);
+ tcg_gen_mov_i32(cpu_sp, val ? cpu_usp : cpu_isp);
+ }
break;
default:
qemu_log_mask(LOG_GUEST_ERROR, "Invalid distination %d", cb);
--
2.34.1
- [PULL 0/7] target/rx patch queue, Richard Henderson, 2022/04/21
- [PULL 1/7] target/rx: Put tb_flags into DisasContext, Richard Henderson, 2022/04/21
- [PULL 3/7] target/rx: Move DISAS_UPDATE check for write to PSW, Richard Henderson, 2022/04/21
- [PULL 4/7] target/rx: Swap stack pointers on clrpsw/setpsw instruction,
Richard Henderson <=
- [PULL 2/7] target/rx: Store PSW.U in tb->flags, Richard Henderson, 2022/04/21
- [PULL 5/7] hw/rx: rx-gdbsim DTB load address aligned of 16byte., Richard Henderson, 2022/04/21
- [PULL 6/7] target/rx: set PSW.I when executing wait instruction, Richard Henderson, 2022/04/21
- [PULL 7/7] target/rx: update PC correctly in wait instruction, Richard Henderson, 2022/04/21
- Re: [PULL 0/7] target/rx patch queue, Richard Henderson, 2022/04/21