qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: Richard Henderson <richard.henderson@linaro.org>, qemu-devel@nongnu.org
Cc: sw@weilnetz.de, alex.bennee@linaro.org
Subject: Re: [PATCH v5 13/57] tcg/tci: Reuse tci_args_l for goto_tb
Date: Wed, 17 Mar 2021 01:28:06 +0100	[thread overview]
Message-ID: <7f95b318-3c99-a867-2d87-e2329a14f4b1@amsat.org> (raw)
In-Reply-To: <20210311143958.562625-14-richard.henderson@linaro.org>

On 3/11/21 3:39 PM, Richard Henderson wrote:
> Convert to indirect jumps, as it's less complicated.
> Then we just have a pointer to the tb address at which
> the chain is stored, from which we read.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  tcg/tci/tcg-target.h     | 11 +++--------
>  tcg/tci.c                |  8 +++-----
>  tcg/tci/tcg-target.c.inc | 13 +++----------
>  3 files changed, 9 insertions(+), 23 deletions(-)
> 
> diff --git a/tcg/tci/tcg-target.h b/tcg/tci/tcg-target.h
> index 9c0021a26f..9285c930a2 100644
> --- a/tcg/tci/tcg-target.h
> +++ b/tcg/tci/tcg-target.h
> @@ -87,7 +87,7 @@
>  #define TCG_TARGET_HAS_muluh_i32        0
>  #define TCG_TARGET_HAS_mulsh_i32        0
>  #define TCG_TARGET_HAS_goto_ptr         0
> -#define TCG_TARGET_HAS_direct_jump      1
> +#define TCG_TARGET_HAS_direct_jump      0
>  #define TCG_TARGET_HAS_qemu_st8_i32     0
>  
>  #if TCG_TARGET_REG_BITS == 64
> @@ -174,12 +174,7 @@ void tci_disas(uint8_t opc);
>  
>  #define TCG_TARGET_HAS_MEMORY_BSWAP     1
>  
> -static inline void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jmp_rx,
> -                                            uintptr_t jmp_rw, uintptr_t addr)
> -{
> -    /* patch the branch destination */
> -    qatomic_set((int32_t *)jmp_rw, addr - (jmp_rx + 4));
> -    /* no need to flush icache explicitly */
> -}
> +/* not defined -- call should be eliminated at compile time */
> +void tb_target_set_jmp_target(uintptr_t, uintptr_t, uintptr_t, uintptr_t);
>  
>  #endif /* TCG_TARGET_H */
> diff --git a/tcg/tci.c b/tcg/tci.c
> index 6fbbc48ecf..3fe0831b33 100644
> --- a/tcg/tci.c
> +++ b/tcg/tci.c
> @@ -816,13 +816,11 @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchState *env,
>              return (uintptr_t)ptr;
>  
>          case INDEX_op_goto_tb:
> -            /* Jump address is aligned */
> -            tb_ptr = QEMU_ALIGN_PTR_UP(tb_ptr, 4);
> -            t0 = qatomic_read((int32_t *)tb_ptr);
> -            tb_ptr += sizeof(int32_t);
> +            tci_args_l(&tb_ptr, &ptr);
>              tci_assert(tb_ptr == old_code_ptr + op_size);
> -            tb_ptr += (int32_t)t0;
> +            tb_ptr = *(void **)ptr;
>              continue;
> +
>          case INDEX_op_qemu_ld_i32:
>              t0 = *tb_ptr++;
>              taddr = tci_read_ulong(regs, &tb_ptr);
> diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc
> index ff8040510f..2c64b4f617 100644
> --- a/tcg/tci/tcg-target.c.inc
> +++ b/tcg/tci/tcg-target.c.inc
> @@ -405,16 +405,9 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
>          break;
>  
>      case INDEX_op_goto_tb:
> -        if (s->tb_jmp_insn_offset) {
> -            /* Direct jump method. */
> -            /* Align for atomic patching and thread safety */
> -            s->code_ptr = QEMU_ALIGN_PTR_UP(s->code_ptr, 4);
> -            s->tb_jmp_insn_offset[args[0]] = tcg_current_code_size(s);
> -            tcg_out32(s, 0);
> -        } else {
> -            /* Indirect jump method. */
> -            TODO();
> -        }
> +        tcg_debug_assert(s->tb_jmp_insn_offset == 0);
> +        /* indirect jump method. */
> +        tcg_out_i(s, (uintptr_t)(s->tb_jmp_target_addr + args[0]));
>          set_jmp_reset_offset(s, args[0]);
>          break;
> 

