(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT):
authorRichard Stallman <rms@gnu.org>
Sat, 22 May 1993 19:44:07 +0000 (19:44 +0000)
committerRichard Stallman <rms@gnu.org>
Sat, 22 May 1993 19:44:07 +0000 (19:44 +0000)
Use hex if infinite, nan, or minus zero.

From-SVN: r4538

gcc/config/alpha/alpha.h

index 7437fcca814bccd8b052508359a537e3586231c3..594b9ffc66227620291ff8b6bc2f598db77e3e18 100644 (file)
@@ -1467,19 +1467,44 @@ literal_section ()                                              \
 
 /* This is how to output an assembler line defining a `double' constant.  */
 
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE)                  \
-do { char dstr[30];                                    \
-     REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr);     \
-     fprintf (FILE, "\t.t_floating %s\n", dstr);       \
-   } while (0)
+#define ASM_OUTPUT_DOUBLE(FILE,VALUE)                                  \
+  {                                                                    \
+    if (REAL_VALUE_ISINF (VALUE)                                       \
+        || REAL_VALUE_ISNAN (VALUE)                                    \
+       || REAL_VALUE_MINUS_ZERO (VALUE))                               \
+      {                                                                        \
+       long t[2];                                                      \
+       REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t);                       \
+       fprintf (FILE, "\t.quad 0x%lx%08lx\n",                          \
+               t[1] & 0xffffffff, t[0] & 0xffffffff);                  \
+      }                                                                        \
+    else                                                               \
+      {                                                                        \
+       char str[30];                                                   \
+       REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", str);                    \
+       fprintf (FILE, "\t.t_floating %s\n", str);                      \
+      }                                                                        \
+  }
 
 /* This is how to output an assembler line defining a `float' constant.  */
 
-#define ASM_OUTPUT_FLOAT(FILE,VALUE)                   \
-do { char dstr[30];                                    \
-     REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr);     \
-     fprintf (FILE, "\t.s_floating %s\n", dstr);       \
-   } while (0)
+#define ASM_OUTPUT_FLOAT(FILE,VALUE)                                   \
+  {                                                                    \
+    if (REAL_VALUE_ISINF (VALUE)                                       \
+        || REAL_VALUE_ISNAN (VALUE)                                    \
+       || REAL_VALUE_MINUS_ZERO (VALUE))                               \
+      {                                                                        \
+       long t;                                                         \
+       REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t);                       \
+       fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff);              \
+      }                                                                        \
+    else                                                               \
+      {                                                                        \
+       char str[30];                                                   \
+       REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str);                  \
+       fprintf (FILE, "\t.s_floating %s\n", str);                      \
+      }                                                                        \
+  }
   
 /* This is how to output an assembler line defining an `int' constant.  */