]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: fold IEEE encoding of -Inf with that of +Inf
authorJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:36:53 +0000 (08:36 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 11 Aug 2021 06:36:53 +0000 (08:36 +0200)
The respective results differ only by the sign bits - there's no need to
have basically identical (partially even arch-specific) logic twice.
Simply set the sign bit at the end of encoding the various formats.

gas/config/atof-ieee.c

index 9cf6aced4ab65e637260d8f3507d788385e80987..17abf4ab22aa1f4d4ca1db747adad147fcac87a6 100644 (file)
@@ -387,6 +387,7 @@ gen_to_words (LITTLENUM_TYPE *words, int precision, long exponent_bits)
       return return_value;
 
     case 'P':
+    case 'N':
       if (TC_LARGEST_EXPONENT_IS_NORMAL (precision))
        as_warn (_("Infinities are not supported by this target"));
 
@@ -428,50 +429,10 @@ gen_to_words (LITTLENUM_TYPE *words, int precision, long exponent_bits)
          words[2] = 0;
          words[3] = 0;
        }
-      return return_value;
 
-    case 'N':
-      if (TC_LARGEST_EXPONENT_IS_NORMAL (precision))
-       as_warn (_("Infinities are not supported by this target"));
+      if (generic_floating_point_number.sign == 'N')
+       words[0] |= 0x8000;
 
-      /* Negative INF.  */
-      if (precision == H_PRECISION /* also B_PRECISION */)
-       {
-         words[0] = exponent_bits == 5 ? 0xfc00 : 0xff80;
-       }
-      else if (precision == F_PRECISION)
-       {
-         words[0] = 0xff80;
-         words[1] = 0x0;
-       }
-      else if (precision == X_PRECISION)
-       {
-#ifdef TC_M68K
-         words[0] = 0xffff;
-         words[1] = 0;
-         words[2] = 0;
-         words[3] = 0;
-         words[4] = 0;
-         words[5] = 0;
-#else /* ! TC_M68K  */
-#ifdef TC_I386
-         words[0] = 0xffff;
-         words[1] = 0x8000;
-         words[2] = 0;
-         words[3] = 0;
-         words[4] = 0;
-#else /* ! TC_I386  */
-         abort ();
-#endif /* ! TC_I386  */
-#endif /* ! TC_M68K  */
-       }
-      else
-       {
-         words[0] = 0xfff0;
-         words[1] = 0x0;
-         words[2] = 0x0;
-         words[3] = 0x0;
-       }
       return return_value;
     }