qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Taylor Simpson <tsimpson@quicinc.com>
To: Richard Henderson <richard.henderson@linaro.org>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Cc: "ale@rev.ng" <ale@rev.ng>,
	"alex.bennee@linaro.org" <alex.bennee@linaro.org>,
	"philmd@redhat.com" <philmd@redhat.com>,
	"laurent@vivier.eu" <laurent@vivier.eu>,
	Brian Cain <bcain@quicinc.com>
Subject: RE: [PATCH v8 26/35] Hexagon (target/hexagon) TCG generation
Date: Sun, 14 Mar 2021 00:39:40 +0000	[thread overview]
Message-ID: <BYAPR02MB488669BE2DBB06AAACD416B3DE6D9@BYAPR02MB4886.namprd02.prod.outlook.com> (raw)
In-Reply-To: <ebb86dcd-d89b-3901-3c59-08c6bfb3ed23@linaro.org>



> -----Original Message-----
> From: Richard Henderson <richard.henderson@linaro.org>
> Sent: Sunday, February 14, 2021 6:07 PM
> To: Taylor Simpson <tsimpson@quicinc.com>; qemu-devel@nongnu.org
> Cc: philmd@redhat.com; alex.bennee@linaro.org; laurent@vivier.eu;
> ale@rev.ng; Brian Cain <bcain@quicinc.com>
> Subject: Re: [PATCH v8 26/35] Hexagon (target/hexagon) TCG generation
>
> On 2/7/21 9:46 PM, Taylor Simpson wrote:
> > +static inline void gen_log_predicated_reg_write(int rnum, TCGv val, int
> slot)
>
> Drop all the inline markup.  Let the compiler decide.  It also means we get
> more consistent warnings for unused functions between gcc and clang (clang
> will
> warn for unused inlines outside a header file, gcc will not).
>
> Also, quite a few of these function are really way too big to want to inline.
>
> > +{
> > +    TCGv one = tcg_const_tl(1);
> > +    TCGv zero = tcg_const_tl(0);
> > +    TCGv slot_mask = tcg_temp_new();
> > +
> > +    tcg_gen_andi_tl(slot_mask, hex_slot_cancelled, 1 << slot);
> > +    tcg_gen_movcond_tl(TCG_COND_EQ, hex_new_value[rnum],
> slot_mask, zero,
> > +                           val, hex_new_value[rnum]);
> > +#if HEX_DEBUG
> > +    /* Do this so HELPER(debug_commit_end) will know */
> > +    tcg_gen_movcond_tl(TCG_COND_EQ, hex_reg_written[rnum],
> slot_mask, zero,
> > +                       one, hex_reg_written[rnum]);
>
> This is a very complicated OR.
>
> If you really want hex_reg_written = {0,1}, then change to
>
>     tcg_gen_extract_tl(slot_mask, hex_slot_canceled, slot, 1);
>
> otherwise, just let hex_reg_written be zero/non-zero, and or in the slot.

Note that slot_mask indicates that the value is not written (i.e., slot was cancelled).  So, the code will be
    tcg_gen_xori_tl(slot_mask, slot_mask, 1 << slot);
    tcg_gen_or_tl(hex_reg_written[rnum], hex_reg_written[rnum], slot_mask);


> > +static inline void gen_log_pred_write(int pnum, TCGv val)
> > +{
> > +    TCGv zero = tcg_const_tl(0);
> > +    TCGv base_val = tcg_temp_new();
> > +    TCGv and_val = tcg_temp_new();
> > +    TCGv pred_written = tcg_temp_new();
> > +
> > +    /* Multiple writes to the same preg are and'ed together */
> > +    tcg_gen_andi_tl(base_val, val, 0xff);
>
> Why is this here, rather than asserting that we never generate an out-of-
> range
> value?

The instruction semantics assume the values will be truncated to 8 bits when written.  Here's an example:
    Q6INSN(C2_not,"Pd4=not(Ps4)",ATTRIBS(A_CRSLOT23),
    "Logical NOT Predicate",
    {PdV=~PsV;})

BTW, how can I generate an assert via TCG?


> > +    tcg_gen_and_tl(and_val, base_val, hex_new_pred_value[pnum]);
> > +    tcg_gen_andi_tl(pred_written, hex_pred_written, 1 << pnum);
> > +    tcg_gen_movcond_tl(TCG_COND_NE, hex_new_pred_value[pnum],
> > +                       pred_written, zero,
> > +                       and_val, base_val);
> > +    tcg_gen_ori_tl(hex_pred_written, hex_pred_written, 1 << pnum);
>
> Except for HEX_DEBUG, why would we not know whether or not a predicate
> has been
> written twice?  It seems like we shouldn't need hex_pred_written for the
> non-debug case.

It's legal to write to a predicate more than once in the same packet.  In this case, we and the results together.  This is described in Section 6.1.3 of the reference manual.  I'll beef up the comment to make it more clear.


Thanks,
Taylor


  reply	other threads:[~2021-03-14  0:42 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-08  5:45 [PATCH v8 00/35] Hexagon patch series Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 01/35] Hexagon Update MAINTAINERS file Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 02/35] Hexagon (target/hexagon) README Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 03/35] Hexagon (include/elf.h) ELF machine definition Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 04/35] Hexagon (target/hexagon) scalar core definition Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 05/35] Hexagon (disas) disassembler Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 06/35] Hexagon (target/hexagon) register names Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 07/35] Hexagon (target/hexagon) scalar core helpers Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 08/35] Hexagon (target/hexagon) GDB Stub Taylor Simpson
