[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/12] target/openrisc: fix icount handling for timer instructions
From: |
Paolo Bonzini |
Subject: |
[PULL 08/12] target/openrisc: fix icount handling for timer instructions |
Date: |
Thu, 1 Apr 2021 13:22:19 +0200 |
From: Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru>
This patch adds icount handling to mfspr/mtspr instructions
that may deal with hardware timers.
Signed-off-by: Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru>
Message-Id: <161700376169.1135890.8707223959310729949.stgit@pasha-ThinkPad-X280>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Acked-by: Stafford Horne <shorne@gmail.com>
---
target/openrisc/translate.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c
index c6dce879f1..a9c81f8bd5 100644
--- a/target/openrisc/translate.c
+++ b/target/openrisc/translate.c
@@ -884,6 +884,18 @@ static bool trans_l_mfspr(DisasContext *dc, arg_l_mfspr *a)
gen_illegal_exception(dc);
} else {
TCGv spr = tcg_temp_new();
+
+ if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
+ gen_io_start();
+ if (dc->delayed_branch) {
+ tcg_gen_mov_tl(cpu_pc, jmp_pc);
+ tcg_gen_discard_tl(jmp_pc);
+ } else {
+ tcg_gen_movi_tl(cpu_pc, dc->base.pc_next + 4);
+ }
+ dc->base.is_jmp = DISAS_EXIT;
+ }
+
tcg_gen_ori_tl(spr, cpu_R(dc, a->a), a->k);
gen_helper_mfspr(cpu_R(dc, a->d), cpu_env, cpu_R(dc, a->d), spr);
tcg_temp_free(spr);
@@ -898,6 +910,9 @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a)
} else {
TCGv spr;
+ if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
+ gen_io_start();
+ }
/* For SR, we will need to exit the TB to recognize the new
* exception state. For NPC, in theory this counts as a branch
* (although the SPR only exists for use by an ICE). Save all
--
2.30.1
- [PULL 01/12] meson: Propagate gnutls dependency to migration, (continued)
- [PULL 01/12] meson: Propagate gnutls dependency to migration, Paolo Bonzini, 2021/04/01
- [PULL 07/12] replay: notify CPU on event, Paolo Bonzini, 2021/04/01
- [PULL 04/12] replay: fix recursive checkpoints, Paolo Bonzini, 2021/04/01
- [PULL 09/12] configure: Do not use default_feature for EXESUF, Paolo Bonzini, 2021/04/01
- [PULL 03/12] qapi: qom: do not use target-specific conditionals, Paolo Bonzini, 2021/04/01
- [PULL 06/12] icount: get rid of static variable, Paolo Bonzini, 2021/04/01
- [PULL 10/12] hexagon: do not specify executables as inputs, Paolo Bonzini, 2021/04/01
- [PULL 02/12] target/i386: Verify memory operand for lcall and ljmp, Paolo Bonzini, 2021/04/01
- [PULL 12/12] docs: Add a QEMU Code of Conduct and Conflict Resolution Policy document, Paolo Bonzini, 2021/04/01
- [PULL 11/12] hexagon: do not specify Python scripts as inputs, Paolo Bonzini, 2021/04/01
- [PULL 08/12] target/openrisc: fix icount handling for timer instructions,
Paolo Bonzini <=
- [PULL 05/12] Revert "qom: use qemu_printf to print help for user-creatable objects", Paolo Bonzini, 2021/04/01
- Re: [PULL 00/12] Misc patches for QEMU 6.0-rc2, Peter Maydell, 2021/04/01