Lovely KISS!

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


  reply	other threads:[~2021-03-17  0:29 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 14:39 [PATCH v5 00/57] TCI fixes and cleanups Richard Henderson
2021-03-11 14:39 ` [PATCH v5 01/57] tcg/tci: Remove ifdefs for TCG_TARGET_HAS_ext32[us]_i64 Richard Henderson
2021-03-11 16:05   ` Stefan Weil
2021-03-11 14:39 ` [PATCH v5 02/57] tcg/tci: Rename tci_read_r to tci_read_rval Richard Henderson
2021-03-16 22:46   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 03/57] tcg/tci: Split out tci_args_rrs Richard Henderson
2021-03-16 22:50   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 04/57] tcg/tci: Split out tci_args_rr Richard Henderson
2021-03-16 22:51   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 05/57] tcg/tci: Split out tci_args_rrr Richard Henderson
2021-03-16 22:53   ` Philippe Mathieu-Daudé
2021-03-17  3:38     ` Richard Henderson
2021-03-11 14:39 ` [PATCH v5 06/57] tcg/tci: Split out tci_args_rrrc Richard Henderson
2021-03-16 22:55   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 07/57] tcg/tci: Split out tci_args_l Richard Henderson
2021-03-16 22:56   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 08/57] tcg/tci: Split out tci_args_rrrrrc Richard Henderson
2021-03-16 22:58   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 09/57] tcg/tci: Split out tci_args_rrcl and tci_args_rrrrcl Richard Henderson
2021-03-16 23:00   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 10/57] tcg/tci: Split out tci_args_ri and tci_args_rI Richard Henderson
2021-03-16 23:52   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 11/57] tcg/tci: Reuse tci_args_l for calls Richard Henderson
2021-03-16 23:04   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 12/57] tcg/tci: Reuse tci_args_l for exit_tb Richard Henderson
2021-03-16 23:05   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 13/57] tcg/tci: Reuse tci_args_l for goto_tb Richard Henderson
2021-03-17  0:28   ` Philippe Mathieu-Daudé [this message]
2021-03-11 14:39 ` [PATCH v5 14/57] tcg/tci: Split out tci_args_rrrrrr Richard Henderson
2021-03-16 23:07   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 15/57] tcg/tci: Split out tci_args_rrrr Richard Henderson
2021-03-16 23:46   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 16/57] tcg/tci: Clean up deposit operations Richard Henderson
2021-03-17  0:32   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 17/57] tcg/tci: Reduce qemu_ld/st TCGMemOpIdx operand to 32-bits Richard Henderson
2021-03-16 23:10   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 18/57] tcg/tci: Split out tci_args_{rrm,rrrm,rrrrm} Richard Henderson
2021-03-16 23:14   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 19/57] tcg/tci: Hoist op_size checking into tci_args_* Richard Henderson
2021-03-16 22:23   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 20/57] tcg/tci: Remove tci_disas Richard Henderson
2021-03-16 22:24   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 21/57] tcg/tci: Implement the disassembler properly Richard Henderson
2021-03-17  0:38   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 22/57] tcg: Build ffi data structures for helpers Richard Henderson
2021-03-16 22:35   ` Philippe Mathieu-Daudé
2021-03-17  3:51     ` Richard Henderson
2021-03-11 14:39 ` [PATCH v5 23/57] tcg/tci: Use ffi for calls Richard Henderson
2021-03-11 14:39 ` [PATCH v5 24/57] tcg/tci: Improve tcg_target_call_clobber_regs Richard Henderson
2021-03-11 14:39 ` [PATCH v5 25/57] tcg/tci: Move call-return regs to end of tcg_target_reg_alloc_order Richard Henderson
2021-03-11 14:39 ` [PATCH v5 26/57] tcg/tci: Push opcode emit into each case Richard Henderson
2021-03-16 22:39   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 27/57] tcg/tci: Split out tcg_out_op_rrs Richard Henderson
2021-03-17 15:03   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 28/57] tcg/tci: Split out tcg_out_op_l Richard Henderson
2021-03-16 23:17   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 29/57] tcg/tci: Split out tcg_out_op_p Richard Henderson
2021-03-16 23:18   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 30/57] tcg/tci: Split out tcg_out_op_rr Richard Henderson
2021-03-16 23:45   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 31/57] tcg/tci: Split out tcg_out_op_rrr Richard Henderson
2021-03-16 23:27   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 32/57] tcg/tci: Split out tcg_out_op_rrrc Richard Henderson
2021-03-16 23:27   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 33/57] tcg/tci: Split out tcg_out_op_rrrrrc Richard Henderson
2021-03-16 23:28   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 34/57] tcg/tci: Split out tcg_out_op_rrrbb Richard Henderson
2021-03-16 23:29   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 35/57] tcg/tci: Split out tcg_out_op_rrcl Richard Henderson
2021-03-16 23:30   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 36/57] tcg/tci: Split out tcg_out_op_rrrrrr Richard Henderson
2021-03-16 23:30   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 37/57] tcg/tci: Split out tcg_out_op_rrrr Richard Henderson
2021-03-16 23:31   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 38/57] tcg/tci: Split out tcg_out_op_rrrrcl Richard Henderson
2021-03-16 23:31   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 39/57] tcg/tci: Split out tcg_out_op_{rrm,rrrm,rrrrm} Richard Henderson
2021-03-16 23:43   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 40/57] tcg/tci: Split out tcg_out_op_v Richard Henderson
2021-03-16 23:41   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 41/57] tcg/tci: Split out tcg_out_op_np Richard Henderson
2021-03-16 23:33   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 42/57] tcg/tci: Split out tcg_out_op_r[iI] Richard Henderson
2021-03-16 23:39   ` Philippe Mathieu-Daudé
2021-03-17  3:59     ` Richard Henderson
2021-03-17 17:15       ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 43/57] tcg/tci: Reserve r13 for a temporary Richard Henderson
2021-03-11 14:39 ` [PATCH v5 44/57] tcg/tci: Emit setcond before brcond Richard Henderson
2021-03-11 14:39 ` [PATCH v5 45/57] tcg/tci: Remove tci_write_reg Richard Henderson
2021-03-11 14:39 ` [PATCH v5 46/57] tcg/tci: Change encoding to uint32_t units Richard Henderson
2021-03-11 14:39 ` [PATCH v5 47/57] tcg/tci: Implement goto_ptr Richard Henderson
2021-03-11 14:39 ` [PATCH v5 48/57] tcg/tci: Implement movcond Richard Henderson
2021-03-11 14:39 ` [PATCH v5 49/57] tcg/tci: Implement andc, orc, eqv, nand, nor Richard Henderson
2021-03-11 14:39 ` [PATCH v5 50/57] tcg/tci: Implement extract, sextract Richard Henderson
2021-03-11 14:39 ` [PATCH v5 51/57] tcg/tci: Implement clz, ctz, ctpop Richard Henderson
2021-03-11 14:39 ` [PATCH v5 52/57] tcg/tci: Implement mulu2, muls2 Richard Henderson
2021-03-16 22:44   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 53/57] tcg/tci: Implement add2, sub2 Richard Henderson
2021-03-11 14:39 ` [PATCH v5 54/57] tcg/tci: Split out tci_qemu_ld, tci_qemu_st Richard Henderson
2021-03-11 14:39 ` [PATCH v5 55/57] tests/tcg: Increase timeout for TCI Richard Henderson
2021-03-11 14:39 ` [PATCH v5 56/57] gitlab: Rename ACCEL_CONFIGURE_OPTS to EXTRA_CONFIGURE_OPTS Richard Henderson
2021-05-27 15:56   ` Philippe Mathieu-Daudé
2021-03-11 14:39 ` [PATCH v5 57/57] gitlab: Enable cross-i386 builds of TCI Richard Henderson
2021-05-27 15:57   ` Philippe Mathieu-Daudé
2021-03-11 15:28 ` [PATCH v5 00/57] TCI fixes and cleanups no-reply
2021-03-17  0:23 ` Philippe Mathieu-Daudé
2021-03-17  0:41 ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7f95b318-3c99-a867-2d87-e2329a14f4b1@amsat.org \
    --to=f4bug@amsat.org \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=sw@weilnetz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).