x86: tighten extend-to-32bit-address conditions
authorJan Beulich <jbeulich@suse.com>
Fri, 19 May 2023 07:14:40 +0000 (09:14 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 19 May 2023 07:14:40 +0000 (09:14 +0200)
In a442cac5084e ("ix86: wrap constants") I made the truncation condition
too relaxed: Any indication of a mode that's possible with BFD64 only
should avoid the truncation. Therefore, like in the other two cases of
calls to extend_to_32bit_address(), also check whether we're generating
a 64-bit object.

gas/config/tc-i386.c

index c0bf4fc0c4e8c3636e152f5656334c0d82231806..9efb1e58447422f485b71ed5cdef9065c9f541bd 100644 (file)
@@ -11684,7 +11684,7 @@ i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
 
       /* If not 64bit, sign/zero extend val, to account for wraparound
         when !BFD64.  */
-      if (flag_code != CODE_64BIT)
+      if (flag_code != CODE_64BIT && !object_64bit)
        exp->X_add_number = extend_to_32bit_address (exp->X_add_number);
     }
 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT))
@@ -11976,7 +11976,7 @@ i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
 
         If not 64bit, sign/zero extend val, to account for wraparound
         when !BFD64.  */
-      if (flag_code != CODE_64BIT)
+      if (flag_code != CODE_64BIT && !object_64bit)
        exp->X_add_number = extend_to_32bit_address (exp->X_add_number);
     }