[PATCH] x86: Remove AMX-TRANSPOSE support

Haochen Jiang haochen.jiang@intel.com
Fri Oct 10 06:20:39 GMT 2025


Hi all,

In ISE059, AMX-TRANSPOSE is removed. It will never happen to any
future hardware since x86 Advisory Group is aware of the removal.
Thus, We decide to remove the support to ease maintainence effort.

Due to the support being in Binutils 2.44/2.45, we should make sure
no one use the same encoding in the future or it will conflict
between versions. I added comments in the patch in case someone
encounter that.

Discussions are welcomed for the removal.

Thx,
Haochen

---

According to the latest ISE, AMX-TRANSPOSE support is removed. Since
it never happen to any future HW, we will directly remove the support.

Since the support has existed in major release of Binutils, we should
never utilize those encoding in the future. Add comments for that in
case someone use that.

gas/ChangeLog:

	* config/tc-i386.c (cpu_arch): Remove amx_transpose.
	(_is_cpu): Ditto.
	(cpu_flags_match): Remove APX_F handle for AMX-TRANSPOSE.
	(install_template): Ditto.
	(process_operands): Revert ImplicitGroup change for
	AMX-TRANSPOSE.
	* doc/c-i386.texi: Remove amx_transpose.
	* testsuite/gas/i386/x86-64-amx-movrs-intel.d: Remove
	AMX-TRANSPOSE related tests.
	* testsuite/gas/i386/x86-64-amx-movrs.d: Ditto.
	* testsuite/gas/i386/x86-64-amx-movrs.s: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32-bad.d: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32-bad.s: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32-intel.d: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32-inval.l: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32-inval.s: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32.d: Ditto.
	* testsuite/gas/i386/x86-64-amx-tf32.s: Ditto.
	* testsuite/gas/i386/x86-64-apx-evex-promoted-intel.d: Ditto.
	* testsuite/gas/i386/x86-64-apx-evex-promoted-wig.d: Ditto.
	* testsuite/gas/i386/x86-64-apx-evex-promoted.d: Ditto.
	* testsuite/gas/i386/x86-64-apx-evex-promoted.s: Ditto.
	* testsuite/gas/i386/x86-64.exp: Ditto.
	* testsuite/gas/i386/x86-64-amx-movrs-inval.l: Removed.
	* testsuite/gas/i386/x86-64-amx-movrs-inval.s: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose-bad.d: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose-bad.s: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose-intel.d: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose-inval.l: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose-inval.s: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose.d: Removed.
	* testsuite/gas/i386/x86-64-amx-transpose.s: Removed.

opcodes/ChangeLog:

	* i386-dis-evex.h: Remove AMX-TRANSPOSE table entries.
	* i386-dis.c: Ditto.
	* i386-gen.c (isa_dependencies): Remove AMX-TRANSPOSE.
	(cpu_flags): Ditto.
	(process_i386_cpu_flag): Remove special case
	for AMX-TRANSPOSE && AMX-MOVRS with APX_F extensions.
	* i386-opc.h (enum i386_cpu): Remove AMX-TRANSPOSE.
	* i386-opc.tbl: Remove AMX-TRANSPOSE related insts.
	* i386-init.h: Regenerated.
	* i386-mnem.h: Ditto.
	* i386-tbl.h: Ditto.
---
 gas/NEWS                                      |     3 +
 gas/config/tc-i386.c                          |    21 +-
 gas/doc/c-i386.texi                           |     6 +-
 .../gas/i386/x86-64-amx-movrs-intel.d         |     8 -
 .../gas/i386/x86-64-amx-movrs-inval.l         |    13 -
 .../gas/i386/x86-64-amx-movrs-inval.s         |    19 -
 gas/testsuite/gas/i386/x86-64-amx-movrs.d     |     8 -
 gas/testsuite/gas/i386/x86-64-amx-movrs.s     |    16 -
 gas/testsuite/gas/i386/x86-64-amx-tf32-bad.d  |     3 -
 gas/testsuite/gas/i386/x86-64-amx-tf32-bad.s  |     9 -
 .../gas/i386/x86-64-amx-tf32-intel.d          |     2 -
 .../gas/i386/x86-64-amx-tf32-inval.l          |     3 -
 .../gas/i386/x86-64-amx-tf32-inval.s          |     3 -
 gas/testsuite/gas/i386/x86-64-amx-tf32.d      |     2 -
 gas/testsuite/gas/i386/x86-64-amx-tf32.s      |     4 -
 .../gas/i386/x86-64-amx-transpose-bad.d       |    17 -
 .../gas/i386/x86-64-amx-transpose-bad.s       |    18 -
 .../gas/i386/x86-64-amx-transpose-intel.d     |    33 -
 .../gas/i386/x86-64-amx-transpose-inval.l     |    15 -
 .../gas/i386/x86-64-amx-transpose-inval.s     |    18 -
 gas/testsuite/gas/i386/x86-64-amx-transpose.d |    31 -
 gas/testsuite/gas/i386/x86-64-amx-transpose.s |    51 -
 gas/testsuite/gas/i386/x86-64.exp             |     5 -
 opcodes/i386-dis-evex.h                       |     4 +-
 opcodes/i386-dis.c                            |   191 +-
 opcodes/i386-gen.c                            |     3 -
 opcodes/i386-init.h                           |   578 +-
 opcodes/i386-mnem.h                           |  4428 ++--
 opcodes/i386-opc.h                            |     3 -
 opcodes/i386-opc.tbl                          |    22 -
 opcodes/i386-tbl.h                            | 18369 ++++++++--------
 31 files changed, 11607 insertions(+), 12299 deletions(-)
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-movrs-inval.l
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-movrs-inval.s
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose-bad.d
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose-bad.s
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose-intel.d
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose-inval.l
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose-inval.s
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose.d
 delete mode 100644 gas/testsuite/gas/i386/x86-64-amx-transpose.s

diff --git a/gas/NEWS b/gas/NEWS
index 4de0cfbcc91..cd7ccc58c68 100644
--- a/gas/NEWS
+++ b/gas/NEWS
@@ -1,5 +1,8 @@
 -*- text -*-
 
+* Support for x86 AMX-TRANSPOSE has been dropped, as all the hardware would
+  not support the feature.
+
 * ELF targets can now have section entity size specified for arbitrary
   sections, using the new attribute letter 'E'.
 
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 7f7f62be8f5..9701d269086 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1188,7 +1188,6 @@ static const arch_entry cpu_arch[] =
   SUBARCH (amx_bf16, AMX_BF16, ANY_AMX_BF16, false),
   SUBARCH (amx_fp16, AMX_FP16, ANY_AMX_FP16, false),
   SUBARCH (amx_complex, AMX_COMPLEX, ANY_AMX_COMPLEX, false),
-  SUBARCH (amx_transpose, AMX_TRANSPOSE, ANY_AMX_TRANSPOSE, false),
   SUBARCH (amx_tf32, AMX_TF32, ANY_AMX_TF32, false),
   SUBARCH (amx_fp8, AMX_FP8, ANY_AMX_FP8, false),
   SUBARCH (amx_movrs, AMX_MOVRS, ANY_AMX_MOVRS, false),
@@ -1871,7 +1870,6 @@ _is_cpu (const i386_cpu_attr *a, enum i386_cpu cpu)
     case CpuAVX512VL: return a->bitfield.cpuavx512vl;
     case CpuAPX_F:    return a->bitfield.cpuapx_f;
     case CpuAVX10_2:  return a->bitfield.cpuavx10_2;
