aboutsummaryrefslogtreecommitdiff
path: root/opcodes/i386-dis.c
diff options
context:
space:
mode:
authorHaochen Jiang <haochen.jiang@intel.com>2025-01-14 10:30:40 +0800
committerHaochen Jiang <haochen.jiang@intel.com>2025-01-14 10:30:40 +0800
commit7473229fa80d708f5a71b79c12a9d2626e8debe1 (patch)
treefefbc9508e4235df89987ec2ccfd8d13117d713f /opcodes/i386-dis.c
parentb7267244a3556fd3cf3219ebc9f890b065150bef (diff)
downloadgdb-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.c48
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)