From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: walt@tilera.com, cmetcalf@ezchip.com,
xili_gchen_5257@hotmail.com, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH v14 30/33] target-tilegx: Handle atomic instructions
Date: Mon, 24 Aug 2015 21:15:00 -0700 [thread overview]
Message-ID: <55DBEBC4.4030805@twiddle.net> (raw)
In-Reply-To: <1440433079-14458-31-git-send-email-rth@twiddle.net>
On 08/24/2015 09:17 AM, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> target-tilegx/translate.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 49 insertions(+), 1 deletion(-)
>
> diff --git a/target-tilegx/translate.c b/target-tilegx/translate.c
> index 210e912..2a0798a 100644
> --- a/target-tilegx/translate.c
> +++ b/target-tilegx/translate.c
> @@ -180,6 +180,19 @@ static void gen_saturate_op(TCGv tdest, TCGv tsrca, TCGv tsrcb,
> tcg_temp_free(t0);
> }
>
> +static void gen_atomic_excp(DisasContext *dc, unsigned dest, unsigned srca,
> + unsigned srcb, TileExcp excp)
> +{
> +#ifdef CONFIG_USER_ONLY
> + TCGv_i32 t = tcg_const_i32((dest << 16) | (srca << 8) | srcb);
> + tcg_gen_st_i32(t, cpu_env, offsetof(CPUTLGState, excparam));
> + tcg_temp_free_i32(t);
> + gen_exception(dc, excp);
> +#else
> + gen_exception(dc, TILEGX_EXCP_OPCODE_UNIMPLEMENTED);
> +#endif
> +}
This is broken. While it does work well enough for Hello World, implementing a
non-trap instruction with an exception is extremely dicey for TileGX. The
issue is that TileGX bundles operate atomically, with no RAW issues between the
instructions of the bundle.
Consider a bundle like
{ add r0, r0, r1 ; exch r2, r0, r3 }
In Chen's implementation, the writeback to r0 would occur before the exception,
and so the exch would happen to the wrong address. In my implementation here,
the exception would occur before the writeback, and so the result of the add
would be discarded.
While retaining the current start_exclusive scheme, it would appear that we
need to store more data here -- to wit, the contents of the registers not their
numbers -- and delay the exception until after writeback.
Even better, of course, would be to not exit the TB at all, and use host atomic
instructions... I suppose that multi-threading patch set is still in limbo?
r~
next prev parent reply other threads:[~2015-08-25 4:15 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-24 16:17 [Qemu-devel] [PATCH v14 00/33] TileGX basic instructions Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 01/33] linux-user: tilegx: Firstly add architecture related features Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 02/33] linux-user: Support tilegx architecture in linux-user Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 03/33] linux-user: Conditionalize syscalls which are not defined in tilegx Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 04/33] target-tilegx: Add opcode basic implementation from Tilera Corporation Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 05/33] target-tilegx: Modify opcode_tilegx.h to fit QEMU usage Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 06/33] target-tilegx: Modify _SPECIAL_ opcodes Richard Henderson
2015-08-29 14:29 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 07/33] target-tilegx: Fix LDNA_ADD_IMM8_OPCODE_X1 Richard Henderson
2015-08-24 16:29 ` Peter Maydell
2015-08-24 16:43 ` Richard Henderson
2015-08-26 17:11 ` Chris Metcalf
2015-08-29 14:30 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 08/33] target-tilegx: Add special register information from Tilera Corporation Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 09/33] target-tilegx: Add cpu basic features for linux-user Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 10/33] target-tilegx: Add several helpers for instructions translation Richard Henderson
2015-08-29 14:37 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 11/33] target-tilegx: Framework for decoding bundles Richard Henderson
2015-08-29 14:50 ` Peter Maydell
[not found] ` <55E24808.5000302@hotmail.com>
2015-08-30 0:01 ` Chen Gang
2015-08-29 21:08 ` Peter Maydell
2015-09-01 1:58 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 12/33] target-tilegx: Generate SEGV properly Richard Henderson
2015-08-29 14:51 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 14/33] target-tilegx: Handle simple logical operations Richard Henderson
2015-08-29 14:58 ` Peter Maydell
2015-09-01 2:10 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 15/33] target-tilegx: Handle arithmetic instructions Richard Henderson
2015-08-29 15:03 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 16/33] target-tilegx: Handle most bit manipulation instructions Richard Henderson
2015-08-29 15:26 ` Peter Maydell
2015-09-01 2:26 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 17/33] target-tilegx: Handle basic load and store instructions Richard Henderson
2015-08-29 20:45 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 18/33] target-tilegx: Handle post-increment " Richard Henderson
2015-08-29 20:52 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 19/33] target-tilegx: Handle unconditional jump instructions Richard Henderson
2015-08-29 21:00 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 20/33] target-tilegx: Handle conditional branch instructions Richard Henderson
2015-08-29 21:08 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 21/33] target-tilegx: Handle comparison instructions Richard Henderson
2015-08-29 21:12 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 22/33] target-tilegx: Implement system and memory management instructions Richard Henderson
2015-08-29 21:21 ` Peter Maydell
2015-09-01 5:16 ` Richard Henderson
2015-09-01 8:23 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 23/33] target-tilegx: Handle bitfield instructions Richard Henderson
2015-08-30 13:31 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 24/33] target-tilegx: Handle shift instructions Richard Henderson
2015-08-30 13:38 ` Peter Maydell
2015-09-01 5:37 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 25/33] target-tilegx: Handle conditional move instructions Richard Henderson
2015-08-30 13:40 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 26/33] target-tilegx: Handle scalar multiply instructions Richard Henderson
2015-08-30 13:46 ` Peter Maydell
2015-09-01 5:42 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 27/33] target-tilegx: Handle mask instructions Richard Henderson
2015-08-30 13:52 ` Peter Maydell
2015-09-01 5:43 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 28/33] target-tilegx: Handle v1cmpeq, v1cmpne Richard Henderson
2015-08-30 15:11 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 29/33] target-tilegx: Handle mtspr, mfspr Richard Henderson
2015-08-30 15:18 ` Peter Maydell
2015-09-01 5:48 ` Richard Henderson
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 30/33] target-tilegx: Handle atomic instructions Richard Henderson
2015-08-25 4:15 ` Richard Henderson [this message]
[not found] ` <55DC69B0.1040000@hotmail.com>
2015-08-25 13:11 ` Chen Gang
2015-08-25 13:12 ` Chen Gang
2015-08-25 14:28 ` Richard Henderson
[not found] ` <55DCE21F.9000103@hotmail.com>
2015-08-25 21:45 ` Chen Gang
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 31/33] target-tilegx: Handle v4int_l/h Richard Henderson
2015-08-30 15:20 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 32/33] target-tilegx: Handle v1shli, v1shrui Richard Henderson
2015-08-30 15:23 ` Peter Maydell
2015-08-24 16:17 ` [Qemu-devel] [PATCH v14 33/33] target-tilegx: Handle v1shl, v1shru, v1shrs Richard Henderson
2015-08-30 15:28 ` Peter Maydell
[not found] ` <55DB96D7.9000105@hotmail.com>
2015-08-24 22:12 ` [Qemu-devel] [PATCH v14 00/33] TileGX basic instructions Chen Gang
[not found] ` <55E1B1AF.3040407@hotmail.com>
2015-08-29 13:19 ` Chen Gang
[not found] ` <55E2822E.4000805@hotmail.com>
2015-08-30 4:09 ` Chen Gang
2015-09-10 15:29 ` Chen Gang
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=55DBEBC4.4030805@twiddle.net \
--to=rth@twiddle.net \
--cc=cmetcalf@ezchip.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=walt@tilera.com \
--cc=xili_gchen_5257@hotmail.com \
/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).