Browse Source

include/tcg/tcg-op.h: eradicate TARGET_INSN_START_EXTRA_WORDS

This commit removes TARGET_INSN_START_EXTRA_WORDS and force all arch to
call the same version of tcg_gen_insn_start, with additional 0 arguments
if needed. Since all arch have a single call site (in translate.c), this
is as good documentation as having a single define.

The notable exception is target/arm, which has two different translate
files for 32/64 bits. Since it's the only one, we accept to have two
call sites for this.

As well, we update parameter type to use uint64_t instead of
target_ulong, so it can be called from common code.

Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Message-id: 20260219040150.2098396-15-pierrick.bouvier@linaro.org
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
master
Pierrick Bouvier 6 months ago
committed by Peter Maydell
parent
commit
10059583c7
  1. 8
      include/tcg/tcg-op-common.h
  2. 29
      include/tcg/tcg-op.h
  3. 2
      target/alpha/cpu-param.h
  4. 4
      target/alpha/translate.c
  5. 7
      target/arm/cpu-param.h
  6. 2
      target/avr/cpu-param.h
  7. 2
      target/avr/translate.c
  8. 2
      target/hexagon/cpu-param.h
  9. 2
      target/hexagon/translate.c
  10. 2
      target/hppa/cpu-param.h
  11. 2
      target/i386/cpu-param.h
  12. 2
      target/i386/tcg/translate.c
  13. 2
      target/loongarch/cpu-param.h
  14. 2
      target/loongarch/tcg/translate.c
  15. 2
      target/m68k/cpu-param.h
  16. 2
      target/m68k/translate.c
  17. 2
      target/microblaze/cpu-param.h
  18. 2
      target/microblaze/translate.c
  19. 2
      target/mips/cpu-param.h
  20. 2
      target/or1k/cpu-param.h
  21. 2
      target/or1k/translate.c
  22. 2
      target/ppc/cpu-param.h
  23. 2
      target/ppc/translate.c
  24. 7
      target/riscv/cpu-param.h
  25. 2
      target/rx/cpu-param.h
  26. 2
      target/rx/translate.c
  27. 2
      target/s390x/cpu-param.h
  28. 2
      target/sh4/cpu-param.h
  29. 4
      target/sh4/translate.c
  30. 2
      target/sparc/cpu-param.h
  31. 2
      target/sparc/translate.c
  32. 2
      target/tricore/cpu-param.h
  33. 2
      target/tricore/translate.c
  34. 2
      target/xtensa/cpu-param.h
  35. 2
      target/xtensa/translate.c

8
include/tcg/tcg-op-common.h

@ -30,6 +30,14 @@ TCGv_i64 tcg_global_mem_new_i64(TCGv_ptr reg, intptr_t off, const char *name);
TCGv_ptr tcg_global_mem_new_ptr(TCGv_ptr reg, intptr_t off, const char *name);
/* Generic ops. */
static inline void tcg_gen_insn_start(uint64_t pc, uint64_t a1,
uint64_t a2)
{
TCGOp *op = tcg_emit_op(INDEX_op_insn_start, INSN_START_WORDS);
tcg_set_insn_start_param(op, 0, pc);
tcg_set_insn_start_param(op, 1, a1);
tcg_set_insn_start_param(op, 2, a2);
}
void gen_set_label(TCGLabel *l);
void tcg_gen_br(TCGLabel *l);

29
include/tcg/tcg-op.h

@ -28,35 +28,6 @@
# error Mismatch with insn-start-words.h
#endif
#if TARGET_INSN_START_EXTRA_WORDS == 0
static inline void tcg_gen_insn_start(target_ulong pc)
{
TCGOp *op = tcg_emit_op(INDEX_op_insn_start, INSN_START_WORDS);
tcg_set_insn_start_param(op, 0, pc);
tcg_set_insn_start_param(op, 1, 0);
tcg_set_insn_start_param(op, 2, 0);
}
#elif TARGET_INSN_START_EXTRA_WORDS == 1
static inline void tcg_gen_insn_start(target_ulong pc, target_ulong a1)
{
TCGOp *op = tcg_emit_op(INDEX_op_insn_start, INSN_START_WORDS);
tcg_set_insn_start_param(op, 0, pc);
tcg_set_insn_start_param(op, 1, a1);
tcg_set_insn_start_param(op, 2, 0);
}
#elif TARGET_INSN_START_EXTRA_WORDS == 2
static inline void tcg_gen_insn_start(target_ulong pc, target_ulong a1,
target_ulong a2)
{
TCGOp *op = tcg_emit_op(INDEX_op_insn_start, INSN_START_WORDS);
tcg_set_insn_start_param(op, 0, pc);
tcg_set_insn_start_param(op, 1, a1);
tcg_set_insn_start_param(op, 2, a2);
}
#else
#error Unhandled TARGET_INSN_START_EXTRA_WORDS value
#endif
#if TARGET_LONG_BITS == 32
typedef TCGv_i32 TCGv;
#define tcg_temp_new() tcg_temp_new_i32()

