[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 07/26] target/i386: Introduce DISAS_EOB*
From: |
Richard Henderson |
Subject: |
[PATCH v3 07/26] target/i386: Introduce DISAS_EOB* |
Date: |
Sat, 1 Oct 2022 07:09:16 -0700 |
Add a few DISAS_TARGET_* aliases to reduce the number of
calls to gen_eob() and gen_eob_inhibit_irq(). So far,
only update i386_tr_translate_insn for exiting the block
because of single-step or previous inhibit irq.
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/i386/tcg/translate.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index 4c1548da8e..caa22af5a7 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -132,6 +132,10 @@ typedef struct DisasContext {
TCGOp *prev_insn_end;
} DisasContext;
+#define DISAS_EOB_ONLY DISAS_TARGET_0
+#define DISAS_EOB_NEXT DISAS_TARGET_1
+#define DISAS_EOB_INHIBIT_IRQ DISAS_TARGET_2
+
/* The environment in which user-only runs is constrained. */
#ifdef CONFIG_USER_ONLY
#define PE(S) true
@@ -8849,7 +8853,7 @@ static void i386_tr_translate_insn(DisasContextBase
*dcbase, CPUState *cpu)
* the flag and abort the translation to give the irqs a
* chance to happen.
*/
- dc->base.is_jmp = DISAS_TOO_MANY;
+ dc->base.is_jmp = DISAS_EOB_NEXT;
} else if (!is_same_page(&dc->base, pc_next)) {
dc->base.is_jmp = DISAS_TOO_MANY;
}
@@ -8861,9 +8865,24 @@ static void i386_tr_tb_stop(DisasContextBase *dcbase,
CPUState *cpu)
{
DisasContext *dc = container_of(dcbase, DisasContext, base);
- if (dc->base.is_jmp == DISAS_TOO_MANY) {
+ switch (dc->base.is_jmp) {
+ case DISAS_NORETURN:
+ break;
+ case DISAS_TOO_MANY:
+ case DISAS_EOB_NEXT:
+ gen_update_cc_op(dc);
gen_update_eip_cur(dc);
+ /* fall through */
+ case DISAS_EOB_ONLY:
gen_eob(dc);
+ break;
+ case DISAS_EOB_INHIBIT_IRQ:
+ gen_update_cc_op(dc);
+ gen_update_eip_cur(dc);
+ gen_eob_inhibit_irq(dc, true);
+ break;
+ default:
+ g_assert_not_reached();
}
}
--
2.34.1
- [PATCH v3 00/26] target/i386: pc-relative translation blocks, Richard Henderson, 2022/10/01
- [PATCH v3 01/26] target/i386: Remove pc_start, Richard Henderson, 2022/10/01
- [PATCH v3 07/26] target/i386: Introduce DISAS_EOB*,
Richard Henderson <=
- [PATCH v3 08/26] target/i386: Use DISAS_EOB* in gen_movl_seg_T0, Richard Henderson, 2022/10/01
- [PATCH v3 05/26] target/i386: Create gen_update_eip_cur, Richard Henderson, 2022/10/01
- [PATCH v3 02/26] target/i386: Return bool from disas_insn, Richard Henderson, 2022/10/01
- [PATCH v3 09/26] target/i386: Use DISAS_EOB_NEXT, Richard Henderson, 2022/10/01
- [PATCH v3 10/26] target/i386: USe DISAS_EOB_ONLY, Richard Henderson, 2022/10/01
- [PATCH v3 06/26] target/i386: Create gen_update_eip_next, Richard Henderson, 2022/10/01
- [PATCH v3 03/26] target/i386: Remove cur_eip argument to gen_exception, Richard Henderson, 2022/10/01
- [PATCH v3 11/26] target/i386: Create cur_insn_len, cur_insn_len_i32, Richard Henderson, 2022/10/01
- [PATCH v3 04/26] target/i386: Remove cur_eip, next_eip arguments to gen_interrupt, Richard Henderson, 2022/10/01
- [PATCH v3 12/26] target/i386: Remove cur_eip, next_eip arguments to gen_repz*, Richard Henderson, 2022/10/01