>From: Paolo Montesel <paolo.montesel.re...@gmail.com> >Sent: Wednesday, April 28, 2021 5:25 AM >To: Taylor Simpson <tsimp...@quicinc.com> >Cc: Alessandro Di Federico <ale.q...@rev.ng>; qemu-devel@nongnu.org; Brian >Cain <bc...@quicinc.com>; ni...@rev.ng; >phi...@redhat.com; >richard.hender...@linaro.org; Alessandro Di Federico <a...@rev.ng> >Subject: Re: [PATCH v4 09/12] target/hexagon: import lexer for idef-parser > >Thanks for spotting this. It's actually a bug in the lexer. The token >`{IMM_ID}"iV"` didn't initialize `bit_width`. Now it does. This is the >result: > >void emit_J2_jump(DisasContext *ctx, Insn *insn, Packet *pkt, int riV) >/* fIMMEXT(riV); (riV = riV & ~3); (PC = fREAD_PC()+riV);} */ >{ >int64_t qemu_tmp_0 = ~((int64_t)3ULL); >int32_t qemu_tmp_1 = riV & qemu_tmp_0; >riV = qemu_tmp_1; >TCGv_i32 tmp_0 = tcg_temp_local_new_i32(); >tcg_gen_movi_i32(tmp_0, ctx->base.pc_next); >TCGv_i32 tmp_1 = tcg_temp_local_new_i32(); >tcg_gen_addi_i32(tmp_1, tmp_0, (int64_t)riV); >tcg_temp_free_i32(tmp_0); >gen_write_new_pc(tmp_1); >tcg_temp_free_i32(tmp_1); >} > >The `(int64_t)riV` cast is actually useless so I simply dropped it, thanks for >pointing it out. > >This is all gonna be in the next patchset ofc. > >~Paolo
This could be further simplified by doing the add in the parser and generating TCGv tmp_1 = tcg_const_tl(ctx->base.pc_next + riV); Have you looked at the host code that is generated? I would expect it to do the constant folding, so the executed code is OK. However, there's extra time spent building up TCG that could be avoided. Taylor