-    case CpuAMX_TRANSPOSE:  return a->bitfield.cpuamx_transpose;
     case Cpu64:       return a->bitfield.cpu64;
     case CpuNo64:     return a->bitfield.cpuno64;
     default:
@@ -10906,24 +10904,15 @@ process_operands (void)
       unsigned int op, extra;
       const reg_entry *first;
 
-      /* The second operand must be {x,y,z,t}mmN.  */
-      gas_assert ((i.operands == 2 || i.operands == 3)
-		  && i.types[1].bitfield.class == RegSIMD);
+      /* The second operand must be {x,y,z}mmN.  */
+      gas_assert (i.operands == 3 && i.types[1].bitfield.class == RegSIMD);
 
-      switch (i.types[i.operands - 1].bitfield.class)
+      switch (i.types[2].bitfield.class)
 	{
 	case RegSIMD:
+	  /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of 4. */
 	  op = 1;
-	  if (i.operands == 2)
-	    {
-	      /* AMX-TRANSPOSE operand 2: N must be a multiple of 2. */
-	      extra = 1;
-	    }
-	  else
-	    {
-	      /* AVX512-{4FMAPS,4VNNIW} operand 2: N must be a multiple of 4. */
-	      extra = 3;
-	    }
+	  extra = 3;
 	  break;
 
 	case RegMask:
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index 6598a04e6ef..407f4e67a3a 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -229,7 +229,6 @@ accept various extension mnemonics.  For example,
 @code{amx_bf16},
 @code{amx_fp16},
 @code{amx_complex},
-@code{amx_transpose},
 @code{amx_tf32},
 @code{amx_fp8}
 @code{amx_movrs},
@@ -1723,9 +1722,8 @@ supported on the CPU specified.  The choices for @var{cpu_type} are:
 @item @samp{.shstk} @tab @samp{.gfni} @tab @samp{.vaes} @tab @samp{.vpclmulqdq}
 @item @samp{.movdiri} @tab @samp{.movdir64b} @tab @samp{.enqcmd} @tab @samp{.tsxldtrk}
 @item @samp{.amx_int8} @tab @samp{.amx_bf16} @tab @samp{.amx_fp16}
-@item @samp{.amx_complex} @tab @samp{.amx_transpose} @tab @samp{.amx_tf32}
-@item @samp{.amx_fp8} @tab @samp{.amx_movrs} @tab @samp{.amx_avx512}
-@item @samp{.amx_tile}
+@item @samp{.amx_complex} @tab @samp{.amx_tf32} @tab @samp{.amx_fp8}
+@item @samp{.amx_movrs} @tab @samp{.amx_avx512} @tab @samp{.amx_tile}
 @item @samp{.kl} @tab @samp{.widekl} @tab @samp{.uintr} @tab @samp{.hreset}
 @item @samp{.3dnow} @tab @samp{.3dnowa} @tab @samp{.sse4a} @tab @samp{.sse5}
 @item @samp{.syscall} @tab @samp{.rdtscp} @tab @samp{.svme}
diff --git a/gas/testsuite/gas/i386/x86-64-amx-movrs-intel.d b/gas/testsuite/gas/i386/x86-64-amx-movrs-intel.d
index f4cd0bd0911..f0798f75a4d 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-movrs-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-amx-movrs-intel.d
@@ -8,14 +8,6 @@ Disassembly of section \.text:
 
 #...
 [a-f0-9]+ <_intel>:
-\s*[a-f0-9]+:\s*c4 a5 78 f8 b4 f5 00 00 00 10\s+t2rpntlvwz0rs tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c5 78 f8 14 21\s+t2rpntlvwz0rs tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a5 78 f9 b4 f5 00 00 00 10\s+t2rpntlvwz0rst1 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c5 78 f9 14 21\s+t2rpntlvwz0rst1 tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a5 79 f8 b4 f5 00 00 00 10\s+t2rpntlvwz1rs tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c5 79 f8 14 21\s+t2rpntlvwz1rs tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a5 79 f9 b4 f5 00 00 00 10\s+t2rpntlvwz1rst1 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c5 79 f9 14 21\s+t2rpntlvwz1rst1 tmm2,\[r9\+riz\*1\]
 \s*[a-f0-9]+:\s*c4 a2 7b 4a b4 f5 00 00 00 10\s+tileloaddrs tmm6,\[rbp\+r14\*8\+0x10000000\]
 \s*[a-f0-9]+:\s*c4 c2 7b 4a 1c 21\s+tileloaddrs tmm3,\[r9\+riz\*1\]
 \s*[a-f0-9]+:\s*c4 a2 79 4a b4 f5 00 00 00 10\s+tileloaddrst1 tmm6,\[rbp\+r14\*8\+0x10000000\]
diff --git a/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.l b/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.l
deleted file mode 100644
index aa49c0d3533..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.l
+++ /dev/null
@@ -1,13 +0,0 @@
-.* Assembler messages:
-.*:5: Error: `\(%rip\)' cannot be used here
-.*:6: Error: `\(%rip\)' cannot be used here
-.*:7: Error: `\(%rip\)' cannot be used here
-.*:8: Error: `\(%rip\)' cannot be used here
-.*:9: Warning: operand 2 `%tmm1' implicitly denotes `%tmm0' to `%tmm1' group in `t2rpntlvwz0rs'
-.*:10: Warning: operand 2 `%tmm3' implicitly denotes `%tmm2' to `%tmm3' group in `t2rpntlvwz0rst1'
-.*:11: Warning: operand 2 `%tmm5' implicitly denotes `%tmm4' to `%tmm5' group in `t2rpntlvwz1rs'
-.*:12: Warning: operand 2 `%tmm7' implicitly denotes `%tmm6' to `%tmm7' group in `t2rpntlvwz1rst1'
-.*:16: Error: `t2rpntlvwz0rs' is not supported on `x86_64.noamx_transpose'
-.*:17: Error: `t2rpntlvwz0rst1' is not supported on `x86_64.noamx_transpose'
-.*:18: Error: `t2rpntlvwz1rs' is not supported on `x86_64.noamx_transpose'
-.*:19: Error: `t2rpntlvwz1rst1' is not supported on `x86_64.noamx_transpose'
diff --git a/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.s b/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.s
deleted file mode 100644
index 98b54f38ece..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-movrs-inval.s
+++ /dev/null
@@ -1,19 +0,0 @@
-# Check Invalid 64bit AMX-MOVRS instructions
-
-	.text
-_start:
-	t2rpntlvwz0rs	(%rip), %tmm2
-	t2rpntlvwz0rst1	(%rip), %tmm2
-	t2rpntlvwz1rs	(%rip), %tmm2
-	t2rpntlvwz1rst1	(%rip), %tmm2
-	t2rpntlvwz0rs	(%r9), %tmm1
-	t2rpntlvwz0rst1	(%r9), %tmm3
-	t2rpntlvwz1rs	(%r9), %tmm5
-	t2rpntlvwz1rst1	(%r9), %tmm7
-
-	.arch .noamx_transpose
-_transpose:
-	t2rpntlvwz0rs	(%r9), %tmm2
-	t2rpntlvwz0rst1	(%r9), %tmm2
-	t2rpntlvwz1rs	(%r9), %tmm2
-	t2rpntlvwz1rst1	(%r9), %tmm2
diff --git a/gas/testsuite/gas/i386/x86-64-amx-movrs.d b/gas/testsuite/gas/i386/x86-64-amx-movrs.d
index b0bc77e8f15..5c65d57de32 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-movrs.d
+++ b/gas/testsuite/gas/i386/x86-64-amx-movrs.d
@@ -6,14 +6,6 @@
 Disassembly of section \.text:
 
 0+ <_start>:
-\s*[a-f0-9]+:\s*c4 a5 78 f8 b4 f5 00 00 00 10\s+t2rpntlvwz0rs 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c5 78 f8 14 21\s+t2rpntlvwz0rs \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a5 78 f9 b4 f5 00 00 00 10\s+t2rpntlvwz0rst1 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c5 78 f9 14 21\s+t2rpntlvwz0rst1 \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a5 79 f8 b4 f5 00 00 00 10\s+t2rpntlvwz1rs 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c5 79 f8 14 21\s+t2rpntlvwz1rs \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a5 79 f9 b4 f5 00 00 00 10\s+t2rpntlvwz1rst1 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c5 79 f9 14 21\s+t2rpntlvwz1rst1 \(%r9,%riz,1\),%tmm2
 \s*[a-f0-9]+:\s*c4 a2 7b 4a b4 f5 00 00 00 10\s+tileloaddrs 0x10000000\(%rbp,%r14,8\),%tmm6
 \s*[a-f0-9]+:\s*c4 c2 7b 4a 1c 21\s+tileloaddrs \(%r9,%riz,1\),%tmm3
 \s*[a-f0-9]+:\s*c4 a2 79 4a b4 f5 00 00 00 10\s+tileloaddrst1 0x10000000\(%rbp,%r14,8\),%tmm6
diff --git a/gas/testsuite/gas/i386/x86-64-amx-movrs.s b/gas/testsuite/gas/i386/x86-64-amx-movrs.s
index 07b6aba2a57..6303b475b6c 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-movrs.s
+++ b/gas/testsuite/gas/i386/x86-64-amx-movrs.s
@@ -2,14 +2,6 @@
 
 	.text
 _start:
-	t2rpntlvwz0rs	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz0rs	(%r9), %tmm2
-	t2rpntlvwz0rst1	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz0rst1	(%r9), %tmm2
-	t2rpntlvwz1rs	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz1rs	(%r9), %tmm2
-	t2rpntlvwz1rst1	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz1rst1	(%r9), %tmm2
 	tileloaddrs	0x10000000(%rbp, %r14, 8), %tmm6
 	tileloaddrs	(%r9), %tmm3
 	tileloaddrst1	0x10000000(%rbp, %r14, 8), %tmm6
@@ -17,14 +9,6 @@ _start:
 
 _intel:
 	.intel_syntax noprefix
-	t2rpntlvwz0rs	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz0rs	tmm2, [r9]
-	t2rpntlvwz0rst1	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz0rst1	tmm2, [r9]
-	t2rpntlvwz1rs	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz1rs	tmm2, [r9]
-	t2rpntlvwz1rst1	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz1rst1	tmm2, [r9]
 	tileloaddrs	tmm6, [rbp+r14*8+0x10000000]
 	tileloaddrs	tmm3, [r9]
 	tileloaddrst1	tmm6, [rbp+r14*8+0x10000000]
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.d b/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.d
index bcf8674b06c..a3f2185f465 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.d
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.d
@@ -10,7 +10,4 @@ Disassembly of section \.text:
 \s*[a-f0-9]+:\s*c4 e2 71 48 d1\s+tmmultf32ps %tmm1/\(bad\),%tmm1/\(bad\),%tmm2
 \s*[a-f0-9]+:\s*c4 e2 69 48 c9\s+tmmultf32ps %tmm2,%tmm1/\(bad\),%tmm1/\(bad\)
 \s*[a-f0-9]+:\s*c4 e2 71 48 ca\s+tmmultf32ps %tmm1/\(bad\),%tmm2,%tmm1\/\(bad\)
-\s*[a-f0-9]+:\s*c4 e2 70 48 d1\s+ttmmultf32ps %tmm1/\(bad\),%tmm1/\(bad\),%tmm2
-\s*[a-f0-9]+:\s*c4 e2 68 48 c9\s+ttmmultf32ps %tmm2,%tmm1/\(bad\),%tmm1/\(bad\)
-\s*[a-f0-9]+:\s*c4 e2 70 48 ca\s+ttmmultf32ps %tmm1/\(bad\),%tmm2,%tmm1/\(bad\)
 #pass
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.s b/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.s
index 6d0a2bb9cdc..a4424e9ddbb 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.s
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32-bad.s
@@ -7,12 +7,3 @@
 
 	# tmmultf32ps %tmm2, %tmm1, %tmm1 all tmm registers should be distinct
 	.insn VEX.128.66.0F38.W0 0x48, %tmm2, %tmm1, %tmm1
-
-	# ttmmultf32ps %tmm1, %tmm1, %tmm2 all tmm registers should be distinct
-	.insn VEX.128.NP.0F38.W0 0x48, %tmm1, %tmm1, %tmm2
-
-	# ttmmultf32ps %tmm1, %tmm2, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.NP.0F38.W0 0x48, %tmm1, %tmm2, %tmm1
-
-	# ttmmultf32ps %tmm2, %tmm1, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.NP.0F38.W0 0x48, %tmm2, %tmm1, %tmm1
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32-intel.d b/gas/testsuite/gas/i386/x86-64-amx-tf32-intel.d
index cc9a1d34061..807f3430900 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32-intel.d
@@ -10,6 +10,4 @@ Disassembly of section \.text:
 [a-f0-9]+ <_intel>:
 \s*[a-f0-9]+:\s*c4 e2 59 48 f5\s+tmmultf32ps tmm6,tmm5,tmm4
 \s*[a-f0-9]+:\s*c4 e2 71 48 da\s+tmmultf32ps tmm3,tmm2,tmm1
-\s*[a-f0-9]+:\s*c4 e2 58 48 f5\s+ttmmultf32ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 70 48 da\s+ttmmultf32ps tmm3,tmm2,tmm1
 #pass
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.l b/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.l
index ea6004936e6..2ac207f90ca 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.l
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.l
@@ -2,6 +2,3 @@
 .*:5: Error: all tmm registers must be distinct for `tmmultf32ps'
 .*:6: Error: all tmm registers must be distinct for `tmmultf32ps'
 .*:7: Error: all tmm registers must be distinct for `tmmultf32ps'
-.*:8: Error: all tmm registers must be distinct for `ttmmultf32ps'
-.*:9: Error: all tmm registers must be distinct for `ttmmultf32ps'
-.*:10: Error: all tmm registers must be distinct for `ttmmultf32ps'
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.s b/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.s
index 56a3b46e6ea..7357c3c392f 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.s
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32-inval.s
@@ -5,6 +5,3 @@ _start:
 	tmmultf32ps	%tmm1, %tmm1, %tmm2
 	tmmultf32ps	%tmm1, %tmm2, %tmm1
 	tmmultf32ps	%tmm2, %tmm1, %tmm1
-	ttmmultf32ps	%tmm1, %tmm1, %tmm2
-	ttmmultf32ps	%tmm1, %tmm2, %tmm1
-	ttmmultf32ps	%tmm2, %tmm1, %tmm1
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32.d b/gas/testsuite/gas/i386/x86-64-amx-tf32.d
index 4fa91cbc040..cd321ba48aa 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32.d
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32.d
@@ -8,6 +8,4 @@ Disassembly of section \.text:
 0+ <_start>:
 \s*[a-f0-9]+:\s*c4 e2 59 48 f5\s+tmmultf32ps %tmm4,%tmm5,%tmm6
 \s*[a-f0-9]+:\s*c4 e2 71 48 da\s+tmmultf32ps %tmm1,%tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 58 48 f5\s+ttmmultf32ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 70 48 da\s+ttmmultf32ps %tmm1,%tmm2,%tmm3
 #pass
diff --git a/gas/testsuite/gas/i386/x86-64-amx-tf32.s b/gas/testsuite/gas/i386/x86-64-amx-tf32.s
index 9c1433ed49b..bb82380da48 100644
--- a/gas/testsuite/gas/i386/x86-64-amx-tf32.s
+++ b/gas/testsuite/gas/i386/x86-64-amx-tf32.s
@@ -4,12 +4,8 @@
 _start:
 	tmmultf32ps	%tmm4, %tmm5, %tmm6
 	tmmultf32ps	%tmm1, %tmm2, %tmm3
-	ttmmultf32ps	%tmm4, %tmm5, %tmm6
-	ttmmultf32ps	%tmm1, %tmm2, %tmm3
 
 _intel:
 	.intel_syntax noprefix
 	tmmultf32ps	tmm6, tmm5, tmm4
 	tmmultf32ps	tmm3, tmm2, tmm1
-	ttmmultf32ps	tmm6, tmm5, tmm4
-	ttmmultf32ps	tmm3, tmm2, tmm1
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.d b/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.d
deleted file mode 100644
index 5977c309b20..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.d
+++ /dev/null
@@ -1,17 +0,0 @@
-#objdump: -drw
-#name: x86_64 AMX_TRANSPOSE bad insns
-
-.*: +file format .*
-
-
-Disassembly of section \.text:
-
-0+ <\.text>:
-\s*[a-f0-9]+:\s*c4 e2 72 6c d1\s+ttdpbf16ps %tmm1/\(bad\),%tmm1/\(bad\),%tmm2
-\s*[a-f0-9]+:\s*c4 e2 6a 6c c9\s+ttdpbf16ps %tmm2,%tmm1/\(bad\),%tmm1/\(bad\)
-\s*[a-f0-9]+:\s*c4 e2 72 6c ca\s+ttdpbf16ps %tmm1/\(bad\),%tmm2,%tmm1\/\(bad\)
-\s*[a-f0-9]+:\s*c4 e2 73 6c d1\s+ttdpfp16ps %tmm1/\(bad\),%tmm1/\(bad\),%tmm2
-\s*[a-f0-9]+:\s*c4 e2 6b 6c c9\s+ttdpfp16ps %tmm2,%tmm1/\(bad\),%tmm1/\(bad\)
-\s*[a-f0-9]+:\s*c4 e2 73 6c ca\s+ttdpfp16ps %tmm1/\(bad\),%tmm2,%tmm1/\(bad\)
-#pass
-
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.s b/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.s
deleted file mode 100644
index 060045146aa..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose-bad.s
+++ /dev/null
@@ -1,18 +0,0 @@
-	.text
-	# ttdpbf16ps %tmm1, %tmm1, %tmm2 all tmm registers should be distinct
-	.insn VEX.128.f3.0F38.W0 0x6c, %tmm1, %tmm1, %tmm2
-
-	# ttdpbf16ps %tmm1, %tmm2, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.f3.0F38.W0 0x6c, %tmm1, %tmm2, %tmm1
-
-	# ttdpbf16ps %tmm2, %tmm1, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.f3.0F38.W0 0x6c, %tmm2, %tmm1, %tmm1
-
-	# ttdpfp16ps %tmm1, %tmm1, %tmm2 all tmm registers should be distinct
-	.insn VEX.128.f2.0F38.W0 0x6c, %tmm1, %tmm1, %tmm2
-
-	# ttdpfp16ps %tmm1, %tmm2, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.f2.0F38.W0 0x6c, %tmm1, %tmm2, %tmm1
-
-	# ttdpfp16ps %tmm2, %tmm1, %tmm1 all tmm registers should be distinct
-	.insn VEX.128.f2.0F38.W0 0x6c, %tmm2, %tmm1, %tmm1
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose-intel.d b/gas/testsuite/gas/i386/x86-64-amx-transpose-intel.d
deleted file mode 100644
index e50f09436c8..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose-intel.d
+++ /dev/null
@@ -1,33 +0,0 @@
-#objdump: -dw -Mintel
-#name: x86_64 AMX-TRANSPOSE insns (Intel disassembly)
-#source: x86-64-amx-transpose.s
-
-.*: +file format .*
-
-Disassembly of section \.text:
-
-#...
-[a-f0-9]+ <_intel>:
-\s*[a-f0-9]+:\s*c4 e2 5a 6c f5\s+ttdpbf16ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 72 6c da\s+ttdpbf16ps tmm3,tmm2,tmm1
-\s*[a-f0-9]+:\s*c4 e2 5b 6c f5\s+ttdpfp16ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 73 6c da\s+ttdpfp16ps tmm3,tmm2,tmm1
-\s*[a-f0-9]+:\s*c4 e2 7a 5f f5\s+ttransposed tmm6,tmm5
-\s*[a-f0-9]+:\s*c4 e2 7a 5f da\s+ttransposed tmm3,tmm2
-\s*[a-f0-9]+:\s*c4 a2 78 6e b4 f5 00 00 00 10\s+t2rpntlvwz0 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c2 78 6e 14 21\s+t2rpntlvwz0 tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a2 78 6f b4 f5 00 00 00 10\s+t2rpntlvwz0t1 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c2 78 6f 14 21\s+t2rpntlvwz0t1 tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a2 79 6e b4 f5 00 00 00 10\s+t2rpntlvwz1 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c2 79 6e 14 21\s+t2rpntlvwz1 tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 a2 79 6f b4 f5 00 00 00 10\s+t2rpntlvwz1t1 tmm6,\[rbp\+r14\*8\+0x10000000\]
-\s*[a-f0-9]+:\s*c4 c2 79 6f 14 21\s+t2rpntlvwz1t1 tmm2,\[r9\+riz\*1\]
-\s*[a-f0-9]+:\s*c4 e2 58 6b f5\s+tconjtcmmimfp16ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 70 6b da\s+tconjtcmmimfp16ps tmm3,tmm2,tmm1
-\s*[a-f0-9]+:\s*c4 e2 79 6b f5\s+tconjtfp16 tmm6,tmm5
-\s*[a-f0-9]+:\s*c4 e2 79 6b da\s+tconjtfp16 tmm3,tmm2
-\s*[a-f0-9]+:\s*c4 e2 5b 6b f5\s+ttcmmimfp16ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 73 6b da\s+ttcmmimfp16ps tmm3,tmm2,tmm1
-\s*[a-f0-9]+:\s*c4 e2 5a 6b f5\s+ttcmmrlfp16ps tmm6,tmm5,tmm4
-\s*[a-f0-9]+:\s*c4 e2 72 6b da\s+ttcmmrlfp16ps tmm3,tmm2,tmm1
-#pass
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.l b/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.l
deleted file mode 100644
index 76baedb6ecc..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.l
+++ /dev/null
@@ -1,15 +0,0 @@
-.* Assembler messages:
-.*:5: Error: all tmm registers must be distinct for `ttdpbf16ps'
-.*:6: Error: all tmm registers must be distinct for `ttdpbf16ps'
-.*:7: Error: all tmm registers must be distinct for `ttdpbf16ps'
-.*:8: Error: all tmm registers must be distinct for `ttdpfp16ps'
-.*:9: Error: all tmm registers must be distinct for `ttdpfp16ps'
-.*:10: Error: all tmm registers must be distinct for `ttdpfp16ps'
-.*:11: Error: `\(%rip\)' cannot be used here
-.*:12: Error: `\(%rip\)' cannot be used here
-.*:13: Error: `\(%rip\)' cannot be used here
-.*:14: Error: `\(%rip\)' cannot be used here
-.*:15: Warning: operand 2 `%tmm1' implicitly denotes `%tmm0' to `%tmm1' group in `t2rpntlvwz0'
-.*:16: Warning: operand 2 `%tmm3' implicitly denotes `%tmm2' to `%tmm3' group in `t2rpntlvwz0t1'
-.*:17: Warning: operand 2 `%tmm5' implicitly denotes `%tmm4' to `%tmm5' group in `t2rpntlvwz1'
-.*:18: Warning: operand 2 `%tmm7' implicitly denotes `%tmm6' to `%tmm7' group in `t2rpntlvwz1t1'
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.s b/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.s
deleted file mode 100644
index 7002b3bb160..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose-inval.s
+++ /dev/null
@@ -1,18 +0,0 @@
-# Check Illegal AMX-TRANSPOSE instructions
-
-	.text
-_start:
-	ttdpbf16ps	%tmm1, %tmm1, %tmm2
-	ttdpbf16ps	%tmm1, %tmm2, %tmm1
-	ttdpbf16ps	%tmm2, %tmm1, %tmm1
-	ttdpfp16ps	%tmm1, %tmm1, %tmm2
-	ttdpfp16ps	%tmm1, %tmm2, %tmm1
-	ttdpfp16ps	%tmm2, %tmm1, %tmm1
-	t2rpntlvwz0	(%rip), %tmm2
-	t2rpntlvwz0t1	(%rip), %tmm2
-	t2rpntlvwz1	(%rip), %tmm2
-	t2rpntlvwz1t1	(%rip), %tmm2
-	t2rpntlvwz0	(%r9), %tmm1
-	t2rpntlvwz0t1	(%r9), %tmm3
-	t2rpntlvwz1	(%r9), %tmm5
-	t2rpntlvwz1t1	(%r9), %tmm7
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose.d b/gas/testsuite/gas/i386/x86-64-amx-transpose.d
deleted file mode 100644
index 47f989136a4..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose.d
+++ /dev/null
@@ -1,31 +0,0 @@
-#objdump: -dw
-#name: x86_64 AMX-TRANSPOSE insns
-
-.*: +file format .*
-
-Disassembly of section \.text:
-
-0+ <_start>:
-\s*[a-f0-9]+:\s*c4 e2 5a 6c f5\s+ttdpbf16ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 72 6c da\s+ttdpbf16ps %tmm1,%tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 5b 6c f5\s+ttdpfp16ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 73 6c da\s+ttdpfp16ps %tmm1,%tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 7a 5f f5\s+ttransposed %tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 7a 5f da\s+ttransposed %tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 a2 78 6e b4 f5 00 00 00 10\s+t2rpntlvwz0 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c2 78 6e 14 21\s+t2rpntlvwz0 \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a2 78 6f b4 f5 00 00 00 10\s+t2rpntlvwz0t1 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c2 78 6f 14 21\s+t2rpntlvwz0t1 \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a2 79 6e b4 f5 00 00 00 10\s+t2rpntlvwz1 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c2 79 6e 14 21\s+t2rpntlvwz1 \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 a2 79 6f b4 f5 00 00 00 10\s+t2rpntlvwz1t1 0x10000000\(%rbp,%r14,8\),%tmm6
-\s*[a-f0-9]+:\s*c4 c2 79 6f 14 21\s+t2rpntlvwz1t1 \(%r9,%riz,1\),%tmm2
-\s*[a-f0-9]+:\s*c4 e2 58 6b f5\s+tconjtcmmimfp16ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 70 6b da\s+tconjtcmmimfp16ps %tmm1,%tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 79 6b f5\s+tconjtfp16 %tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 79 6b da\s+tconjtfp16 %tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 5b 6b f5\s+ttcmmimfp16ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 73 6b da\s+ttcmmimfp16ps %tmm1,%tmm2,%tmm3
-\s*[a-f0-9]+:\s*c4 e2 5a 6b f5\s+ttcmmrlfp16ps %tmm4,%tmm5,%tmm6
-\s*[a-f0-9]+:\s*c4 e2 72 6b da\s+ttcmmrlfp16ps %tmm1,%tmm2,%tmm3
-#pass
diff --git a/gas/testsuite/gas/i386/x86-64-amx-transpose.s b/gas/testsuite/gas/i386/x86-64-amx-transpose.s
deleted file mode 100644
index b13c3406288..00000000000
--- a/gas/testsuite/gas/i386/x86-64-amx-transpose.s
+++ /dev/null
@@ -1,51 +0,0 @@
-# Check 64bit AMX-TRANSPOSE instructions
-
-	.text
-_start:
-	ttdpbf16ps	%tmm4, %tmm5, %tmm6
-	ttdpbf16ps	%tmm1, %tmm2, %tmm3
-	ttdpfp16ps	%tmm4, %tmm5, %tmm6
-	ttdpfp16ps	%tmm1, %tmm2, %tmm3
-	ttransposed	%tmm5, %tmm6
-	ttransposed	%tmm2, %tmm3
-	t2rpntlvwz0	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz0	(%r9), %tmm2
-	t2rpntlvwz0t1	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz0t1	(%r9), %tmm2
-	t2rpntlvwz1	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz1	(%r9), %tmm2
-	t2rpntlvwz1t1	0x10000000(%rbp, %r14, 8), %tmm6
-	t2rpntlvwz1t1	(%r9), %tmm2
-	tconjtcmmimfp16ps	%tmm4, %tmm5, %tmm6
-	tconjtcmmimfp16ps	%tmm1, %tmm2, %tmm3
-	tconjtfp16	%tmm5, %tmm6
-	tconjtfp16	%tmm2, %tmm3
-	ttcmmimfp16ps	%tmm4, %tmm5, %tmm6
-	ttcmmimfp16ps	%tmm1, %tmm2, %tmm3
-	ttcmmrlfp16ps	%tmm4, %tmm5, %tmm6
-	ttcmmrlfp16ps	%tmm1, %tmm2, %tmm3
-
-_intel:
-	.intel_syntax noprefix
-	ttdpbf16ps	tmm6, tmm5, tmm4
-	ttdpbf16ps	tmm3, tmm2, tmm1
-	ttdpfp16ps	tmm6, tmm5, tmm4
-	ttdpfp16ps	tmm3, tmm2, tmm1
-	ttransposed	tmm6, tmm5
-	ttransposed	tmm3, tmm2
-	t2rpntlvwz0	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz0	tmm2, [r9]
-	t2rpntlvwz0t1	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz0t1	tmm2, [r9]
-	t2rpntlvwz1	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz1	tmm2, [r9]
-	t2rpntlvwz1t1	tmm6, [rbp+r14*8+0x10000000]
-	t2rpntlvwz1t1	tmm2, [r9]
-	tconjtcmmimfp16ps       tmm6, tmm5, tmm4
-	tconjtcmmimfp16ps       tmm3, tmm2, tmm1
-	tconjtfp16      tmm6, tmm5
-	tconjtfp16      tmm3, tmm2
-	ttcmmimfp16ps   tmm6, tmm5, tmm4
-	ttcmmimfp16ps   tmm3, tmm2, tmm1
-	ttcmmrlfp16ps   tmm6, tmm5, tmm4
-	ttcmmrlfp16ps   tmm3, tmm2, tmm1
diff --git a/gas/testsuite/gas/i386/x86-64.exp b/gas/testsuite/gas/i386/x86-64.exp
index fd42263e59a..c26b096b718 100644
--- a/gas/testsuite/gas/i386/x86-64.exp
+++ b/gas/testsuite/gas/i386/x86-64.exp
@@ -520,10 +520,6 @@ run_dump_test "x86-64-avx10_2-256-sm4-intel"
 run_dump_test "x86-64-avx10_2-512-sm4"
 run_dump_test "x86-64-avx10_2-512-sm4-intel"
 run_list_test "x86-64-avx10_2-sm4-inval"
-run_dump_test "x86-64-amx-transpose"
-run_dump_test "x86-64-amx-transpose-intel"
-run_list_test "x86-64-amx-transpose-inval"
-run_dump_test "x86-64-amx-transpose-bad"
 run_dump_test "x86-64-amx-tf32"
 run_dump_test "x86-64-amx-tf32-intel"
 run_list_test "x86-64-amx-tf32-inval"
@@ -534,7 +530,6 @@ run_list_test "x86-64-amx-fp8-inval"
 run_dump_test "x86-64-amx-fp8-bad"
 run_dump_test "x86-64-amx-movrs"
 run_dump_test "x86-64-amx-movrs-intel"
-run_list_test "x86-64-amx-movrs-inval"
 run_dump_test "x86-64-amx-avx512"
 run_dump_test "x86-64-amx-avx512-intel"
 run_dump_test "x86-64-movrs"
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 5281ab6ab9e..9fdfde3566f 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -1445,8 +1445,8 @@ static const struct dis386 evex_table[][256] = {
     { Bad_Opcode },
     { Bad_Opcode },
     /* F8 */
-    { X86_64_EVEX_FROM_VEX_TABLE (X86_64_VEX_MAP5_F8) },
-    { X86_64_EVEX_FROM_VEX_TABLE (X86_64_VEX_MAP5_F9) },
+    { Bad_Opcode },
+    { Bad_Opcode },
     { Bad_Opcode },
     { Bad_Opcode },
     { Bad_Opcode },
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index e6637ab26f7..6128bfa9298 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1139,11 +1139,7 @@ enum
   PREFIX_VEX_0F3851_W_0,
   PREFIX_VEX_0F385C_X86_64_L_0_W_0,
   PREFIX_VEX_0F385E_X86_64_L_0_W_0,
-  PREFIX_VEX_0F385F_X86_64_L_0_W_0,
-  PREFIX_VEX_0F386B_X86_64_L_0_W_0,
   PREFIX_VEX_0F386C_X86_64_L_0_W_0,
-  PREFIX_VEX_0F386E_X86_64_L_0_W_0,
-  PREFIX_VEX_0F386F_X86_64_L_0_W_0,
   PREFIX_VEX_0F3872,
   PREFIX_VEX_0F38B0_W_0,
   PREFIX_VEX_0F38B1_W_0,
@@ -1159,8 +1155,6 @@ enum
   PREFIX_VEX_0F38F6_L_0,
   PREFIX_VEX_0F38F7_L_0,
   PREFIX_VEX_0F3AF0_L_0,
-  PREFIX_VEX_MAP5_F8_X86_64_L_0_W_0,
-  PREFIX_VEX_MAP5_F9_X86_64_L_0_W_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,
@@ -1366,15 +1360,9 @@ enum
   X86_64_VEX_0F384B,
   X86_64_VEX_0F385C,
   X86_64_VEX_0F385E,
-  X86_64_VEX_0F385F,
-  X86_64_VEX_0F386B,
   X86_64_VEX_0F386C,
-  X86_64_VEX_0F386E,
-  X86_64_VEX_0F386F,
   X86_64_VEX_0F38Ex,
 
-  X86_64_VEX_MAP5_F8,
-  X86_64_VEX_MAP5_F9,
   X86_64_VEX_MAP5_FD,
   X86_64_VEX_MAP7_F6_L_0_W_0_R_0,
   X86_64_VEX_MAP7_F8_L_0_W_0_R_0,
@@ -1462,11 +1450,7 @@ enum
   VEX_LEN_0F385A,
   VEX_LEN_0F385C_X86_64,
   VEX_LEN_0F385E_X86_64,
-  VEX_LEN_0F385F_X86_64,
-  VEX_LEN_0F386B_X86_64,
   VEX_LEN_0F386C_X86_64,
-  VEX_LEN_0F386E_X86_64,
-  VEX_LEN_0F386F_X86_64,
   VEX_LEN_0F38CB_P_3_W_0,
   VEX_LEN_0F38CC_P_3_W_0,
   VEX_LEN_0F38CD_P_3_W_0,
@@ -1505,8 +1489,6 @@ enum
   VEX_LEN_0F3ADE_W_0,
   VEX_LEN_0F3ADF,
   VEX_LEN_0F3AF0,
-  VEX_LEN_MAP5_F8_X86_64,
-  VEX_LEN_MAP5_F9_X86_64,
   VEX_LEN_MAP5_FD_X86_64,
   VEX_LEN_MAP7_F6,
   VEX_LEN_MAP7_F8,
@@ -1648,11 +1630,7 @@ enum
   VEX_W_0F385A_L_0,
   VEX_W_0F385C_X86_64_L_0,
   VEX_W_0F385E_X86_64_L_0,
-  VEX_W_0F385F_X86_64_L_0,
-  VEX_W_0F386B_X86_64_L_0,
   VEX_W_0F386C_X86_64_L_0,
-  VEX_W_0F386E_X86_64_L_0,
-  VEX_W_0F386F_X86_64_L_0,
   VEX_W_0F3872_P_1,
   VEX_W_0F3878,
   VEX_W_0F3879,
@@ -1685,8 +1663,6 @@ enum
   VEX_W_0F3ACE,
   VEX_W_0F3ACF,
   VEX_W_0F3ADE,
-  VEX_W_MAP5_F8_X86_64_L_0,
-  VEX_W_MAP5_F9_X86_64_L_0,
   VEX_W_MAP5_FD_X86_64_L_0,
   VEX_W_MAP7_F6_L_0,
   VEX_W_MAP7_F8_L_0,
@@ -4119,7 +4095,7 @@ static const struct dis386 prefix_table[][4] = {
 
   /* PREFIX_VEX_0F3848_X86_64_L_0_W_0 */
   {
-    { "ttmmultf32ps",	{ TMM, Rtmm, VexTmm }, 0 },
+    { Bad_Opcode },	/* AMX-TRANSPOSE drop.  */
     { Bad_Opcode },
     { "tmmultf32ps",	{ TMM, Rtmm, VexTmm }, 0 },
   },
@@ -4186,40 +4162,12 @@ static const struct dis386 prefix_table[][4] = {
     { "tdpbssd", {TMM, Rtmm, VexTmm }, 0 },
   },
 
-  /* PREFIX_VEX_0F385F_X86_64_L_0_W_0 */
-  {
-    { Bad_Opcode },
-    { "ttransposed",	{ TMM, Rtmm }, 0 },
-  },
-
-  /* PREFIX_VEX_0F386B_X86_64_L_0_W_0 */
-  {
-    { "tconjtcmmimfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-    { "ttcmmrlfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-    { "tconjtfp16",	{ TMM, Rtmm }, 0 },
-    { "ttcmmimfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-  },
-
   /* PREFIX_VEX_0F386C_X86_64_L_0_W_0 */
   {
     { "tcmmrlfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-    { "ttdpbf16ps",	{ TMM, Rtmm, VexTmm }, 0 },
+    { Bad_Opcode },	/* AMX-TRANSPOSE drop.  */
     { "tcmmimfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-    { "ttdpfp16ps",	{ TMM, Rtmm, VexTmm }, 0 },
-  },
-
-  /* PREFIX_VEX_0F386E_X86_64_L_0_W_0 */
-  {
-    { "t2rpntlvwz0",	{ TMM, MVexSIBMEM }, 0 },
-    { Bad_Opcode },
-    { "t2rpntlvwz1",	{ TMM, MVexSIBMEM }, 0 },
-  },
-
-  /* PREFIX_VEX_0F386F_X86_64_L_0_W_0 */
-  {
-    { "t2rpntlvwz0t1",	{ TMM, MVexSIBMEM }, 0 },
-    { Bad_Opcode },
-    { "t2rpntlvwz1t1",	{ TMM, MVexSIBMEM }, 0 },
+    { Bad_Opcode },	/* AMX-TRANSPOSE drop.  */
   },
 
   /* PREFIX_VEX_0F3872 */
@@ -4331,20 +4279,6 @@ static const struct dis386 prefix_table[][4] = {
     { "%XErorxS",		{ Gdq, Edq, Ib }, 0 },
   },
 
-  /* PREFIX_VEX_MAP5_F8_X86_64_L_0_W_0 */
-  {
-    { "t2rpntlvwz0rs",	{ TMM, MVexSIBMEM }, 0 },
-    { Bad_Opcode },
-    { "t2rpntlvwz1rs",	{ TMM, MVexSIBMEM }, 0 },
-  },
-
-  /* PREFIX_VEX_MAP5_F9_X86_64_L_0_W_0 */
-  {
-    { "t2rpntlvwz0rst1",	{ TMM, MVexSIBMEM }, 0 },
-    { Bad_Opcode },
-    { "t2rpntlvwz1rst1",	{ TMM, MVexSIBMEM }, 0 },
-  },
-
   /* PREFIX_VEX_MAP5_FD_X86_64_L_0_W_0 */
   {
     { "tdpbf8ps",	{ TMM, Rtmm, VexTmm }, 0 },
@@ -4749,54 +4683,18 @@ static const struct dis386 x86_64_table[][2] = {
     { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64) },
   },
 
-  /* X86_64_VEX_0F385F */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_0F385F_X86_64) },
-  },
-
-  /* X86_64_VEX_0F386B */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_0F386B_X86_64) },
-  },
-
   /* X86_64_VEX_0F386C */
   {
     { Bad_Opcode },
     { VEX_LEN_TABLE (VEX_LEN_0F386C_X86_64) },
   },
 
-  /* X86_64_VEX_0F386E */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_0F386E_X86_64) },
-  },
-
-  /* X86_64_VEX_0F386F */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_0F386F_X86_64) },
-  },
-
   /* X86_64_VEX_0F38Ex */
   {
     { Bad_Opcode },
     { "%XEcmp%CCxadd", { Mdq, Gdq, VexGdq }, PREFIX_DATA },
   },
 
