aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-31 21:01:23 +0000
committerRichard Stallman <rms@gnu.org>1993-03-31 21:01:23 +0000
commit0b540bf4e57da4f21022373117d10de463888426 (patch)
tree322b82df11c2f263ff12ee127ede55f4672a5c09
parent0fa83258de63ad09dcba856b3ac43f9139fc2ff6 (diff)
downloadgcc-0b540bf4e57da4f21022373117d10de463888426.zip
gcc-0b540bf4e57da4f21022373117d10de463888426.tar.gz
gcc-0b540bf4e57da4f21022373117d10de463888426.tar.bz2
(ASM_OUTPUT_DOUBLE, PRINT_OPERAND):
Use new REAL_VALUE... macros. From-SVN: r3967
-rw-r--r--gcc/config/m68k/crds.h29
1 files changed, 16 insertions, 13 deletions
diff --git a/gcc/config/m68k/crds.h b/gcc/config/m68k/crds.h
index 33c3ec5..f20b34e 100644
--- a/gcc/config/m68k/crds.h
+++ b/gcc/config/m68k/crds.h
@@ -4,7 +4,7 @@
Written by Gary E. Miller
bug reports to Gary_Edmunds_Miller@cup.portal.com
- Copyright (C) 1987 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1993 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -168,9 +168,9 @@ bss_section () \
#undef ASM_OUTPUT_DOUBLE
#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
-do { union { double f; long l[2];} tem; \
- tem.f = (VALUE); \
- fprintf (FILE, "\t.long 0x%x, 0x%x\n", tem.l[0], tem.l[1]); \
+do { long l[2]; \
+ REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \
+ fprintf (FILE, "\t.long 0x%x, 0x%x\n", l[0], l[1]); \
} while (0)
/*unos has no .skip :-( */
@@ -300,18 +300,21 @@ do { union { double f; long l[2];} tem; \
&& (i = standard_sun_fpa_constant_p (X))) \
fprintf (FILE, "%%%d", i & 0x1ff); \
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; long l; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
if (CODE == 'f') \
- ASM_OUTPUT_FLOAT_OPERAND (FILE, u1.f); \
+ ASM_OUTPUT_FLOAT_OPERAND (CODE, FILE, r); \
else \
- fprintf (FILE, "$0x%x", u1.i); } \
+ { 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); \
- ASM_OUTPUT_DOUBLE_OPERAND (FILE, u.d); } \
+ { REAL_VALUE_TYPE r; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ ASM_OUTPUT_DOUBLE_OPERAND (FILE, r); } \
else { putc ('$', FILE); output_addr_const (FILE, X); }}
/* Note that this contains a kludge that knows that the only reason