[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