[PATCH 1/3] Support Intel AMX-TRANSPOSE
Jiang, Haochen
haochen.jiang@intel.com
Tue Dec 24 03:10:21 GMT 2024
> From: Jan Beulich <jbeulich@suse.com>
> Sent: Thursday, December 19, 2024 7:21 PM
>
> On 18.12.2024 07:32, Haochen Jiang wrote:
> > @@ -10750,25 +10752,43 @@ process_operands (void)
> > unsigned int op, extra;
> > const reg_entry *first;
> >
> > - /* The second operand must be {x,y,z}mmN. */
> > - gas_assert (i.operands == 3 && i.types[1].bitfield.class == RegSIMD);
> > + /* The second operand must be {x,y,z,t}mmN */
> > + gas_assert ((i.operands == 2 || i.operands == 3)
> > + && i.types[1].bitfield.class == RegSIMD);
> >
> > - switch (i.types[2].bitfield.class)
> > + if (i.operands == 3)
> > {
> > - case RegSIMD:
> > - /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of
> 4. */
> > - op = 1;
> > - extra = 3;
> > - break;
> > + switch (i.types[2].bitfield.class)
> > + {
> > + case RegSIMD:
> > + /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of
> 4. */
> > + op = 1;
> > + extra = 3;
> > + break;
> >
> > - case RegMask:
> > - /* AVX512-VP2INTERSECT operand 3: N must be a multiple of 2. */
> > - op = 2;
> > - extra = 1;
> > - break;
> > + case RegMask:
> > + /* AVX512-VP2INTERSECT operand 3: N must be a multiple of 2. */
> > + op = 2;
> > + extra = 1;
> > + break;
> >
> > - default:
> > - abort ();
> > + default:
> > + abort ();
> > + }
> > + }
> > + else
> > + {
> > + switch (i.types[1].bitfield.class)
> > + {
> > + case RegSIMD:
> > + /* AMX-TRANSPOSE operand 2: N must be a multiple of 2. */
> > + op = 1;
> > + extra = 1;
> > + break;
> > +
> > + default:
> > + abort ();
> > + }
> > }
>
> This could have been done with less churn, also making it easier to review.
> There's imo no need to wrap an operand count check around the switch().
> Instead in the RegSIMD case you can check the register type (Tmmword), thus
> likely making the new code a simple insertion. That's what I had in mind when
> originally laying out the code that you're now fully re-indenting.
>
Let me have a try. I am not sure if it could be done.
I need to mention here the AMX-TRANSPOSE related inst only got two operands.
There are no types[2] here. Then you have to use types[1] in switch. However, we
could not distinguish the original AVX512-VP2INTERSECT and AVX512_4FMAPS with
types[1].
Thx,
Haochen
More information about the Binutils
mailing list