From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Emilio G. Cota" <cota@braap.org>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
Richard Henderson <rth@twiddle.net>,
Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Andrzej Zaborowski <balrogg@gmail.com>,
Aurelien Jarno <aurelien@aurel32.net>,
Alexander Graf <agraf@suse.de>, Stefan Weil <sw@weilnetz.de>,
qemu-arm@nongnu.org, Pranith Kumar <bobby.prani+qemu@gmail.com>
Subject: Re: [PATCH v3 03/10] tcg: export tcg_gen_lookup_and_goto_ptr
Date: Wed, 26 Apr 2017 11:33:46 +0100 [thread overview]
Message-ID: <87d1bz8nlh.fsf@linaro.org> (raw)
In-Reply-To: <1493187803-4510-4-git-send-email-cota@braap.org>
Emilio G. Cota <cota@braap.org> writes:
> Instead of exporting goto_ptr directly to TCG frontends, export
> tcg_gen_lookup_and_goto_ptr(), which calls goto_ptr with the pointer
> returned by the lookup_tb_ptr() helper. This is the only use case
> we have for goto_ptr and lookup_tb_ptr, so having this function is
> very convenient. Furthermore, it trivially allows us to avoid calling
> the lookup helper if goto_ptr is not implemented by the backend.
>
> Signed-off-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tcg/README | 8 ++++++++
> tcg/tcg-op.c | 13 +++++++++++++
> tcg/tcg-op.h | 11 +++++++++++
> 3 files changed, 32 insertions(+)
>
> diff --git a/tcg/README b/tcg/README
> index a9858c2..bf49e82 100644
> --- a/tcg/README
> +++ b/tcg/README
> @@ -477,6 +477,14 @@ current TB was linked to this TB. Otherwise execute the next
> instructions. Only indices 0 and 1 are valid and tcg_gen_goto_tb may be issued
> at most once with each slot index per TB.
>
> +* lookup_and_goto_ptr tb_addr
> +
> +Look up a TB address ('tb_addr') and jump to it if valid. If not valid,
> +jump to the TCG epilogue to go back to the exec loop.
> +
> +This operation is optional. If the TCG backend does not implement the
> +goto_ptr opcode, emitting this op is equivalent to emitting exit_tb(0).
> +
> * qemu_ld_i32/i64 t0, t1, flags, memidx
> * qemu_st_i32/i64 t0, t1, flags, memidx
>
> diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
> index 95a39b7..8ff1eaf 100644
> --- a/tcg/tcg-op.c
> +++ b/tcg/tcg-op.c
> @@ -2587,6 +2587,19 @@ void tcg_gen_goto_tb(unsigned idx)
> tcg_gen_op1i(INDEX_op_goto_tb, idx);
> }
>
> +void tcg_gen_lookup_and_goto_ptr(TCGv addr)
> +{
> + if (TCG_TARGET_HAS_goto_ptr) {
> + TCGv_ptr ptr = tcg_temp_new_ptr();
> +
> + gen_helper_lookup_tb_ptr(ptr, tcg_ctx.tcg_env, addr);
> + tcg_gen_op1i(INDEX_op_goto_ptr, GET_TCGV_PTR(ptr));
> + tcg_temp_free_ptr(ptr);
> + } else {
> + tcg_gen_exit_tb(0);
> + }
> +}
> +
> static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
> {
> /* Trigger the asserts within as early as possible. */
> diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
> index c68e300..5d3278f 100644
> --- a/tcg/tcg-op.h
> +++ b/tcg/tcg-op.h
> @@ -796,6 +796,17 @@ static inline void tcg_gen_exit_tb(uintptr_t val)
> */
> void tcg_gen_goto_tb(unsigned idx);
>
> +/**
> + * tcg_gen_lookup_and_goto_ptr() - look up a TB and jump to it if valid
> + * @addr: Guest address of the target TB
> + *
> + * If the TB is not valid, jump to the epilogue.
> + *
> + * This operation is optional. If the TCG backend does not implement goto_ptr,
> + * this op is equivalent to calling tcg_gen_exit_tb() with 0 as the argument.
> + */
> +void tcg_gen_lookup_and_goto_ptr(TCGv addr);
> +
> #if TARGET_LONG_BITS == 32
> #define tcg_temp_new() tcg_temp_new_i32()
> #define tcg_global_reg_new tcg_global_reg_new_i32
--
Alex Bennée
WARNING: multiple messages have this Message-ID (diff)
From: "Alex Bennée" <alex.bennee@linaro.org>
To: "Emilio G. Cota" <cota@braap.org>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>,
Richard Henderson <rth@twiddle.net>,
Peter Maydell <peter.maydell@linaro.org>,
Eduardo Habkost <ehabkost@redhat.com>,
Andrzej Zaborowski <balrogg@gmail.com>,
Aurelien Jarno <aurelien@aurel32.net>,
Alexander Graf <agraf@suse.de>, Stefan Weil <sw@weilnetz.de>,
qemu-arm@nongnu.org, Pranith Kumar <bobby.prani+qemu@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v3 03/10] tcg: export tcg_gen_lookup_and_goto_ptr
Date: Wed, 26 Apr 2017 11:33:46 +0100 [thread overview]
Message-ID: <87d1bz8nlh.fsf@linaro.org> (raw)
In-Reply-To: <1493187803-4510-4-git-send-email-cota@braap.org>
Emilio G. Cota <cota@braap.org> writes:
> Instead of exporting goto_ptr directly to TCG frontends, export
> tcg_gen_lookup_and_goto_ptr(), which calls goto_ptr with the pointer
> returned by the lookup_tb_ptr() helper. This is the only use case
> we have for goto_ptr and lookup_tb_ptr, so having this function is
> very convenient. Furthermore, it trivially allows us to avoid calling
> the lookup helper if goto_ptr is not implemented by the backend.
>
> Signed-off-by: Emilio G. Cota <cota@braap.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tcg/README | 8 ++++++++
> tcg/tcg-op.c | 13 +++++++++++++
> tcg/tcg-op.h | 11 +++++++++++
> 3 files changed, 32 insertions(+)
>
> diff --git a/tcg/README b/tcg/README
> index a9858c2..bf49e82 100644
> --- a/tcg/README
> +++ b/tcg/README
> @@ -477,6 +477,14 @@ current TB was linked to this TB. Otherwise execute the next
> instructions. Only indices 0 and 1 are valid and tcg_gen_goto_tb may be issued
> at most once with each slot index per TB.
>
> +* lookup_and_goto_ptr tb_addr
> +
> +Look up a TB address ('tb_addr') and jump to it if valid. If not valid,
> +jump to the TCG epilogue to go back to the exec loop.
> +
> +This operation is optional. If the TCG backend does not implement the
> +goto_ptr opcode, emitting this op is equivalent to emitting exit_tb(0).
> +
> * qemu_ld_i32/i64 t0, t1, flags, memidx
> * qemu_st_i32/i64 t0, t1, flags, memidx
>
> diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
> index 95a39b7..8ff1eaf 100644
> --- a/tcg/tcg-op.c
> +++ b/tcg/tcg-op.c
> @@ -2587,6 +2587,19 @@ void tcg_gen_goto_tb(unsigned idx)
> tcg_gen_op1i(INDEX_op_goto_tb, idx);
> }
>
> +void tcg_gen_lookup_and_goto_ptr(TCGv addr)
> +{
> + if (TCG_TARGET_HAS_goto_ptr) {
> + TCGv_ptr ptr = tcg_temp_new_ptr();
> +
> + gen_helper_lookup_tb_ptr(ptr, tcg_ctx.tcg_env, addr);
> + tcg_gen_op1i(INDEX_op_goto_ptr, GET_TCGV_PTR(ptr));
> + tcg_temp_free_ptr(ptr);
> + } else {
> + tcg_gen_exit_tb(0);
> + }
> +}
> +
> static inline TCGMemOp tcg_canonicalize_memop(TCGMemOp op, bool is64, bool st)
> {
> /* Trigger the asserts within as early as possible. */
> diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
> index c68e300..5d3278f 100644
> --- a/tcg/tcg-op.h
> +++ b/tcg/tcg-op.h
> @@ -796,6 +796,17 @@ static inline void tcg_gen_exit_tb(uintptr_t val)
> */
> void tcg_gen_goto_tb(unsigned idx);
>
> +/**
> + * tcg_gen_lookup_and_goto_ptr() - look up a TB and jump to it if valid
> + * @addr: Guest address of the target TB
> + *
> + * If the TB is not valid, jump to the epilogue.
> + *
> + * This operation is optional. If the TCG backend does not implement goto_ptr,
> + * this op is equivalent to calling tcg_gen_exit_tb() with 0 as the argument.
> + */
> +void tcg_gen_lookup_and_goto_ptr(TCGv addr);
> +
> #if TARGET_LONG_BITS == 32
> #define tcg_temp_new() tcg_temp_new_i32()
> #define tcg_global_reg_new tcg_global_reg_new_i32
--
Alex Bennée
next prev parent reply other threads:[~2017-04-26 10:33 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-26 6:23 [PATCH v3 00/10] TCG optimizations for 2.10 Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 6:23 ` [PATCH v3 01/10] tcg-runtime: add lookup_tb_ptr helper Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 7:50 ` Paolo Bonzini
2017-04-26 7:50 ` [Qemu-devel] " Paolo Bonzini
2017-04-26 8:40 ` Richard Henderson
2017-04-26 8:40 ` [Qemu-devel] " Richard Henderson
2017-04-26 21:56 ` Emilio G. Cota
2017-04-26 21:56 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 22:29 ` Richard Henderson
2017-04-26 22:29 ` [Qemu-devel] " Richard Henderson
2017-04-26 22:45 ` Emilio G. Cota
2017-04-26 22:45 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:11 ` Emilio G. Cota
2017-04-26 23:11 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:25 ` Emilio G. Cota
2017-04-26 23:25 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 23:17 ` Emilio G. Cota
2017-04-26 23:17 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 10:29 ` Alex Bennée
2017-04-26 10:29 ` [Qemu-devel] " Alex Bennée
2017-04-26 10:43 ` Richard Henderson
2017-04-26 10:43 ` [Qemu-devel] " Richard Henderson
2017-04-26 15:11 ` Paolo Bonzini
2017-04-26 15:11 ` [Qemu-devel] " Paolo Bonzini
2017-04-26 16:16 ` Alex Bennée
2017-04-26 16:16 ` [Qemu-devel] " Alex Bennée
2017-04-26 6:23 ` [PATCH v3 02/10] tcg: introduce goto_ptr opcode Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:30 ` Richard Henderson
2017-04-26 8:30 ` [Qemu-devel] " Richard Henderson
2017-04-26 12:12 ` Richard Henderson
2017-04-26 12:12 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 03/10] tcg: export tcg_gen_lookup_and_goto_ptr Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:29 ` Richard Henderson
2017-04-26 8:29 ` [Qemu-devel] " Richard Henderson
2017-04-26 10:33 ` Alex Bennée [this message]
2017-04-26 10:33 ` Alex Bennée
2017-04-26 6:23 ` [PATCH v3 04/10] tcg/i386: implement goto_ptr op Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:28 ` Richard Henderson
2017-04-26 8:28 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 05/10] target/arm: optimize cross-page direct jumps in softmmu Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:27 ` Richard Henderson
2017-04-26 8:27 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 06/10] target/arm: optimize indirect branches Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 7:54 ` Richard Henderson
2017-04-26 7:54 ` [Qemu-devel] " Richard Henderson
2017-04-27 3:20 ` Emilio G. Cota
2017-04-27 3:20 ` [Qemu-devel] " Emilio G. Cota
2017-04-27 10:25 ` Aurelien Jarno
2017-04-26 6:23 ` [PATCH v3 07/10] target/i386: introduce gen_jr helper to generate lookup_and_goto_ptr Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:26 ` Richard Henderson
2017-04-26 8:26 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 08/10] target/i386: optimize cross-page direct jumps in softmmu Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:25 ` Richard Henderson
2017-04-26 8:25 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 09/10] target/i386: optimize indirect branches Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
2017-04-26 8:24 ` Richard Henderson
2017-04-26 8:24 ` [Qemu-devel] " Richard Henderson
2017-04-26 6:23 ` [PATCH v3 10/10] tb-hash: improve tb_jmp_cache hash function in user mode Emilio G. Cota
2017-04-26 6:23 ` [Qemu-devel] " Emilio G. Cota
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=87d1bz8nlh.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=agraf@suse.de \
--cc=aurelien@aurel32.net \
--cc=balrogg@gmail.com \
--cc=bobby.prani+qemu@gmail.com \
--cc=cota@braap.org \
--cc=crosthwaite.peter@gmail.com \
--cc=ehabkost@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.