-  /* X86_64_VEX_MAP5_F8 */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_MAP5_F8_X86_64) },
-  },
-
-  /* X86_64_VEX_MAP5_F9 */
-  {
-    { Bad_Opcode },
-    { VEX_LEN_TABLE (VEX_LEN_MAP5_F9_X86_64) },
-  },
-
   /* X86_64_VEX_MAP5_FD */
   {
     { Bad_Opcode },
@@ -6681,7 +6579,9 @@ static const struct dis386 vex_table[][256] = {
     { X86_64_TABLE (X86_64_VEX_0F385C) },
     { Bad_Opcode },
     { X86_64_TABLE (X86_64_VEX_0F385E) },
-    { X86_64_TABLE (X86_64_VEX_0F385F) },
+    /* VEX_0F385F_X86_64_L_0_W_0_P_1 should always be bad due to
+       AMX-TRANSPOSE drop.  */
+    { Bad_Opcode },
     /* 60 */
     { Bad_Opcode },
     { Bad_Opcode },
@@ -6695,11 +6595,17 @@ static const struct dis386 vex_table[][256] = {
     { Bad_Opcode },
     { Bad_Opcode },
     { Bad_Opcode },
-    { X86_64_TABLE (X86_64_VEX_0F386B) },
+    /* Any prefixes under VEX_0F386B_X86_64_L_0_W_0 should always
+       be bad due to AMX-TRANSPOSE drop.  */
+    { Bad_Opcode },
     { X86_64_TABLE (X86_64_VEX_0F386C) },
     { Bad_Opcode },
-    { X86_64_TABLE (X86_64_VEX_0F386E) },
-    { X86_64_TABLE (X86_64_VEX_0F386F) },
+    /* P0/2 under VEX_0F386E_X86_64_L_0_W_0 should always be bad
+       due to AMX-TRANSPOSE drop.  */
+    { Bad_Opcode },
+    /* P0/2 under VEX_0F386F_X86_64_L_0_W_0 should always be bad
+       due to AMX-TRANSPOSE drop.  */
+    { Bad_Opcode },
     /* 70 */
     { Bad_Opcode },
     { Bad_Opcode },
@@ -7372,31 +7278,11 @@ static const struct dis386 vex_len_table[][2] = {
     { VEX_W_TABLE (VEX_W_0F385E_X86_64_L_0) },
   },
 
-  /* VEX_LEN_0F385F_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_0F385F_X86_64_L_0) },
-  },
-
-  /* VEX_LEN_0F386B_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_0F386B_X86_64_L_0) },
-  },
-
   /* VEX_LEN_0F386C_X86_64 */
   {
     { VEX_W_TABLE (VEX_W_0F386C_X86_64_L_0) },
   },
 
-  /* VEX_LEN_0F386E_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_0F386E_X86_64_L_0) },
-  },
-
-  /* VEX_LEN_0F386F_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_0F386F_X86_64_L_0) },
-  },
-
   /* VEX_LEN_0F38CB_P_3_W_0 */
   {
     { Bad_Opcode },
@@ -7598,16 +7484,6 @@ static const struct dis386 vex_len_table[][2] = {
     { PREFIX_TABLE (PREFIX_VEX_0F3AF0_L_0) },
   },
 
-  /* VEX_LEN_MAP5_F8_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_MAP5_F8_X86_64_L_0) },
-  },
-
-  /* VEX_LEN_MAP5_F9_X86_64 */
-  {
-    { VEX_W_TABLE (VEX_W_MAP5_F9_X86_64_L_0) },
-  },
-
   /* VEX_LEN_MAP5_FD_X86_64 */
   {
     { VEX_W_TABLE (VEX_W_MAP5_FD_X86_64_L_0) },
@@ -8099,26 +7975,10 @@ static const struct dis386 vex_w_table[][2] = {
     /* VEX_W_0F385E_X86_64_L_0 */
     { PREFIX_TABLE (PREFIX_VEX_0F385E_X86_64_L_0_W_0) },
   },
-  {
-    /* VEX_W_0F385F_X86_64_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F385F_X86_64_L_0_W_0) },
-  },
-  {
-    /* VEX_W_0F386B_X86_64_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F386B_X86_64_L_0_W_0) },
-  },
   {
     /* VEX_W_0F386C_X86_64_L_0 */
     { PREFIX_TABLE (PREFIX_VEX_0F386C_X86_64_L_0_W_0) },
   },
-  {
-    /* VEX_W_0F386E_X86_64_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F386E_X86_64_L_0_W_0) },
-  },
-  {
-    /* VEX_W_0F386F_X86_64_L_0 */
-    { PREFIX_TABLE (PREFIX_VEX_0F386F_X86_64_L_0_W_0) },
-  },
   {
     /* VEX_W_0F3872_P_1 */
     { "%XVvcvtneps2bf16%XY", { XMM, EXx }, 0 },
@@ -8253,14 +8113,6 @@ static const struct dis386 vex_w_table[][2] = {
     /* VEX_W_0F3ADE */
     { VEX_LEN_TABLE (VEX_LEN_0F3ADE_W_0) },
   },
-  {
-    /* VEX_W_MAP5_F8_X86_64 */
-    { PREFIX_TABLE (PREFIX_VEX_MAP5_F8_X86_64_L_0_W_0) },
-  },
-  {
-    /* VEX_W_MAP5_F9_X86_64 */
-    { PREFIX_TABLE (PREFIX_VEX_MAP5_F9_X86_64_L_0_W_0) },
-  },
   {
     /* VEX_W_MAP5_FD_X86_64 */
     { PREFIX_TABLE (PREFIX_VEX_MAP5_FD_X86_64_L_0_W_0) },
@@ -9019,8 +8871,8 @@ static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
 /* Fetch error indicator.  */
 static const struct dis386 err_opcode = { NULL, { XX }, 0 };
 
-static const struct dis386 map5_f8_opcode = { X86_64_TABLE (X86_64_VEX_MAP5_F8) };
-static const struct dis386 map5_f9_opcode = { X86_64_TABLE (X86_64_VEX_MAP5_F9) };
+/* P0/2 under VEX_MAP5_F8/F9_X86_64_L_0_W_0 should always be bad due to
+   AMX-TRANSPOSE drop.  */
 static const struct dis386 map5_fd_opcode = { X86_64_TABLE (X86_64_VEX_MAP5_FD) };
 static const struct dis386 map7_f6_opcode = { VEX_LEN_TABLE (VEX_LEN_MAP7_F6) };
 static const struct dis386 map7_f8_opcode = { VEX_LEN_TABLE (VEX_LEN_MAP7_F8) };
@@ -9342,14 +9194,7 @@ get_valid_dis386 (const struct dis386 *dp, instr_info *ins)
       else if (vindex == 0xf6)
 	dp = &map7_f6_opcode;
       else if (vindex == 0xf8)
-	{
-	  if (vex_table_index == VEX_MAP5)
-	    dp = &map5_f8_opcode;
-	  else
-	    dp = &map7_f8_opcode;
-	}
-      else if (vindex == 0xf9)
-	dp = &map5_f9_opcode;
+	dp = &map7_f8_opcode;
       else if (vindex == 0xfd)
 	dp = &map5_fd_opcode;
       else
diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c
index 97ded8c8b50..b6e5334ce54 100644
--- a/opcodes/i386-gen.c
+++ b/opcodes/i386-gen.c
@@ -267,8 +267,6 @@ static const dependency isa_dependencies[] =
     "AMX_TILE" },
   { "AMX_COMPLEX",
     "AMX_TILE" },
-  { "AMX_TRANSPOSE",
-    "AMX_TILE" },
   { "AMX_TF32",
     "AMX_TILE" },
   { "AMX_FP8",
@@ -454,7 +452,6 @@ static bitfield cpu_flags[] =
   BITFIELD (AMX_BF16),
   BITFIELD (AMX_FP16),
   BITFIELD (AMX_COMPLEX),
-  BITFIELD (AMX_TRANSPOSE),
   BITFIELD (AMX_TF32),
   BITFIELD (AMX_FP8),
   BITFIELD (AMX_MOVRS),
diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
index 86fe0b86059..9f97b566aec 100644
--- a/opcodes/i386-opc.h
+++ b/opcodes/i386-opc.h
@@ -347,8 +347,6 @@ enum i386_cpu
   CpuAPX_F,
   /* Intel AVX10.2 Instructions support required.  */
   CpuAVX10_2,
-  /* Intel AMX-TRANSPOSE Instructions support required.  */
-  CpuAMX_TRANSPOSE,
   /* Not supported in the 64bit mode  */
   CpuNo64,
 
@@ -386,7 +384,6 @@ enum i386_cpu
 		   cpuavx512vl:1, \
 		   cpuapx_f:1, \
 		   cpuavx10_2:1, \
-		   cpuamx_transpose:1, \
       /* NOTE: This field needs to remain last. */ \
 		   cpuno64:1
 
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index 72461410412..cc7260e8786 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -3242,29 +3242,7 @@ tilerelease, 0x49c0, AMX_TILE, Vex128|Space0F38|VexW0|NoSuf, {}
 
 tilezero, 0xf249, AMX_TILE, Modrm|Vex128|Space0F38|VexW0|NoSuf, { RegTMM }
 
-<z:pfx, z0:, z1:66>
-
-<loc:opc, $t:0x0, t1:0x1>
-
-t2rpntlvw<z><loc>, 0x<z:pfx>6e | <loc:opc>, AMX_TRANSPOSE, Sibmem|Vex128|Space0F38|VexW0|NoSuf|ImplicitGroup, { Unspecified|BaseIndex, RegTMM }
-t2rpntlvw<z>rs<loc>, 0x<z:pfx>f8 | <loc:opc>, AMX_TRANSPOSE&AMX_MOVRS, Sibmem|Vex128|Map5|VexW0|NoSuf|ImplicitGroup, { Unspecified|BaseIndex, RegTMM }
-
-<z>
-<loc>
-
-tconjtcmmimfp16ps, 0x6b, AMX_COMPLEX&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-tconjtfp16, 0x666b, AMX_COMPLEX&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|VexW0|NoSuf, { RegTMM, RegTMM }
-
-ttcmmimfp16ps, 0xf26b, AMX_COMPLEX&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-ttcmmrlfp16ps, 0xf36b, AMX_COMPLEX&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-
-ttdpbf16ps, 0xf36c, AMX_BF16&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-ttdpfp16ps, 0xf26c, AMX_FP16&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-
-ttransposed, 0xf35f, AMX_TRANSPOSE, Modrm|Vex128|Space0F38|VexW0|NoSuf, { RegTMM, RegTMM }
-
 tmmultf32ps, 0x6648, AMX_TF32, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-ttmmultf32ps, 0x48, AMX_TF32&AMX_TRANSPOSE, Modrm|Vex128|Space0F38|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
 
 tdpbf8ps, 0xfd, AMX_FP8, Modrm|Vex128|Map5|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
 tdpbhf8ps, 0xf2fd, AMX_FP8, Modrm|Vex128|Map5|Src2VVVV|VexW0|NoSuf, { RegTMM, RegTMM, RegTMM }
-- 
2.31.1



More information about the Binutils mailing list