qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [PATCH v2 01/21] Hexagon (target/hexagon) TCG generation cleanup


From: Taylor Simpson
Subject: RE: [PATCH v2 01/21] Hexagon (target/hexagon) TCG generation cleanup
Date: Fri, 2 Apr 2021 19:42:17 +0000

> -----Original Message-----
> From: Richard Henderson <richard.henderson@linaro.org>
> Sent: Friday, April 2, 2021 12:47 PM
> To: Taylor Simpson <tsimpson@quicinc.com>; qemu-devel@nongnu.org
> Cc: philmd@redhat.com; ale@rev.ng; Brian Cain <bcain@quicinc.com>
> Subject: Re: [PATCH v2 01/21] Hexagon (target/hexagon) TCG generation
> cleanup
>
> On 3/31/21 8:53 PM, Taylor Simpson wrote:
> > Simplify TCG generation of hex_reg_written
> >
> > Suggested-by: Richard Henderson <richard.henderson@linaro.org>
> > Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
> > ---
> >   target/hexagon/genptr.c | 14 +++++++++-----
> >   1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c
> > index 7481f4c..87f5d92 100644
> > --- a/target/hexagon/genptr.c
> > +++ b/target/hexagon/genptr.c
> > @@ -35,7 +35,6 @@ static inline TCGv gen_read_preg(TCGv pred, uint8_t
> num)
> >
> >   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();
> >
> > @@ -43,12 +42,17 @@ static inline void gen_log_predicated_reg_write(int
> rnum, TCGv val, int 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]);
> > +    /*
> > +     * Do this so HELPER(debug_commit_end) will know
> > +     *
> > +     * Note that slot_mask indicates the value is not written
> > +     * (i.e., slot was cancelled), so we create a true/false value before
> > +     * or'ing with hex_reg_written[rnum].
> > +     */
> > +    tcg_gen_setcond_tl(TCG_COND_EQ, slot_mask, slot_mask, zero);
> > +    tcg_gen_or_tl(hex_reg_written[rnum], hex_reg_written[rnum],
> slot_mask);
> >   #endif
>
> Having looked forward at patch 5, it appears this could be further improved
> by examining ctx->regs_written.

It's not obvious how.  This is for a predicated instruction (e.g., if (p0) r2 = 
add(r1, r0)), so the checks need to be made at runtime.  There can be more than 
one predicated instruction in a packet that writes to the same register as long 
as only one of the predicates is true at runtime.

Am I missing something?


Thanks,
Taylor


reply via email to

[Prev in Thread] Current Thread [Next in Thread]