x86: Remove 32-bit sign extension in offset_in_range
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 13 Jul 2020 17:18:39 +0000 (10:18 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 13 Jul 2020 17:32:15 +0000 (10:32 -0700)
When encoding a 32-bit offset, there is no need to sign-extend it to 64
bits since only the lower 32 bits are used.

* config/tc-i386.c (offset_in_range): Remove 32-bit sign
extension.

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

index 01862e0875e6c6a73b5ab6b998a59ab17dcc20bb..aa49a90f75989de74dc037ea9ed07082c360f490 100644 (file)
@@ -1,3 +1,8 @@
+2020-07-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (offset_in_range): Remove 32-bit sign
+       extension.
+
 2020-07-13  Nick Clifton  <nickc@redhat.com>
 
        * po/fr.po: Updated French translation.
index 18f685c8b1a7c1bff575db35e08e9938a7ded926..192c5e1ae3af154de36abd6cbb0e07f4f088b40b 100644 (file)
@@ -2539,14 +2539,6 @@ offset_in_range (offsetT val, int size)
     default: abort ();
     }
 
-#ifdef BFD64
-  /* If BFD64, sign extend val for 32bit address mode.  */
-  if (flag_code != CODE_64BIT
-      || i.prefix[ADDR_PREFIX])
-    if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
-      val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
-#endif
-
   if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
     {
       char buf1[40], buf2[40];