(PRINT_OPERAND): Turned off: use default.
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 15 Feb 1997 23:40:49 +0000 (18:40 -0500)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 15 Feb 1997 23:40:49 +0000 (18:40 -0500)
(ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}_OPERAND): Defined.

From-SVN: r13645

gcc/config/m68k/news.h

index de665da9aeb7a347f30e7efefd64ba9101555703..f83524cc0cf1ea44d8d7cba59575ed62d6585fde 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions of target machine for GNU compiler.  SONY NEWS-OS 4 version.
-   Copyright (C) 1987, 1989, 1993, 1994, 1996 Free Software Foundation, Inc.
+   Copyright (C) 1987, 89, 93, 94, 96, 1997 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -105,8 +105,6 @@ Boston, MA 02111-1307, USA.  */
 #undef ASM_OUTPUT_DOUBLE
 #undef ASM_OUTPUT_SKIP
 #undef ASM_FORMAT_PRIVATE_NAME
-#undef PRINT_OPERAND
-#undef PRINT_OPERAND_ADDRESS
 #endif  
 
 #undef ASM_OUTPUT_ALIGN
@@ -299,6 +297,66 @@ do { char dstr[30];                                        \
 ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 13),   \
   sprintf ((OUTPUT), "%s$$$%d", (NAME), (LABELNO)))
 
+/* Output a float value (represented as a C double) as an immediate operand.
+   This macro is a 68k-specific macro.  */
+
+#undef ASM_OUTPUT_FLOAT_OPERAND
+#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE)                      \
+ do {                                                                  \
+      if (CODE == 'f')                                                 \
+        {                                                              \
+          char dstr[30];                                               \
+          REAL_VALUE_TO_DECIMAL (VALUE, "%.9e", dstr);                 \
+          if (REAL_VALUE_ISINF (VALUE) || REAL_VALUE_ISNAN (VALUE))    \
+           {                                                           \
+             if (REAL_VALUE_NEGATIVE (VALUE))                          \
+               fprintf (FILE, "#0f-99e999");                           \
+             else                                                      \
+               fprintf (FILE, "#0f99e999");                            \
+           }                                                           \
+          else if (REAL_VALUE_MINUS_ZERO (VALUE))                      \
+            fprintf (FILE, "#0f-0.0");                                 \
+          else                                                         \
+            fprintf (FILE, "#0f%s", dstr);                             \
+        }                                                              \
+      else                                                             \
+        {                                                              \
+          long l;                                                      \
+          REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);                      \
+          fprintf (FILE, "#0x%lx", l);                                 \
+        }                                                              \
+     } while (0)
+
+/* Output a double value (represented as a C double) as an immediate operand.
+   This macro is a 68k-specific macro.  */
+#undef ASM_OUTPUT_DOUBLE_OPERAND
+#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                          \
+ do { char dstr[30];                                                   \
+      REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr );                   \
+      if (REAL_VALUE_ISINF (VALUE) || REAL_VALUE_ISNAN (VALUE))                \
+       {                                                               \
+        if (REAL_VALUE_NEGATIVE (VALUE))                               \
+          fprintf (FILE, "#0d-99e999");                                        \
+        else                                                           \
+          fprintf (FILE, "#0d99e999");                                 \
+       }                                                               \
+      else if (REAL_VALUE_MINUS_ZERO (VALUE))                          \
+          fprintf (FILE, "#0d-0.0");                                   \
+      else                                                             \
+          fprintf (FILE, "#0d%s", dstr);                               \
+    } while (0)
+
+/* Note, long double immediate operands are not actually
+   generated by m68k.md.  */
+#undef ASM_OUTPUT_LONG_DOUBLE_OPERAND
+#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE)                     \
+ do { char dstr[30];                                                   \
+      REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr);                    \
+      asm_fprintf (FILE, "%I0r%s", dstr);                              \
+    } while (0)
+
+#if 0
+#undef PRINT_OPERAND
 #define PRINT_OPERAND(FILE, X, CODE)  \
 { if (CODE == '.') fprintf (FILE, ".");                                        \
   else if (CODE == '#') fprintf (FILE, "#");                           \
@@ -354,7 +412,9 @@ do { char dstr[30];                                 \
           fprintf (FILE, "#0d%s", dstr); }                             \
   else if (CODE == 'b') output_addr_const (FILE, X);                   \
   else { putc ('#', FILE); output_addr_const (FILE, X); }}
+#endif
 
+#undef PRINT_OPERAND_ADDRESS
 #define PRINT_OPERAND_ADDRESS(FILE, ADDR)  \
 { register rtx reg1, reg2, breg, ireg;                                 \
   register rtx addr = ADDR;                                            \