[11/11] gas: fold IEEE encoding of -Inf with that of +Inf

Message ID a5d5b118-fb0a-6fea-9bf0-36e98eaa3e3e@suse.com
State New
Headers show
Series
  • gas: adjustments to floating point data directives handling
Related show

Commit Message

Mike Frysinger via Binutils July 23, 2021, 6:59 a.m.
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.

Patch

--- a/gas/config/atof-ieee.c
+++ b/gas/config/atof-ieee.c
@@ -387,6 +387,7 @@  gen_to_words (LITTLENUM_TYPE *words, int
       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
 	  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;
     }