x86: move register check in immediate operand parsing
authorJan Beulich <jbeulich@suse.com>
Fri, 7 May 2021 10:02:40 +0000 (12:02 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 7 May 2021 10:02:40 +0000 (12:02 +0200)
i386_finalize_immediate() is used for both AT&T and Intel immediate
operand handling. Move an AT&T-only check to i386_immediate(), which at
the same time allows it to cover other cases as well, giving an overall
better / more consistent diagnostic.

gas/ChangeLog
gas/config/tc-i386.c

index ad82f9b3c75c28daceeb38d574365f19d169f4c4..ba307b85f638c72fa5e350851f8c04dac1d09b01 100644 (file)
@@ -1,3 +1,9 @@
+2021-05-07  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.c (i386_finalize_immediate): Move register
+       check ...
+       (i386_immediate): ... here.
+
 2021-05-07  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (optimize_imm): Drop redundant masking.
index c09d63f5e210fe96e7c45a01807a6a9033d1f90a..7e1d1552438182ad707465cfd1242458f382c3c5 100644 (file)
@@ -10690,10 +10690,16 @@ i386_immediate (char *imm_start)
     {
       free (gotfree_input_line);
 
-      if (exp->X_op == O_constant || exp->X_op == O_register)
+      if (exp->X_op == O_constant)
        exp->X_op = O_illegal;
     }
 
+  if (exp_seg == reg_section)
+    {
+      as_bad (_("illegal immediate register operand %s"), imm_start);
+      return 0;
+    }
+
   return i386_finalize_immediate (exp_seg, exp, types, imm_start);
 }
 
@@ -10731,12 +10737,6 @@ i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
       return 0;
     }
 #endif
-  else if (!intel_syntax && exp_seg == reg_section)
-    {
-      if (imm_start)
-       as_bad (_("illegal immediate register operand %s"), imm_start);
-      return 0;
-    }
   else
     {
       /* This is an address.  The size of the address will be