aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-11-05 20:27:25 +0000
committerRichard Stallman <rms@gnu.org>1993-11-05 20:27:25 +0000
commita5b1eb34fbc0ffedb7c036c03acea8794d97ad7d (patch)
treecf6ee4fb4e367c7ba2246f15cce7d95df93cc184 /gcc
parentc8f09cd21959ec4cc0104d906547ca2490d133dd (diff)
downloadgcc-a5b1eb34fbc0ffedb7c036c03acea8794d97ad7d.zip
gcc-a5b1eb34fbc0ffedb7c036c03acea8794d97ad7d.tar.gz
gcc-a5b1eb34fbc0ffedb7c036c03acea8794d97ad7d.tar.bz2
(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Use
REAL_ARITHMETIC macros including hex for special values. From-SVN: r6012
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/rs6000/rs6000.h39
1 files changed, 35 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 77fb7d2..979a644 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1890,13 +1890,44 @@ toc_section () \
/* This is how to output an assembler line defining a `double' constant. */
-#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
- fprintf (FILE, "\t.double 0d%.20e\n", (VALUE))
+#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.long 0x%lx\n\t.long 0x%lx\n", \
+ t[0] & 0xffffffff, t[1] & 0xffffffff); \
+ } \
+ else \
+ { \
+ char str[30]; \
+ REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", str); \
+ fprintf (FILE, "\t.double 0d%s\n", str); \
+ } \
+ }
/* This is how to output an assembler line defining a `float' constant. */
-#define ASM_OUTPUT_FLOAT(FILE,VALUE) \
- fprintf (FILE, "\t.float 0d%.20e\n", (VALUE))
+#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.float 0d%s\n", str); \
+ } \
+ }
/* This is how to output an assembler line defining an `int' constant. */