2021-02-08  5:45 ` [PATCH v8 09/35] Hexagon (target/hexagon) architecture types Taylor Simpson
2021-02-12  0:32   ` Philippe Mathieu-Daudé
2021-02-14 17:16   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 10/35] Hexagon (target/hexagon) instruction and packet types Taylor Simpson
2021-02-14 17:21   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 11/35] Hexagon (target/hexagon) register fields Taylor Simpson
2021-02-14 17:25   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 12/35] Hexagon (target/hexagon) instruction attributes Taylor Simpson
2021-02-14 18:00   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 13/35] Hexagon (target/hexagon) instruction/packet decode Taylor Simpson
2021-02-14 18:31   ` Richard Henderson
2021-03-14 17:23     ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 14/35] Hexagon (target/hexagon) instruction printing Taylor Simpson
2021-02-14 18:36   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 15/35] Hexagon (target/hexagon/arch.[ch]) utility functions Taylor Simpson
2021-02-14 20:13   ` Richard Henderson
2021-03-18  3:57     ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 16/35] Hexagon (target/hexagon/conv_emu.[ch]) " Taylor Simpson
2021-02-14 20:57   ` Richard Henderson
2021-03-18  3:57     ` Taylor Simpson
2021-03-18 13:30       ` Richard Henderson
2021-03-18 14:11         ` Taylor Simpson
2021-03-18 15:35           ` Richard Henderson
2021-03-18 18:03             ` Taylor Simpson
2021-03-18 18:32               ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 17/35] Hexagon (target/hexagon/fma_emu.[ch]) " Taylor Simpson
2021-02-12  0:31   ` Philippe Mathieu-Daudé
2021-02-14 23:14   ` Richard Henderson
2021-03-18  3:57     ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 18/35] Hexagon (target/hexagon/imported) arch import Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 19/35] Hexagon (target/hexagon) generator phase 1 - C preprocessor for semantics Taylor Simpson
2021-02-14 23:18   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 20/35] Hexagon (target/hexagon) generator phase 2 - generate header files Taylor Simpson
2021-02-14 23:20   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 21/35] Hexagon (target/hexagon) generator phase 3 - C preprocessor for decode tree Taylor Simpson
2021-02-14 23:24   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 22/35] Hexagon (target/hexagon) generater phase 4 - " Taylor Simpson
2021-02-14 23:26   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 23/35] Hexagon (target/hexagon) opcode data structures Taylor Simpson
2021-02-12  0:26   ` Philippe Mathieu-Daudé
2021-02-14 23:27   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 24/35] Hexagon (target/hexagon) macros Taylor Simpson
2021-02-14 23:36   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 25/35] Hexagon (target/hexagon) instruction classes Taylor Simpson
2021-02-14 23:41   ` Richard Henderson
2021-03-14  0:39     ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 26/35] Hexagon (target/hexagon) TCG generation Taylor Simpson
2021-02-12  0:22   ` Philippe Mathieu-Daudé
2021-04-05 23:03     ` Taylor Simpson
2021-04-06  9:20       ` Alex Bennée
2021-04-06 15:44         ` Taylor Simpson
2021-02-15  0:06   ` Richard Henderson
2021-03-14  0:39     ` Taylor Simpson [this message]
2021-03-14  1:39       ` Richard Henderson
2021-03-15  3:09         ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 27/35] Hexagon (target/hexagon) TCG for instructions with multiple definitions Taylor Simpson
2021-02-15  0:33   ` Richard Henderson
2021-03-14  0:41     ` Taylor Simpson
2021-03-14 18:02       ` Richard Henderson
2021-03-15  2:59         ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 28/35] Hexagon (target/hexagon) TCG for floating point instructions Taylor Simpson
2021-02-15  0:34   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 29/35] Hexagon (target/hexagon) translation Taylor Simpson
2021-02-15  1:03   ` Richard Henderson
2021-03-14  0:40     ` Taylor Simpson
2021-03-14  1:44       ` Richard Henderson
2021-03-15  3:06         ` Taylor Simpson
2021-03-15 13:31           ` Richard Henderson
2021-03-15 22:19             ` Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 30/35] Hexagon (linux-user/hexagon) Linux user emulation Taylor Simpson
2021-02-08  5:46 ` [PATCH v8 31/35] Hexagon (tests/tcg/hexagon) TCG tests - multiarch Taylor Simpson
2021-02-14 18:14   ` Philippe Mathieu-Daudé
2021-02-15  1:05   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 32/35] Hexagon (tests/tcg/hexagon) TCG tests - atomics/load/store/misc Taylor Simpson
2021-02-15  1:09   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 33/35] Hexagon (tests/tcg/hexagon) TCG tests - floating point Taylor Simpson
2021-02-15  1:10   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 34/35] Hexagon build infrastructure Taylor Simpson
2021-02-15  1:11   ` Richard Henderson
2021-02-08  5:46 ` [PATCH v8 35/35] Add Dockerfile for hexagon Taylor Simpson
2021-02-14 18:50   ` Philippe Mathieu-Daudé
2021-02-17 17:23     ` Alessandro Di Federico via
2021-02-17 17:33       ` Philippe Mathieu-Daudé
2021-02-27 14:10   ` Philippe Mathieu-Daudé
2021-02-27 14:32     ` Brian Cain
2021-02-08  6:25 ` [PATCH v8 00/35] Hexagon patch series no-reply
2021-02-15  1:23 ` Richard Henderson
2021-02-16 20:59   ` Taylor Simpson
2021-02-16 21:17     ` Peter Maydell
2021-02-17 14:23       ` Philippe Mathieu-Daudé
2021-02-17 17:05         ` Richard Henderson
2021-02-17 16:58     ` Richard Henderson

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=BYAPR02MB488669BE2DBB06AAACD416B3DE6D9@BYAPR02MB4886.namprd02.prod.outlook.com \
    --to=tsimpson@quicinc.com \
    --cc=ale@rev.ng \
    --cc=alex.bennee@linaro.org \
    --cc=bcain@quicinc.com \
    --cc=laurent@vivier.eu \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /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).