[PATCH 1/4] x86/APX: handle EVEX.V4 in build_evex_prefix()

Jan Beulich jbeulich@suse.com
Fri Aug 21 13:07:44 GMT 2026


There's no need to defer to the more expensive build_apx_evex_prefix().
This way is_apx_evex_encoding() ends up simpler / cheaper as well.

--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -4547,9 +4547,7 @@ is_any_vex_encoding (const insn_template
 static INLINE bool
 is_apx_evex_encoding (void)
 {
-  return i.rex2 || i.tm.opcode_space == SPACE_MAP4 || pp.has_nf
-    || (i.vex.register_specifier
-	&& (i.vex.register_specifier->reg_flags & RegRex2));
+  return i.rex2 || i.tm.opcode_space == SPACE_MAP4 || pp.has_nf;
 }
 
 static INLINE bool
@@ -4649,7 +4647,7 @@ build_evex_prefix (void)
 	register_specifier += 8;
       /* The upper 16 registers are encoded in the fourth byte of the
 	 EVEX prefix.  */
-      if (!(i.vex.register_specifier->reg_flags & RegVRex))
+      if (!(i.vex.register_specifier->reg_flags & (RegVRex | RegRex2)))
 	i.vex.bytes[3] = 0x8;
       register_specifier = ~register_specifier & 0xf;
     }
@@ -4879,9 +4877,6 @@ build_apx_evex_prefix (bool force_nd)
       gas_assert (i.rm.mode != 3);
       i.vex.bytes[2] &= ~0x04;
     }
-  if (i.vex.register_specifier
-      && i.vex.register_specifier->reg_flags & RegRex2)
-    i.vex.bytes[3] &= ~0x08;
 
   /* Encode the NDD bit of the instruction promoted from the legacy
      space. ZU shares the same bit with NDD.  */



More information about the Binutils mailing list