aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-31 21:04:47 +0000
committerRichard Stallman <rms@gnu.org>1993-03-31 21:04:47 +0000
commit475dd3b4b88e80fb96e705432da37501b798c99f (patch)
tree4e64fec5484500eccc170a80b28c9cfa7755bf8f /gcc
parent579f50b6c581a59c82d265bcfab116b493dcaea3 (diff)
downloadgcc-475dd3b4b88e80fb96e705432da37501b798c99f.zip
gcc-475dd3b4b88e80fb96e705432da37501b798c99f.tar.gz
gcc-475dd3b4b88e80fb96e705432da37501b798c99f.tar.bz2
(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, PRINT_OPERAND_FLOAT)
(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT, PRINT_OPERAND_FLOAT) (PRINT_OPERAND): Use new REAL_VALUE... macros. (ASM_OUTPUT_LONG_DOUBLE): New macro. From-SVN: r3969
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/m68k/hp320.h83
1 files changed, 44 insertions, 39 deletions
diff --git a/gcc/config/m68k/hp320.h b/gcc/config/m68k/hp320.h
index 0769e57..8714ed6 100644
--- a/gcc/config/m68k/hp320.h
+++ b/gcc/config/m68k/hp320.h
@@ -345,30 +345,25 @@ do{ if (PREFIX[0] == 'L' && PREFIX[1] == 'I') \
fprintf (FILE, "%s%d:\n", PREFIX, NUM); \
} while(0)
-#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
- fprintf (FILE, "\tdouble 0f%.20g\n", (VALUE))
-
-#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
- fprintf (FILE, "\tfloat 0f%.9g\n", (VALUE))
-
-#ifdef AS_BUG_FLOATING_CONSTANT
-#undef ASM_OUTPUT_DOUBLE_OPERAND
-#define ASM_OUTPUT_DOUBLE_OPERAND(FILE, VALUE) \
- do { \
- union { double d; int i[2]; } dummy_u; \
- dummy_u.d = (VALUE); \
- asm_fprintf (FILE, "%I0x%x%08x", dummy_u.i[0], dummy_u.i[1]); \
- } while (0)
-
-#undef ASM_OUTPUT_FLOAT_OPERAND
-#define ASM_OUTPUT_FLOAT_OPERAND(FILE, VALUE) \
- do { \
- union { float f; int i; } dummy_u; \
- dummy_u.f = (VALUE); \
- asm_fprintf (FILE, "%I0x%08x", dummy_u.i); \
- } while (0)
-#endif /* AS_BUG_FLOATING_CONSTANT */
-
+#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \
+ do { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \
+ fprintf (FILE, "\tdouble 0f%s\n", dstr); \
+ } while (0)
+
+#define ASM_OUTPUT_FLOAT(FILE, VALUE) \
+ do { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr); \
+ fprintf (FILE, "\tfloat 0f%s\n", dstr); \
+ } while (0)
+
+#undef ASM_OUTPUT_LONG_DOUBLE
+#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \
+do { long l[3]; \
+ REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \
+ fprintf (FILE, "\tlong 0x%x,0x%x,0x%x\n", l[0], l[1], l[2]); \
+ } while (0)
+
/* This is how to output an assembler line defining an `int' constant. */
#define ASM_OUTPUT_INT(FILE,VALUE) \
@@ -412,14 +407,20 @@ do{ if (PREFIX[0] == 'L' && PREFIX[1] == 'I') \
#define ASM_OUTPUT_SOURCE_LINE(FILE, LINENO)
#ifdef AS_BUG_FLOATING_CONSTANT
-#define PRINT_OPERAND_FLOAT(FILE,CODE,FLOAT,INT) \
- fprintf (FILE, "&0x%x", (INT))
+#define PRINT_OPERAND_FLOAT(CODE,FILE,VALUE,INT) \
+ do { REAL_VALUE_TO_TARGET_SINGLE (VALUE, INT); \
+ fprintf (FILE, "&0x%x", INT); } while (0)
#else
-#define PRINT_OPERAND_FLOAT(FILE,CODE,FLOAT,INT) \
- if (CODE == 'f') \
- fprintf (FILE, "&0f%.9g", (FLOAT)); \
- else \
- fprintf (FILE, "&0x%x", (INT))
+#define PRINT_OPERAND_FLOAT(CODE,FILE,VALUE,INT) \
+ do { if (CODE == 'f') \
+ { char dstr[30]; \
+ REAL_VALUE_TO_DECIMAL (VALUE, "%.9g", dstr); \
+ fprintf (FILE, "&0f%s", dstr); \
+ } \
+ else \
+ { \
+ REAL_VALUE_TO_TARGET_SINGLE (VALUE, INT); \
+ fprintf (FILE, "&0x%x", INT); } } while (0)
#endif /* AS_BUG_FLOATING_CONSTANT */
#define PRINT_OPERAND(FILE, X, CODE) \
@@ -436,15 +437,19 @@ do{ if (PREFIX[0] == 'L' && PREFIX[1] == 'I') \
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; \
- PRINT_OPERAND_FLOAT (FILE,CODE, u1.f, u1.i); } \
+ { REAL_VALUE_TYPE r; long l; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ PRINT_OPERAND_FLOAT (CODE, FILE, r, l); } \
else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == DFmode) \
- { union { double d; int i[2]; } u; \
- u.i[0] = CONST_DOUBLE_LOW (X); u.i[1] = CONST_DOUBLE_HIGH (X); \
- fprintf (FILE, "&0f%.20g", u.d); } \
+ { REAL_VALUE_TYPE r; char dstr[30]; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); \
+ fprintf (FILE, "&0f%s", dstr); } \
+ else if (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == XFmode) \
+ { REAL_VALUE_TYPE r; char dstr[30]; \
+ REAL_VALUE_FROM_CONST_DOUBLE (r, X); \
+ REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); \
+ fprintf (FILE, "&0f%s", dstr); } \
else { putc ('&', FILE); output_addr_const (FILE, X); }}
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) \