aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-31 21:31:49 +0000
committerRichard Stallman <rms@gnu.org>1993-03-31 21:31:49 +0000
commit04ea6a84dfc047c64cdefef78a75de5d41aacedb (patch)
tree08ec8496846a47fb2dcaac4ed48b59d76d63e023 /gcc
parente86c153f461b245c47aabba13c1d7e334bd40227 (diff)
downloadgcc-04ea6a84dfc047c64cdefef78a75de5d41aacedb.zip
gcc-04ea6a84dfc047c64cdefef78a75de5d41aacedb.tar.gz
gcc-04ea6a84dfc047c64cdefef78a75de5d41aacedb.tar.bz2
(LIBCALL_VALUE): Handle XFmode.
(PRINT_OPERAND, ASM_OUTPUT_DOUBLE): Use REAL_VALUE... macros. From-SVN: r3975
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/m68k/news.h41
1 files changed, 28 insertions, 13 deletions
diff --git a/gcc/config/m68k/news.h b/gcc/config/m68k/news.h
index 623568b..b23bb40 100644
--- a/gcc/config/m68k/news.h
+++ b/gcc/config/m68k/news.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler. SONY NEWS-OS 4 version.
- Copyright (C) 1987, 1989 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1989, 1993 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -120,8 +120,11 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define FUNCTION_VALUE(VALTYPE,FUNC) LIBCALL_VALUE (TYPE_MODE (VALTYPE))
-#define LIBCALL_VALUE(MODE) \
- gen_rtx (REG, (MODE), ((TARGET_68881 && ((MODE) == SFmode || (MODE) == DFmode)) ? 16 : 0))
+#define LIBCALL_VALUE(MODE) \
+ gen_rtx (REG, (MODE), \
+ ((TARGET_68881 \
+ && ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode)) \
+ ? 16 : 0))
#define ASM_OUTPUT_ALIGN(FILE,LOG) \
fprintf (FILE, "\t.align %d\n", (LOG))
@@ -258,7 +261,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
fprintf (FILE, "\tmove.l (sp)+,%s\n", reg_names[REGNO])
#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
- fprintf (FILE, "\t.double 0d%.20e\n", (VALUE))
+do { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \
+ fprintf (FILE, "\t.double 0d%s\n", dstr); \
+ } while (0)
#define ASM_OUTPUT_SKIP(FILE,SIZE) \
fprintf (FILE, "\t.space %u\n", (SIZE))
@@ -299,18 +305,27 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
else if (GET_CODE (X) == MEM) \
output_address (XEXP (X, 0)); \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == SFmode) \
- { union { double d; int i[2]; } u; \
- union { float f; int i; } u1; \
- u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X); \
- u1.f = u.d; \
+ { REAL_VALUE_TYPE r; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
if (CODE == 'f') \
- fprintf (FILE, "#0f%.9e", u1.f); \
+ { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL (r, "%.9e", dstr); \
+ fprintf (FILE, "#0f%s", dstr); \
+ } \
else \
- fprintf (FILE, "#0x%x", u1.i); } \
+ { long l; \
+ REAL_VALUE_TO_TARGET_SINGLE (r, l); \
+ fprintf (FILE, "#0x%x", l); \
+ }} \
+ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \
+ { REAL_VALUE_TYPE r; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ ASM_OUTPUT_LONG_DOUBLE_OPERAND (FILE, r); } \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != DImode) \
- { union { double d; int i[2]; } u; \
- u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X); \
- fprintf (FILE, "#0d%.20e", u.d); } \
+ { REAL_VALUE_TYPE r; char dstr[30]; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ REAL_VALUE_TO_DECIMAL (r, "%.20e", dstr ); \
+ fprintf (FILE, "#0d%s", dstr); } \
else if (CODE == 'b') output_addr_const (FILE, X); \
else { putc ('#', FILE); output_addr_const (FILE, X); }}