[binutils-gdb] x86/Intel: adjustment to restricted suffix derivation

Jan Beulich jbeulich@sourceware.org
Wed Nov 30 08:10:34 GMT 2022


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fcaf78fe4d05b0516304f6b8a3be1ba1d74cbbeb

commit fcaf78fe4d05b0516304f6b8a3be1ba1d74cbbeb
Author: Jan Beulich <jbeulich@suse.com>
Date:   Wed Nov 30 09:10:17 2022 +0100

    x86/Intel: adjustment to restricted suffix derivation
    
    In "x86/Intel: restrict suffix derivation" I think I screwed up
    slightly, bringing a piece of code out of sync with its comment, and
    resulting in a suffix potentially being derived when one isn't needed.

Diff:
---
 gas/config/tc-i386-intel.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c
index 152e8e8ce24..ce4be6ac7dd 100644
--- a/gas/config/tc-i386-intel.c
+++ b/gas/config/tc-i386-intel.c
@@ -841,11 +841,16 @@ i386_intel_operand (char *operand_string, int got_a_float)
 		  abort ();
 		}
 
+	      /* We can skip templates with swappable operands here, as one
+		 operand will be a register, which operand size can be
+		 determined from.  */
+	      if (t->opcode_modifier.d)
+		continue;
+
 	      /* In a few cases suffixes are permitted, but we can nevertheless
 		 derive that these aren't going to be needed.  This is only of
-		 interest for insns using ModR/M, plus we can skip templates with
-		 swappable operands here (simplifying subsequent logic).  */
-	      if (!t->opcode_modifier.modrm || t->opcode_modifier.d)
+		 interest for insns using ModR/M.  */
+	      if (!t->opcode_modifier.modrm)
 		break;
 
 	      if (!t->operand_types[op].bitfield.baseindex)


More information about the Binutils-cvs mailing list