On 22/11/24, Richard Henderson wrote:
> On 11/20/24 19:49, Anton Johansson wrote:
> > Adds necessary helper functions for mapping LLVM IR onto TCG.
> > Specifically, helpers corresponding to the bitreverse and funnel-shift
> > intrinsics in LLVM.
> > 
> > Note: these may be converted to more efficient implementations in the
> > future, but for the time being it allows helper-to-tcg to support a
> > wider subset of LLVM IR.
> > 
> > Signed-off-by: Anton Johansson <a...@rev.ng>
> > ---
> >   accel/tcg/tcg-runtime.c | 29 +++++++++++++++++++++++++++++
> >   accel/tcg/tcg-runtime.h |  5 +++++
> >   2 files changed, 34 insertions(+)
> 
> For things in tcg-runtime.c, we generally have wrapper functions in
> include/tcg/tcg-op-common.h which hide the fact that the operation is being
> expanded by a helper.
> 
> We would also have tcg_gen_bitreverse{8,16,32}_i64, and *_tl macros in 
> include/tcg/tcg-op.h.
> 
> I've been meaning to add something like these for a while, because they are
> common to quite a few targets.
> 
> > +uint32_t HELPER(bitreverse8_i32)(uint32_t x)
> > +{
> > +  return revbit8((uint8_t) x);
> > +}
> 
> Also common is bit-reversing every byte in the word, not just the lowest.
> Worth implementing both?  Or simply zero-extending the input/output when the
> target only requires the lowest byte?
> 
> We might want to audit the other targets to determine which forms are used...

I'll take a stab at auditing usage of revbit*() in targets, and add
appropriate tcg_gen_bitreverse*() versions.  I guess it makes sense to split
this out into a small separate patchset in that case.

//Anton

Reply via email to