2
target/alpha/cpu-param.h

@ -24,6 +24,4 @@
# define TARGET_VIRT_ADDR_SPACE_BITS (30 + TARGET_PAGE_BITS)
#endif
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

4
target/alpha/translate.c

@ -2899,9 +2899,9 @@ static void alpha_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
DisasContext *ctx = container_of(dcbase, DisasContext, base);
if (ctx->pcrel) {
tcg_gen_insn_start(dcbase->pc_next & ~TARGET_PAGE_MASK);
tcg_gen_insn_start(dcbase->pc_next & ~TARGET_PAGE_MASK, 0, 0);
} else {
tcg_gen_insn_start(dcbase->pc_next);
tcg_gen_insn_start(dcbase->pc_next, 0, 0);
}
}

7
target/arm/cpu-param.h

@ -32,11 +32,4 @@
# define TARGET_PAGE_BITS_LEGACY 10
#endif /* !CONFIG_USER_ONLY */
/*
* ARM-specific extra insn start words:
* 1: Conditional execution bits
* 2: Partial exception syndrome for data aborts
*/
#define TARGET_INSN_START_EXTRA_WORDS 2
#endif

2
target/avr/cpu-param.h

@ -25,6 +25,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 24
#define TARGET_VIRT_ADDR_SPACE_BITS 24
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/avr/translate.c

@ -2689,7 +2689,7 @@ static void avr_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->npc);
tcg_gen_insn_start(ctx->npc, 0, 0);
}
static void avr_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)

2
target/hexagon/cpu-param.h

@ -23,6 +23,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 36
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/hexagon/translate.c

@ -998,7 +998,7 @@ static void hexagon_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->base.pc_next);
tcg_gen_insn_start(ctx->base.pc_next, 0, 0);
}
static bool pkt_crosses_page(CPUHexagonState *env, DisasContext *ctx)

2
target/hppa/cpu-param.h

@ -19,6 +19,4 @@
#define TARGET_PAGE_BITS 12
#define TARGET_INSN_START_EXTRA_WORDS 2
#endif

2
target/i386/cpu-param.h

@ -22,6 +22,4 @@
#endif
#define TARGET_PAGE_BITS 12
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

2
target/i386/tcg/translate.c

@ -3501,7 +3501,7 @@ static void i386_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
if (tb_cflags(dcbase->tb) & CF_PCREL) {
pc_arg &= ~TARGET_PAGE_MASK;
}
tcg_gen_insn_start(pc_arg, dc->cc_op);
tcg_gen_insn_start(pc_arg, dc->cc_op, 0);
}
static void i386_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)

2
target/loongarch/cpu-param.h

@ -13,6 +13,4 @@
#define TARGET_PAGE_BITS 12
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/loongarch/tcg/translate.c

@ -159,7 +159,7 @@ static void loongarch_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->base.pc_next);
tcg_gen_insn_start(ctx->base.pc_next, 0, 0);
}
/*

2
target/m68k/cpu-param.h

@ -17,6 +17,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 32
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

2
target/m68k/translate.c

@ -6041,7 +6041,7 @@ static void m68k_tr_tb_start(DisasContextBase *dcbase, CPUState *cpu)
static void m68k_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
{
DisasContext *dc = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(dc->base.pc_next, dc->cc_op);
tcg_gen_insn_start(dc->base.pc_next, dc->cc_op, 0);
}
static void m68k_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)

2
target/microblaze/cpu-param.h

@ -27,6 +27,4 @@
/* FIXME: MB uses variable pages down to 1K but linux only uses 4k. */
#define TARGET_PAGE_BITS 12
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

2
target/microblaze/translate.c

@ -1630,7 +1630,7 @@ static void mb_tr_insn_start(DisasContextBase *dcb, CPUState *cs)
{
DisasContext *dc = container_of(dcb, DisasContext, base);
tcg_gen_insn_start(dc->base.pc_next, dc->tb_flags & ~MSR_TB_MASK);
tcg_gen_insn_start(dc->base.pc_next, dc->tb_flags & ~MSR_TB_MASK, 0);
}
static void mb_tr_translate_insn(DisasContextBase *dcb, CPUState *cs)

