Re: [PATCH 01/10] target/arm: Implement FTMOPA (non-widening, FP32)

Peter Maydell <[email protected]> Tue, 28 Jul 2026 15:55:37 +0100
Newsgroups org.nongnu.qemu-arm,org.nongnu.qemu-devel
Message-ID <CAFEAcA-NonwGRDc7CpQyz9HwOn-1ZVyqDra3wg7ODRvfavUotA@mail.gmail.com>
On Tue, 28 Jul 2026 at 15:50, Richard Henderson
<[email protected]> wrote:
>
> On 7/28/26 06:10, Peter Maydell wrote:
> > On Tue, 14 Jul 2026 at 00:04, Richard Henderson
> > <[email protected]> wrote:
> >>
> >> Signed-off-by: Richard Henderson <[email protected]>
> >> ---
> >
> >
> >> +static void sme_tmop(void *vza, void *vzn, void *vzm, uint64_t *zk,
> >> +                     void *fn_opaque, uint32_t desc, MemOp esz,
> >> +                     void (*fn)(void *, void *, void *, void *))
> >> +{
> >> +    intptr_t oprsz = simd_maxsz(desc);
> >> +    intptr_t index = simd_data(desc);
> >> +    intptr_t esize = 1 << esz;
> >> +    intptr_t host_adj = HOST_BIG_ENDIAN ? 8 - esize : 0;
> >> +    /* Base in bits for op3[index*:csize], csize = (VL * 2) / esize. */
> >> +    intptr_t ctrl_base = index * oprsz * 2;
> >> +    /* Create a zero for use with the largest esz. */
> >> +    uint32_t zero = 0;
> >> +
> >> +    for (intptr_t row = 0; row < oprsz; row += esize) {
> >> +        void *vza_row = vza + tile_vslice_offset(row);
> >> +
> >> +        for (intptr_t col = 0; col < oprsz; col += esize) {
> >> +            void *e2 = vzm + (col ^ host_adj);
> >> +            void *e3 = vza_row + (col ^ host_adj);
> >
> > Having just read patch 4, is it possible to do this with the H
> > macros rather than a manual host_adj, as we do in
> > sme_tmop_2way_sh() there ?
>
> Not without making copies of the function specializing on esz.  Of course, it turns out
> after the fact that only two esz are used, so perhaps it's not that bad.  But the element
> selection logic was confusing enough to suggest just one function.

Ah, yes, we have a variable esz here.

Since this was my only query on this series, I've added it to my
list to apply once 11.1 is out.

thanks
-- PMM