x86: minor improvements to optimize_disp() (part II)
authorJan Beulich <jbeulich@suse.com>
Tue, 8 Jun 2021 12:56:39 +0000 (14:56 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 8 Jun 2021 12:56:39 +0000 (14:56 +0200)
- Don't kind-of-open-code fits_in_unsigned_{word,long}().
- Fold two if()s both using fits_in_unsigned_long().

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

index e2084f89cdb168f6b94e397d3915380d4fbd45a9..5f19f8590cfc5c5fd663300d69be4bfb3382238e 100644 (file)
@@ -1,3 +1,8 @@
+2021-06-08  Jan Beulich  <jbeulich@suse.com>
+
+       * config/tc-i386.c (optimize_disp): Use fits_in_unsigned_word
+       and fits_in_unsigned_long. Combine if()s.
+
 2021-06-08  Jan Beulich  <jbeulich@suse.com>
 
        * config/tc-i386.c (optimize_disp): Write back updated value.
index 249f1c366781541385bdc63b36584deb3d934a03..17398ee987d18276d16d0ca9cd3ad165c363794b 100644 (file)
@@ -5893,7 +5893,7 @@ optimize_disp (void)
              }
 
            if (i.types[op].bitfield.disp16
-               && (op_disp & ~(offsetT) 0xffff) == 0)
+               && fits_in_unsigned_word (op_disp))
              {
                /* If this operand is at most 16 bits, convert
                   to a signed 16 bit number and don't use 64bit
@@ -5905,19 +5905,17 @@ optimize_disp (void)
 #ifdef BFD64
            if (flag_code == CODE_64BIT)
              {
-               if (want_disp32 (current_templates->start)
-                   && fits_in_unsigned_long (op_disp))
-                 i.types[op].bitfield.disp32 = 1;
-
                /* Optimize 64-bit displacement to 32-bit for 64-bit BFD.  */
-               if (i.types[op].bitfield.disp32
-                   && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0)
+               if ((i.types[op].bitfield.disp32
+                    || want_disp32 (current_templates->start))
+                   && fits_in_unsigned_long (op_disp))
                  {
                    /* If this operand is at most 32 bits, convert
                       to a signed 32 bit number and don't use 64bit
                       displacement.  */
                    op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31);
                    i.types[op].bitfield.disp64 = 0;
+                   i.types[op].bitfield.disp32 = 1;
                  }
 
                if (fits_in_signed_long (op_disp))