[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [PATCH v3 10/11] Hexagon (target/hexagon) Use direct block chaining
From: |
Taylor Simpson |
Subject: |
RE: [PATCH v3 10/11] Hexagon (target/hexagon) Use direct block chaining for direct jump/branch |
Date: |
Sun, 6 Nov 2022 21:46:15 +0000 |
> -----Original Message-----
> From: Richard Henderson <richard.henderson@linaro.org>
> Sent: Friday, November 4, 2022 8:33 PM
> To: Taylor Simpson <tsimpson@quicinc.com>; qemu-devel@nongnu.org
> Cc: philmd@linaro.org; ale@rev.ng; anjo@rev.ng; Brian Cain
> <bcain@quicinc.com>; Matheus Bernardino (QUIC)
> <quic_mathbern@quicinc.com>
> Subject: Re: [PATCH v3 10/11] Hexagon (target/hexagon) Use direct block
> chaining for direct jump/branch
>
> On 11/5/22 06:26, Taylor Simpson wrote:
> > Direct block chaining is documented here
> > https://qemu.readthedocs.io/en/latest/devel/tcg.html#direct-block-chai
> > ning
> >
> > Recall that Hexagon allows packets with multiple jumps where only the
> > first one with a true predicate will actually jump. So, we can only
> > use direct block chaining when the packet contains a single PC-relative
> jump.
>
> Not quite accurate.
>
> Only the first two direct branches can use direct block chaining. Other exits
> from the translation block could use indirect block chaining
> (tcg_gen_lookup_and_goto_ptr). You just have to remember which is
> taken.
>
I'll work on the wording in the commit message. When there is a single
PC-relative branch or jump in the packet, we use
tcg_gen_goto_tb/tcg_gen_exit_tb. Otherwise, we use tcg_gen_lookup_and_goto_ptr.
> That said, this is certainly an improvement.
>
> > + if (ctx->pkt->pkt_has_multi_cof) {
> > + gen_write_new_pc_addr(ctx, tcg_constant_tl(dest), pred);
> > + } else {
> > + /* Defer this jump to the end of the TB */
> > + g_assert(ctx->branch_cond == NULL);
> > + ctx->has_single_direct_branch = true;
> > + if (pred != NULL) {
> > + ctx->branch_cond = tcg_temp_local_new();
> > + tcg_gen_mov_tl(ctx->branch_cond, pred);
> > + }
> > + ctx->branch_dest = dest;
>
> Perhaps re-use hex_branch_taken as branch_cond?
Good idea. That will save the allocation/deallocation of the TCGv. I'll
change it to a TCGCond to indicate the comparison to be done (if any). It will
work nicely with your other suggestion to pass the branch condition along.
>
> Anyway,
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>
>
> r~
- [PATCH v3 07/11] Hexagon (target/hexagon) Add overrides for direct call instructions, (continued)
- [PATCH v3 07/11] Hexagon (target/hexagon) Add overrides for direct call instructions, Taylor Simpson, 2022/11/04
- [PATCH v3 05/11] Hexagon (target/hexagon) Remove PC from the runtime state, Taylor Simpson, 2022/11/04
- [PATCH v3 03/11] Hexagon (target/hexagon) Add overrides for S2_asr_r_r_sat/S2_asl_r_r_sat, Taylor Simpson, 2022/11/04
- [PATCH v3 10/11] Hexagon (target/hexagon) Use direct block chaining for direct jump/branch, Taylor Simpson, 2022/11/04
- [PATCH v3 11/11] Hexagon (target/hexagon) Use direct block chaining for tight loops, Taylor Simpson, 2022/11/04
- [PATCH v3 04/11] Hexagon (target/hexagon) Only use branch_taken when packet has multi cof, Taylor Simpson, 2022/11/04
- [PATCH v3 08/11] Hexagon (target/hexagon) Add overrides for compound compare and jump, Taylor Simpson, 2022/11/04
- [PATCH v3 09/11] Hexagon (target/hexagon) Add overrides for various forms of jump, Taylor Simpson, 2022/11/04