diff options
author | Haochen Jiang <haochen.jiang@intel.com> | 2025-01-14 10:30:40 +0800 |
---|---|---|
committer | Haochen Jiang <haochen.jiang@intel.com> | 2025-01-14 10:30:40 +0800 |
commit | 7473229fa80d708f5a71b79c12a9d2626e8debe1 (patch) | |
tree | fefbc9508e4235df89987ec2ccfd8d13117d713f /opcodes/i386-dis.c | |
parent | b7267244a3556fd3cf3219ebc9f890b065150bef (diff) | |
download | gdb-7473229fa80d708f5a71b79c12a9d2626e8debe1.zip gdb-7473229fa80d708f5a71b79c12a9d2626e8debe1.tar.gz gdb-7473229fa80d708f5a71b79c12a9d2626e8debe1.tar.bz2 |
Support Intel AMX-AVX512
This patch will support AMX-AVX512. In disassmbler, we pull out all
GPR mode out of the vex length switch to make it more general.
gas/ChangeLog:
* NEWS: Mention the full support on DMR AMX ISAs.
* config/tc-i386.c: Add amx_avx512.
* doc/c-i386.texi: Document .amx_avx512.
* testsuite/gas/i386/x86-64.exp: Run AMX-AVX512 tests.
* testsuite/gas/i386/x86-64-amx-avx512-intel.d: New test.
* testsuite/gas/i386/x86-64-amx-avx512.d: Ditto.
* testsuite/gas/i386/x86-64-amx-avx512.s: Ditto.
opcodes/ChangeLog:
* i386-dis-evex-len.h: Add EVEX_LEN_0F384A_X86_64_W_0,
EVEX_LEN_0F386D_X86_64_W_0, EVEX_LEN_0F3A07_X86_64_W_0,
EVEX_LEN_0F3A77_X86_64_W_0.
* i386-dis-evex-prefix.h: Add PREFIX_EVEX_0F384A_W_0_L_2,
PREFIX_EVEX_0F386D_W_0_L_2, PREFIX_EVEX_0F3A07_W_0_L_2,
PREFIX_EVEX_0F3A77_W_0_L_2.
* i386-dis-evex-w.h: Add EVEX_W_0F384A_X86_64, EVEX_W_0F386D_X86_64,
EVEX_W_0F3A07_X86_64, EVEX_W_0F3A77_X86_64.
* i386-dis-evex-x86-64.h: Add X86_64_EVEX_0F384A, X86_64_EVEX_0F386D,
X86_64_EVEX_0F3A07, X86_64_EVEX_0F3A77.
* i386-dis-evex.h: Ditto.
* i386-dis.c (EVEX_LEN_0F384A_X86_64_W_0): New.
(EVEX_LEN_0F386D_X86_64_W_0): Ditto.
(EVEX_LEN_0F3A07_X86_64_W_0): Ditto.
(EVEX_LEN_0F3A77_X86_64_W_0): Ditto.
(MOD_EVEX_0F384A_X86_64_W_0): Ditto.
(MOD_EVEX_0F386D_X86_64_W_0): Ditto.
(MOD_EVEX_0F3A07_X86_64_W_0): Ditto.
(MOD_EVEX_0F3A77_X86_64_W_0): Ditto.
(PREFIX_EVEX_0F384A_W_0_L_2): Ditto.
(PREFIX_EVEX_0F386D_W_0_L_2): Ditto.
(PREFIX_EVEX_0F3A07_W_0_L_2): Ditto.
(PREFIX_EVEX_0F3A77_W_0_L_2): Ditto.
(EVEX_W_0F384A_X86_64): Ditto.
(EVEX_W_0F386D_X86_64): Ditto.
(EVEX_W_0F3A07_X86_64): Ditto.
(EVEX_W_0F3A77_X86_64): Ditto.
(X86_64_EVEX_0F384A): Ditto.
(X86_64_EVEX_0F386D): Ditto.
(X86_64_EVEX_0F3A07): Ditto.
(X86_64_EVEX_0F3A77): Ditto.
(OP_VEX): Pull out all GPR mode out of the vector length switch.
* i386-gen.c (isa_dependencies): Add AMX-AVX512.
(cpu_flags): Ditto.
* i386-init.h: Regenerated.
* i386-mnem.h: Ditto.
* i386-opc.h (CpuAMX_AVX512): New.
(i386_cpu_flags): Add cpuamx_avx512.
* i386-opc.tbl: Add AMX-AVX512 instructions.
* i386-tbl.h: Regenerated.
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r-- | opcodes/i386-dis.c | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index b3367d9..1ded045 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -1204,9 +1204,11 @@ enum PREFIX_EVEX_0F3838, PREFIX_EVEX_0F3839, PREFIX_EVEX_0F383A, + PREFIX_EVEX_0F384A_X86_64_W_0_L_2, PREFIX_EVEX_0F3852, PREFIX_EVEX_0F3853, PREFIX_EVEX_0F3868, + PREFIX_EVEX_0F386D_X86_64_W_0_L_2, PREFIX_EVEX_0F3872, PREFIX_EVEX_0F3874, PREFIX_EVEX_0F389A, @@ -1214,6 +1216,7 @@ enum PREFIX_EVEX_0F38AA, PREFIX_EVEX_0F38AB, + PREFIX_EVEX_0F3A07_X86_64_W_0_L_2, PREFIX_EVEX_0F3A08, PREFIX_EVEX_0F3A0A, PREFIX_EVEX_0F3A26, @@ -1225,6 +1228,7 @@ enum PREFIX_EVEX_0F3A57, PREFIX_EVEX_0F3A66, PREFIX_EVEX_0F3A67, + PREFIX_EVEX_0F3A77_X86_64_W_0_L_2, PREFIX_EVEX_0F3AC2, PREFIX_EVEX_MAP4_4x, @@ -1374,6 +1378,9 @@ enum X86_64_VEX_MAP7_F8_L_0_W_0_R_0, X86_64_EVEX_0F384A, + X86_64_EVEX_0F386D, + X86_64_EVEX_0F3A07, + X86_64_EVEX_0F3A77, X86_64_EVEX_MAP5_6F, }; @@ -1573,10 +1580,12 @@ enum EVEX_LEN_0F384A_X86_64_W_0, EVEX_LEN_0F385A, EVEX_LEN_0F385B, + EVEX_LEN_0F386D_X86_64_W_0, EVEX_LEN_0F38C6, EVEX_LEN_0F38C7, EVEX_LEN_0F3A00, EVEX_LEN_0F3A01, + EVEX_LEN_0F3A07_X86_64_W_0, EVEX_LEN_0F3A18, EVEX_LEN_0F3A19, EVEX_LEN_0F3A1A, @@ -1587,6 +1596,7 @@ enum EVEX_LEN_0F3A3A, EVEX_LEN_0F3A3B, EVEX_LEN_0F3A43, + EVEX_LEN_0F3A77_X86_64_W_0, EVEX_LEN_MAP5_6E, EVEX_LEN_MAP5_7E, @@ -1806,12 +1816,14 @@ enum EVEX_W_0F3859, EVEX_W_0F385A_L_n, EVEX_W_0F385B_L_2, + EVEX_W_0F386D_X86_64, EVEX_W_0F3870, EVEX_W_0F3872_P_2, EVEX_W_0F387A, EVEX_W_0F387B, EVEX_W_0F3883, + EVEX_W_0F3A07_X86_64, EVEX_W_0F3A18_L_n, EVEX_W_0F3A19_L_n, EVEX_W_0F3A1A_L_2, @@ -1826,6 +1838,7 @@ enum EVEX_W_0F3A43_L_n, EVEX_W_0F3A70, EVEX_W_0F3A72, + EVEX_W_0F3A77_X86_64, EVEX_W_MAP4_8F_R_0, EVEX_W_MAP4_F8_P1_M_1, @@ -14034,6 +14047,25 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED) } return true; + + case v_mode: + case dq_mode: + if (ins->rex & REX_W) + oappend_register (ins, att_names64[reg]); + else if (bytemode == v_mode + && !(sizeflag & DFLAG)) + oappend_register (ins, att_names16[reg]); + else + oappend_register (ins, att_names32[reg]); + return true; + + case b_mode: + oappend_register (ins, att_names8rex[reg]); + return true; + + case q_mode: + oappend_register (ins, att_names64[reg]); + return true; } switch (ins->vex.length) @@ -14045,22 +14077,6 @@ OP_VEX (instr_info *ins, int bytemode, int sizeflag ATTRIBUTE_UNUSED) names = att_names_xmm; ins->evex_used |= EVEX_len_used; break; - case v_mode: - case dq_mode: - if (ins->rex & REX_W) - names = att_names64; - else if (bytemode == v_mode - && !(sizeflag & DFLAG)) - names = att_names16; - else - names = att_names32; - break; - case b_mode: - names = att_names8rex; - break; - case q_mode: - names = att_names64; - break; case mask_bd_mode: case mask_mode: if (reg > 0x7) |