diff options
author | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-03-31 21:35:37 +0000 |
---|---|---|
committer | rms <rms@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-03-31 21:35:37 +0000 |
commit | 3e312d6f2d194a9abaaea737afe6909ec5877eeb (patch) | |
tree | ffbb829596e505e2538cb2448692324cb7552e09 /gcc/config/m68k/sgs.h | |
parent | 2b322be405f4d08f14c391c16e93e33d2faeb8d8 (diff) | |
download | gcc-3e312d6f2d194a9abaaea737afe6909ec5877eeb.tar.gz |
(ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE)
(ASM_OUTPUT_DOUBLE_OPERAND): Use REAL_VALUE... macros.
(ASM_OUTPUT_LONG_DOUBLE): New definition.
(ASM_OUTPUT_FLOAT_OPERAND): New macro.
(PRINT_OPERAND_PRINT_FLOAT): Deleted.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3976 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m68k/sgs.h')
-rw-r--r-- | gcc/config/m68k/sgs.h | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/gcc/config/m68k/sgs.h b/gcc/config/m68k/sgs.h index 9672068ea87..a326489b2b7 100644 --- a/gcc/config/m68k/sgs.h +++ b/gcc/config/m68k/sgs.h @@ -1,7 +1,7 @@ /* Definitions of target machine for GNU compiler for m68k targets using assemblers derived from AT&T "SGS" releases. - Copyright (C) 1991 Free Software Foundation, Inc. + Copyright (C) 1991, 1993 Free Software Foundation, Inc. Written by Fred Fish (fnf@cygnus.com) @@ -119,23 +119,31 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ output_addr_const ((FILE), (VALUE)), \ fprintf ((FILE), "\n")) +#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), "\t%s 0x%x,0x%x,0x%x\n", LONG_ASM_OP, \ + l[0], l[1], l[2]); \ + } while (0) + /* This is how to output an assembler line defining a `double' constant. */ #undef ASM_OUTPUT_DOUBLE #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { union { double d; long l[2]; } tem; \ - tem.d = (VALUE); \ - fprintf((FILE), "\t%s 0x%x,0x%x\n", LONG_ASM_OP, \ - tem.l[0], tem.l[1]); \ +do { long l[2]; \ + REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ + fprintf ((FILE), "\t%s 0x%x,0x%x\n", LONG_ASM_OP, \ + l[0], l[1]); \ } while (0) /* This is how to output an assembler line defining a `float' constant. */ #undef ASM_OUTPUT_FLOAT #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { union { float f; long l;} tem; \ - tem.f = (VALUE); \ - fprintf ((FILE), "\t%s 0x%x\n", LONG_ASM_OP, tem.l); \ +do { long l; \ + REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ + fprintf ((FILE), "\t%s 0x%x\n", LONG_ASM_OP, l); \ } while (0) /* This is how to output an assembler line that says to advance the @@ -209,15 +217,19 @@ do { union { float f; long l;} tem; \ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ asm_fprintf (FILE, "\t%Omove.l (%Rsp)+,%s\n", reg_names[REGNO]) -#undef PRINT_OPERAND_PRINT_FLOAT -#define PRINT_OPERAND_PRINT_FLOAT(CODE,FILE) \ - asm_fprintf ((FILE), "%I0x%x", u1.i); - +#undef ASM_OUTPUT_FLOAT_OPERAND +#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ + do { long l; \ + REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ + asm_fprintf ((FILE), "%I0x%x", l); \ + } while (0) + #undef ASM_OUTPUT_DOUBLE_OPERAND -#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ - do { union real_extract u; \ - u.d = (VALUE); \ - asm_fprintf ((FILE),"%I0x%x%08x", u.i[0], u.i[1]); } while (0) +#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ + do { long l[2]; \ + REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ + asm_fprintf ((FILE), "%I0x%x%08x", l[0], l[1]); \ + } while (0) /* How to output a block of SIZE zero bytes. Note that the `space' pseudo, when used in the text segment, causes SGS assemblers to output nop insns |