#define CC1_SPEC "%{sun4:} %{target:}"
-#if 0
-/* ??? This fails because REAL_VALUE_TYPE is `double' making it impossible to
- represent and output `long double' constants. This causes problems during
- a bootstrap with enquire/float.h, and hence must be disabled for now.
- To fix, we need to implement code for TFmode just like the existing XFmode
- support in real.[ch]. */
-/* Sparc ABI says that long double is 4 words. */
-
-#define LONG_DOUBLE_TYPE_SIZE 128
-#endif
-
#define PTRDIFF_TYPE "int"
/* In 2.4 it should work to delete this.
#define SIZE_TYPE "int" */
\f
/* target machine storage layout */
+#if 0
+/* ??? This fails because REAL_VALUE_TYPE is `double' making it impossible to
+ represent and output `long double' constants. This causes problems during
+ a bootstrap with enquire/float.h, and hence must be disabled for now.
+ To fix, we need to implement code for TFmode just like the existing XFmode
+ support in real.[ch]. */
+/* Define for support of TFmode long double and REAL_ARITHMETIC.
+ Sparc ABI says that long double is 4 words. */
+#define LONG_DOUBLE_TYPE_SIZE 128
+#endif
+
+/* Define for cross-compilation to a sparc target with no TFmode from a host
+ with a different float format (e.g. VAX). */
+#define REAL_ARITHMETIC
+
/* Define this if most significant bit is lowest numbered
in instructions that operate on numbered bit-fields. */
#define BITS_BIG_ENDIAN 1
ASM_LONG, t[0], ASM_LONG, t[1]); \
} \
else \
- fprintf (FILE, "\t.double 0r%.17g\n", VALUE); \
+ { \
+ char str[30]; \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.17g", str); \
+ fprintf (FILE, "\t.double 0r%s\n", str); \
+ } \
}
/* This is how to output an assembler line defining a `float' constant. */
fprintf (FILE, "\t%s\t0x%lx\n", ASM_LONG, t); \
} \
else \
- fprintf (FILE, "\t.single 0r%.9g\n", VALUE); \
+ { \
+ char str[30]; \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.9g", str); \
+ fprintf (FILE, "\t.single 0r%s\n", str); \
+ } \
}
/* This is how to output an assembler line defining a `long double'