qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Taylor Simpson <tsimpson@quicinc.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: "ale@rev.ng" <ale@rev.ng>, "Brian Cain" <bcain@quicinc.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	"richard.henderson@linaro.org" <richard.henderson@linaro.org>,
	"laurent@vivier.eu" <laurent@vivier.eu>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: RE: [PATCH v8 26/35] Hexagon (target/hexagon) TCG generation
Date: Tue, 6 Apr 2021 15:44:39 +0000	[thread overview]
Message-ID: <BYAPR02MB488635155A96A54B5ACD6B26DE769@BYAPR02MB4886.namprd02.prod.outlook.com> (raw)
In-Reply-To: <87y2dvwych.fsf@linaro.org>



> -----Original Message-----
> From: Alex Bennée <alex.bennee@linaro.org>
> Sent: Tuesday, April 6, 2021 4:20 AM
> To: Taylor Simpson <tsimpson@quicinc.com>
> Cc: Philippe Mathieu-Daudé <f4bug@amsat.org>; qemu-devel@nongnu.org;
> richard.henderson@linaro.org; laurent@vivier.eu; ale@rev.ng; Brian Cain
> <bcain@quicinc.com>
> Subject: Re: [PATCH v8 26/35] Hexagon (target/hexagon) TCG generation
>
> Taylor Simpson <tsimpson@quicinc.com> writes:
>
> >> -----Original Message-----
> >> From: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com> On
> >> Behalf Of Philippe Mathieu-Daudé
> >> Sent: Thursday, February 11, 2021 6:23 PM
> >> To: Taylor Simpson <tsimpson@quicinc.com>; qemu-devel@nongnu.org
> >> Cc: richard.henderson@linaro.org; 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
> >>
> >> > +static inline TCGv gen_read_preg(TCGv pred, uint8_t num)
> >> > +{
> >> > +    tcg_gen_mov_tl(pred, hex_pred[num]);
> >> > +    return pred;
> >> > +}
> >> > +
> >> > +static inline void gen_log_predicated_reg_write(int rnum, TCGv val, int slot)
> >> > +{
> >> > +    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
> >>
> >> Can you declare an 'bool hexagon_debug_enabled(void);' eventually
> >> inlined, so we can get this code compiled (to avoid bitroting) using
> >>
> >>   if (hexagon_debug_enabled()) {
> >>
> >> > +    /* 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]);
> >>
> >>   }
> >>
> >> > +#endif
> >
> > Do we really need a function?  Why not change
> >
> > #if HEX_DEBUG
> >     ...
> > #endif
> >
> > to
> >
> > if (HEX_DEBUG) {
> >     ...
> > }
>
> You can go the whole hog and wrap everything up to minimise the chance
> of functional changes in your debug legs in the main code, e.g.:
>
>   #define tlb_debug(fmt, ...) do { \
>       if (DEBUG_TLB_LOG_GATE) { \
>           qemu_log_mask(CPU_LOG_MMU, "%s: " fmt, __func__, \
>                         ## __VA_ARGS__); \
>       } else if (DEBUG_TLB_GATE) { \
>           fprintf(stderr, "%s: " fmt, __func__, ## __VA_ARGS__); \
>       } \
>   } while (0)
>
> Then a statement like:
>
>   tlb_debug("mmu_idx:0x%04" PRIx16 "\n", asked);
>
> is unambiguously:
>
>   - obviously a debug statement
>   - always compiled, hence no bit rot
>   - optimises away when gates are 0
>   - doesn't accidentally include changes in behaviour

That approach works fine for code that prints things out.  In fact, we have HEX_DEBUG_LOG for that purpose.  I can rewrite it as you suggest so the args always get compiled.

In addition, there are a dozen or so places where we emit additional TCG code when HEX_DEBUG is set.  We print the results in HELPER(debug_commit_end).  In the example above, we would end up with

#define debug_predicated_reg_write(rnum, slot_mask, zero, one) \
    do { \
        if (HEX_DEBUG) { \
            tcg_gen_movcond_tl(TCG_COND_EQ, hex_reg_written[rnum], slot_mask, zero, \
                                                   one, hex_reg_written[rnum]); \
        } \
    } while (0)

IMO, the invocation
    debug_predicated_reg_write(rnum, slot_mask, zero, one);
would be harder to read because you have to look at two places to see what is going on.  There would be only one invocation, so it would be better to put the if (HEX_DEBUG) in place.


Taylor


  reply	other threads:[~2021-04-06 15:46 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 [this message]
2021-02-15  0:06   ` Richard Henderson
2021-03-14  0:39     ` Taylor Simpson
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=BYAPR02MB488635155A96A54B5ACD6B26DE769@BYAPR02MB4886.namprd02.prod.outlook.com \
    --to=tsimpson@quicinc.com \
    --cc=ale@rev.ng \
    --cc=alex.bennee@linaro.org \
    --cc=bcain@quicinc.com \
    --cc=f4bug@amsat.org \
    --cc=laurent@vivier.eu \
    --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).