2
target/mips/cpu-param.h

@ -20,6 +20,4 @@
#endif
#define TARGET_PAGE_BITS 12
#define TARGET_INSN_START_EXTRA_WORDS 2
#endif

2
target/or1k/cpu-param.h

@ -12,6 +12,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 32
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

2
target/or1k/translate.c

@ -1552,7 +1552,7 @@ static void openrisc_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
DisasContext *dc = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(dc->base.pc_next, (dc->delayed_branch ? 1 : 0)
| (dc->base.num_insns > 1 ? 2 : 0));
| (dc->base.num_insns > 1 ? 2 : 0), 0);
}
static void openrisc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)

2
target/ppc/cpu-param.h

@ -37,6 +37,4 @@
# define TARGET_PAGE_BITS 12
#endif
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/ppc/translate.c

@ -6575,7 +6575,7 @@ static void ppc_tr_tb_start(DisasContextBase *db, CPUState *cs)
static void ppc_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
{
tcg_gen_insn_start(dcbase->pc_next);
tcg_gen_insn_start(dcbase->pc_next, 0, 0);
}
static bool is_prefix_insn(DisasContext *ctx, uint32_t insn)

7
target/riscv/cpu-param.h

@ -17,13 +17,6 @@
#endif
#define TARGET_PAGE_BITS 12 /* 4 KiB Pages */
/*
* RISC-V-specific extra insn start words:
* 1: Original instruction opcode
* 2: more information about instruction
*/
#define TARGET_INSN_START_EXTRA_WORDS 2
/*
* The current MMU Modes are:
* - U mode 0b000

2
target/rx/cpu-param.h

@ -24,6 +24,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 32
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/rx/translate.c

@ -2217,7 +2217,7 @@ static void rx_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->base.pc_next);
tcg_gen_insn_start(ctx->base.pc_next, 0, 0);
}
static void rx_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)

2
target/s390x/cpu-param.h

@ -12,6 +12,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 64
#define TARGET_VIRT_ADDR_SPACE_BITS 64
#define TARGET_INSN_START_EXTRA_WORDS 2
#endif

2
target/sh4/cpu-param.h

@ -16,6 +16,4 @@
# define TARGET_VIRT_ADDR_SPACE_BITS 32
#endif
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

4
target/sh4/translate.c

@ -2181,7 +2181,7 @@ static void decode_gusa(DisasContext *ctx, CPUSH4State *env)
* tb->icount * insn_start.
*/
for (i = 1; i < max_insns; ++i) {
tcg_gen_insn_start(pc + i * 2, ctx->envflags);
tcg_gen_insn_start(pc + i * 2, ctx->envflags, 0);
ctx->base.insn_start = tcg_last_op();
}
}
@ -2241,7 +2241,7 @@ static void sh4_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->base.pc_next, ctx->envflags);
tcg_gen_insn_start(ctx->base.pc_next, ctx->envflags, 0);
}
static void sh4_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)

2
target/sparc/cpu-param.h

@ -21,6 +21,4 @@
# define TARGET_VIRT_ADDR_SPACE_BITS 32
#endif
#define TARGET_INSN_START_EXTRA_WORDS 1
#endif

2
target/sparc/translate.c

@ -5735,7 +5735,7 @@ static void sparc_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
g_assert_not_reached();
}
}
tcg_gen_insn_start(dc->pc, npc);
tcg_gen_insn_start(dc->pc, npc, 0);
}
static void sparc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)

2
target/tricore/cpu-param.h

@ -12,6 +12,4 @@
#define TARGET_PHYS_ADDR_SPACE_BITS 32
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/tricore/translate.c

@ -8410,7 +8410,7 @@ static void tricore_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
tcg_gen_insn_start(ctx->base.pc_next);
tcg_gen_insn_start(ctx->base.pc_next, 0, 0);
}
static bool insn_crosses_page(DisasContext *ctx, CPUTriCoreState *env)

2
target/xtensa/cpu-param.h

@ -16,6 +16,4 @@
#define TARGET_VIRT_ADDR_SPACE_BITS 32
#endif
#define TARGET_INSN_START_EXTRA_WORDS 0
#endif

2
target/xtensa/translate.c

@ -1159,7 +1159,7 @@ static void xtensa_tr_tb_start(DisasContextBase *dcbase, CPUState *cpu)
static void xtensa_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
{
tcg_gen_insn_start(dcbase->pc_next);
tcg_gen_insn_start(dcbase->pc_next, 0, 0);
}
static void xtensa_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)

Loading…
Cancel
Save