[PATCH 3/3] Support Intel AMX-FP8

Jiang, Haochen haochen.jiang@intel.com
Tue Dec 24 05:50:48 GMT 2024


> From: Jan Beulich <jbeulich@suse.com>
> Sent: Thursday, December 19, 2024 7:56 PM
> 
> On 18.12.2024 07:32, Haochen Jiang wrote:
> > @@ -7198,7 +7200,7 @@ i386_assemble (char *line)
> >        /* The opcode space check isn't strictly needed; it's there only to
> >  	 bypass the logic below when easily possible.  */
> >        && t->opcode_space >= SPACE_0F
> > -      && t->opcode_space <= SPACE_0F3A
> > +      && t->opcode_space <= SPACE_MAP5
> 
> Why would this need adjustment? The whole conditional is only about ...
> 
> >        && !is_cpu (&i.tm, CpuSSE4a)
> >        && !is_any_vex_encoding (t))
> 
> ... non-VEX/EVEX encodings.

They are not needed. I will remove them.

> > --- a/opcodes/i386-dis.c
> > +++ b/opcodes/i386-dis.c
> > @@ -1159,6 +1159,7 @@ enum
> >    PREFIX_VEX_0F38F6_L_0,
> >    PREFIX_VEX_0F38F7_L_0,
> >    PREFIX_VEX_0F3AF0_L_0,
> > +  PREFIX_VEX_MAP5_FD_X86_64_L_0_W_0,
> >    PREFIX_VEX_MAP7_F6_L_0_W_0_R_0_X86_64,
> >    PREFIX_VEX_MAP7_F8_L_0_W_0_R_0_X86_64,
> 
> By going through x86_64_table[] first, you're effectively guaranteeing that no
> insns will show up at this opcode point which can also be used outside of 654-
> bit mode. Is that what you're intending (i.e. unlike what the adjacent entries
> here show)?

For all AMX insns, we all first pass x86_64_table. It is intended since the
introduction.

> 
> > @@ -7029,6 +7048,297 @@ static const struct dis386 vex_table[][256] = {
> >      { Bad_Opcode },
> >      { Bad_Opcode },
> >    },
> > +  /* VEX_MAP5 */
> > +  {
> > +    /* 00 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 08 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 10 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 18 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 20 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 28 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 30 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 38 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 40 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 48 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 50 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 58 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 60 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 68 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 70 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 78 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 80 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 88 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 90 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* 98 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* a0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* a8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* b0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* b8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* c0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* c8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* d0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* d8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* e0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* e8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* f0 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    /* f8 */
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +    { X86_64_TABLE (X86_64_VEX_MAP5_FD) },
> > +    { Bad_Opcode },
> > +    { Bad_Opcode },
> > +  },
> >  };
> 
> Hmm, a table of 256 entries with just a single opcode point defined, and no
> clear perspective whether there's going to be more than just the AMX-MOVRS
> one in the foreseeable future. Maybe better handle like the
> Map7 entries for now?
> 

Ok let me do that for now.

Thx,
Haochen


More information about the Binutils mailing list