Cleaner, more general exponent output.
authorNeil Booth <neil@daikokuya.co.uk>
Sat, 6 Oct 2007 07:29:25 +0000 (07:29 +0000)
committerNeil Booth <neil@daikokuya.co.uk>
Sat, 6 Oct 2007 07:29:25 +0000 (07:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42690 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/APFloat.cpp

index 2be9f7b0d7161513d93d48e4f04cb82f93e5b225..ac2e5f2c2765c089922d0f441e139266ea41d0ee 100644 (file)
@@ -252,32 +252,33 @@ namespace {
     return result;
   }
 
-  /* Write out a decimal exponent.  */
+  /* Write out an unsigned decimal integer.  */
   static char *
-  writeDecimalExponent (char *dst, int exponent)
+  writeUnsignedDecimal (char *dst, unsigned int n)
   {
-    assert (exponent >= -65536 && exponent <= 65535);
+    char buff[40], *p;
 
-    if (exponent < 0) {
-      *dst++ = '-';
-      exponent = -exponent;
-    }
+    p = buff;
+    do
+      *p++ = '0' + n % 10;
+    while (n /= 10);
 
-    if (exponent == 0) {
-      *dst++ = '0';
-    } else {
-      char buff[12], *p;
+    do
+      *dst++ = *--p;
+    while (p != buff);
 
-      p = buff;
-      while (exponent) {
-        *p++ = '0' + exponent % 10;
-        exponent /= 10;
-      }
+    return dst;
+  }
 
-      do
-        *dst++ = *--p;
-      while (p != buff);
-    }
+  /* Write out a signed decimal integer.  */
+  static char *
+  writeSignedDecimal (char *dst, int value)
+  {
+    if (value < 0) {
+      *dst++ = '-';
+      dst = writeUnsignedDecimal(dst, -(unsigned) value);
+    } else
+      dst = writeUnsignedDecimal(dst, value);
 
     return dst;
   }
@@ -1865,7 +1866,7 @@ APFloat::convertNormalToHexString(char *dst, unsigned int hexDigits,
   /* Finally output the exponent.  */
   *dst++ = upperCase ? 'P': 'p';
 
-  return writeDecimalExponent (dst, exponent);
+  return writeSignedDecimal (dst, exponent);
 }
 
 // For good performance it is desirable for different APFloats