From: Richard Henderson Date: Thu, 20 Dec 2001 17:36:39 +0000 (-0800) Subject: varasm.c (assemble_real): Use REAL_VALUE_TO_x and assemble_integer to emit floating... X-Git-Tag: prereleases/libstdc++-3.0.96~964 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=82af613ff3d8b809dc30ab61b1e6183039e36567;p=thirdparty%2Fgcc.git varasm.c (assemble_real): Use REAL_VALUE_TO_x and assemble_integer to emit floating point values. * varasm.c (assemble_real): Use REAL_VALUE_TO_x and assemble_integer to emit floating point values. (assemble_real_1): Remove. * 1750a/1750a.c (real_value_to_target_single): New. (real_value_to_target_double): New. * 1750a/1750a.h (TARGET_FLOAT_FORMAT): New. (REAL_VALUE_TO_TARGET_SINGLE): New. (REAL_VALUE_TO_TARGET_DOUBLE): New. * 1750a/1750a-protos.h: Update. * 1750a/1750a.h, a29k/a29k.h, alpha/alpha.h, alpha/unicosmk.h, alpha/vms.h, arc/arc.h, arm/aof.h, arm/aout.h, avr/avr.c, avr/avr.h, c4x/c4x.h, clipper/clix.h, convex/convex.h, cris/cris.h, d30v/d30v.h, dsp16xx/dsp16xx.c, dsp16xx/dsp16xx.h, elxsi/elxsi.h, fr30/fr30.h, h8300/h8300.h, i370/i370.h, i386/i386.h, i386/i386elf.h, i386/next.h, i386/ptx4-i.h, i386/sysv4.h, i860/fx2800.h, i860/i860.h, i860/paragon.h, i860/sysv4.h, i960/i960-protos.h, i960/i960.c, i960/i960.h, ia64/ia64.h, m32r/m32r.h, m68hc11/m68hc11.c, m68hc11/m68hc11.h, m68k/3b1.h, m68k/altos3068.h, m68k/crds.h, m68k/dpx2.h, m68k/hp320.h, m68k/m68k.h, m68k/mot3300.h, m68k/news.h, m68k/next.h, m68k/next21.h, m68k/sgs.h, m68k/sun2o4.h, m68k/sun3.h, m68k/tower-as.h, m88k/m88k.h, mcore/mcore.h, mips/mips-protos.h, mips/mips.c, mips/mips.h, mmix/mmix-protos.h, mmix/mmix.c, mmix/mmix.h, mn10200/mn10200.h, mn10300/mn10300.h, ns32k/encore.h, ns32k/ns32k.h, pa/long_double.h, pa/pa.h, pdp11/pdp11.h, pj/pj.h, romp/romp.c, romp/romp.h, rs6000/rs6000.h, s390/linux.h, sh/sh.h, sparc/sparc.h, stormy16/stormy16.h, v850/v850.h, vax/vax.h, vax/vaxv.h, we32k/we32k.h, doc/tm.texi: Remove ASM_OUTPUT_FLOAT, ASM_OUTPUT_DOUBLE, ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_BYTE_FLOAT, ASM_OUTPUT_SHORT_FLOAT, ASM_OUTPUT_THREE_QUARTER_FLOAT, and all associated support routines. From-SVN: r48207 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7ed306ee27ea..a069113277b4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,38 @@ +2001-12-20 Richard Henderson + + * varasm.c (assemble_real): Use REAL_VALUE_TO_x and assemble_integer + to emit floating point values. + (assemble_real_1): Remove. + + * 1750a/1750a.c (real_value_to_target_single): New. + (real_value_to_target_double): New. + * 1750a/1750a.h (TARGET_FLOAT_FORMAT): New. + (REAL_VALUE_TO_TARGET_SINGLE): New. + (REAL_VALUE_TO_TARGET_DOUBLE): New. + * 1750a/1750a-protos.h: Update. + + * 1750a/1750a.h, a29k/a29k.h, alpha/alpha.h, alpha/unicosmk.h, + alpha/vms.h, arc/arc.h, arm/aof.h, arm/aout.h, avr/avr.c, + avr/avr.h, c4x/c4x.h, clipper/clix.h, convex/convex.h, cris/cris.h, + d30v/d30v.h, dsp16xx/dsp16xx.c, dsp16xx/dsp16xx.h, elxsi/elxsi.h, + fr30/fr30.h, h8300/h8300.h, i370/i370.h, i386/i386.h, i386/i386elf.h, + i386/next.h, i386/ptx4-i.h, i386/sysv4.h, i860/fx2800.h, i860/i860.h, + i860/paragon.h, i860/sysv4.h, i960/i960-protos.h, i960/i960.c, + i960/i960.h, ia64/ia64.h, m32r/m32r.h, m68hc11/m68hc11.c, + m68hc11/m68hc11.h, m68k/3b1.h, m68k/altos3068.h, m68k/crds.h, + m68k/dpx2.h, m68k/hp320.h, m68k/m68k.h, m68k/mot3300.h, m68k/news.h, + m68k/next.h, m68k/next21.h, m68k/sgs.h, m68k/sun2o4.h, m68k/sun3.h, + m68k/tower-as.h, m88k/m88k.h, mcore/mcore.h, mips/mips-protos.h, + mips/mips.c, mips/mips.h, mmix/mmix-protos.h, mmix/mmix.c, + mmix/mmix.h, mn10200/mn10200.h, mn10300/mn10300.h, ns32k/encore.h, + ns32k/ns32k.h, pa/long_double.h, pa/pa.h, pdp11/pdp11.h, pj/pj.h, + romp/romp.c, romp/romp.h, rs6000/rs6000.h, s390/linux.h, sh/sh.h, + sparc/sparc.h, stormy16/stormy16.h, v850/v850.h, vax/vax.h, + vax/vaxv.h, we32k/we32k.h, doc/tm.texi: Remove ASM_OUTPUT_FLOAT, + ASM_OUTPUT_DOUBLE, ASM_OUTPUT_LONG_DOUBLE, ASM_OUTPUT_BYTE_FLOAT, + ASM_OUTPUT_SHORT_FLOAT, ASM_OUTPUT_THREE_QUARTER_FLOAT, and all + associated support routines. + Thu Dec 20 16:58:46 CET 2001 Jan Hubicka * cfgcleanup.c (flow_find_cross_jump): Avoid incrementing of ninsns diff --git a/gcc/config/1750a/1750a-protos.h b/gcc/config/1750a/1750a-protos.h index 9ca79ce45205..aa2b41fbea02 100644 --- a/gcc/config/1750a/1750a-protos.h +++ b/gcc/config/1750a/1750a-protos.h @@ -43,3 +43,6 @@ extern const char *branch_or_jump PARAMS ((const char *, int)); extern int find_jmplbl PARAMS ((int)); extern int one_bit_set_p PARAMS ((int)); extern void check_section PARAMS ((enum section)); + +extern long real_value_to_target_single PARAMS((double)); +extern void real_value_to_target_double PARAMS((double, long[])); diff --git a/gcc/config/1750a/1750a.c b/gcc/config/1750a/1750a.c index 54a2216b7896..099f7c73818b 100644 --- a/gcc/config/1750a/1750a.c +++ b/gcc/config/1750a/1750a.c @@ -870,4 +870,145 @@ which_bit (x) return b; } + +/* Convert a REAL_VALUE_TYPE to the target float format: + + MSB LSB MSB LSB + ------------------------------------------------------ + |S| Mantissa | Exponent | + ------------------------------------------------------ + 0 1 23 24 31 + +*/ + +long +real_value_to_target_single(in) + REAL_VALUE_TYPE in; +{ + union { + double d; + struct { +#if HOST_WORDS_BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + unsigned int mantissa0:20; + unsigned int mantissa1:32; +#else + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; +#endif + } s; + } ieee; + + unsigned int mant; + int exp; + + if (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT) + abort (); + + ieee.d = in; + + /* Don't bother with NaN, Inf, 0 special cases, since they'll be handled + by the over/underflow code below. */ + exp = ieee.s.exponent - 0x3ff; + mant = 1 << 23 | ieee.s.mantissa0 << 3 | ieee.s.mantissa1 >> 29; + + /* The sign is actually part of the mantessa. Since we're comming from + IEEE we know that either bit 23 is set or we have a zero. */ + if (! ieee.s.negative) + { + mant >>= 1; + exp += 1; + } + + /* Check for overflow. Crop to FLT_MAX. */ + if (exp > 127) + { + exp = 127; + mant = (ieee.s.negative ? 0xffffff : 0x7fffff); + } + /* Underflow to zero. */ + else if (exp < -128) + { + exp = 0; + mant = 0; + } + + return mant << 8 | (exp & 0xff); +} +/* Convert a REAL_VALUE_TYPE to the target 1750a extended float format: + + ---------------------------------------------------- + | | Mantissa | | Mantissa | + |S| MS |Exponent| LS | + ---------------------------------------------------- + 0 1 23 24 31 32 47 + +*/ + +void +real_value_to_target_double(in, out) + REAL_VALUE_TYPE in; + long out[]; +{ + union { + double d; + struct { +#if HOST_WORDS_BIG_ENDIAN + unsigned int negative:1; + unsigned int exponent:11; + unsigned int mantissa0:20; + unsigned int mantissa1:32; +#else + unsigned int mantissa1:32; + unsigned int mantissa0:20; + unsigned int exponent:11; + unsigned int negative:1; +#endif + } s; + } ieee; + + unsigned int mant_h24, mant_l16; + int exp; + + if (HOST_FLOAT_FORMAT != IEEE_FLOAT_FORMAT) + abort (); + + ieee.d = in; + + /* Don't bother with NaN, Inf, 0 special cases, since they'll be handled + by the over/underflow code below. */ + exp = ieee.s.exponent - 0x3ff; + mant_h24 = 1 << 23 | ieee.s.mantissa0 << 3 | ieee.s.mantissa1 >> 29; + mant_l16 = (ieee.s.mantissa1 >> 13) & 0xffff; + + /* The sign is actually part of the mantessa. Since we're comming from + IEEE we know that either bit 23 is set or we have a zero. */ + if (! ieee.s.negative) + { + mant_l16 = mant_l16 >> 1 | (mant_h24 & 1) << 15; + mant_h24 >>= 1; + exp += 1; + } + + /* Check for overflow. Crop to DBL_MAX. */ + if (exp > 127) + { + exp = 127; + mant_h24 = (ieee.s.negative ? 0xffffff : 0x7fffff); + mant_l16 = 0xffff; + } + /* Underflow to zero. */ + else if (exp < -128) + { + exp = 0; + mant_h24 = 0; + mant_l16 = 0; + } + + out[0] = mant_h24 << 8 | (exp & 0xff); + out[1] = mant_l16; +} diff --git a/gcc/config/1750a/1750a.h b/gcc/config/1750a/1750a.h index 90903c9aa0e2..bca9d356b9a5 100644 --- a/gcc/config/1750a/1750a.h +++ b/gcc/config/1750a/1750a.h @@ -111,9 +111,8 @@ extern const char *const sectname[4]; /* Type to use for `size_t'. If undefined, uses `long unsigned int'. */ #define SIZE_TYPE "int" -/* 1750a preliminary - #define TARGET_FLOAT_FORMAT UNKNOWN_FLOAT_FORMAT -*/ +/* 1750a preliminary. Ought to properly define the format in real.c. */ +#define TARGET_FLOAT_FORMAT UNKNOWN_FLOAT_FORMAT /* Allocation boundary (in *bits*) for storing pointers in memory. */ #define POINTER_BOUNDARY 16 @@ -1069,32 +1068,6 @@ enum reg_class { NO_REGS, R2, R0_1, INDEX_REGS, BASE_REGS, ALL_REGS, LIM_REG_CLA #define JUMP_TABLES_IN_TEXT_SECTION 1 -/* This is how to output an assembler line defining a 1750A `float' - constant. */ - -#define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) \ - do { \ - if (label_pending) { \ - label_pending = 0; \ - sprintf (datalbl[datalbl_ndx].value, "%f", (double) VALUE); \ - } \ - datalbl[datalbl_ndx].size += 2; \ - fprintf (FILE, "\tdataf\t%f\n",VALUE); \ - } while(0) - -/* This is how to output an assembler line defining a 1750A `double' - constant. */ - -#define ASM_OUTPUT_THREE_QUARTER_FLOAT(FILE,VALUE) \ - do { \ - if (label_pending) { \ - label_pending = 0; \ - sprintf (datalbl[datalbl_ndx].value, "%f", VALUE); \ - } \ - datalbl[datalbl_ndx].size += 3; \ - fprintf(FILE,"\tdataef\t%f\n",VALUE); \ - } while (0) - /* This is how to output an assembler line defining a string constant. */ #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) do { \ @@ -1190,7 +1163,13 @@ enum reg_class { NO_REGS, R2, R0_1, INDEX_REGS, BASE_REGS, ALL_REGS, LIM_REG_CLA 'Q': print a 1750 Base-Register-with-offset instruction's operands */ -/* 1750A: see file aux-output.c */ #define PRINT_OPERAND(FILE, X, CODE) print_operand(FILE,X,CODE) #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address(FILE,ADDR) +/* Convert a REAL_VALUE_TYPE to the target 1750a float format. */ +#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \ + ((OUT) = real_value_to_target_single(IN)) + +/* Convert a REAL_VALUE_TYPE to the target 1750a extended float format. */ +#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \ + real_value_to_target_double((IN), (OUT)) diff --git a/gcc/config/a29k/a29k.h b/gcc/config/a29k/a29k.h index 775179dfb2fa..18b2a631c515 100644 --- a/gcc/config/a29k/a29k.h +++ b/gcc/config/a29k/a29k.h @@ -1460,16 +1460,6 @@ extern int a29k_debug_reg_map[]; #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.double %.20e\n", (VALUE)) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float %.20e\n", (VALUE)) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index db23a57b54fa..de2428ffb6fd 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -1947,37 +1947,6 @@ do { \ #define CHECK_FLOAT_VALUE(MODE, D, OVERFLOW) \ ((OVERFLOW) = check_float_value (MODE, &D, OVERFLOW)) -/* This is how to output an assembler line defining a `long double' - constant. */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { \ - long t[4]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad 0x%lx%08lx,0x%lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff, \ - t[3] & 0xffffffff, t[2] & 0xffffffff); \ - } while (0) - -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad 0x%lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } while (0) - /* We use the default ASCII-output routine, except that we don't write more than 50 characters since the assembler doesn't support very long lines. */ diff --git a/gcc/config/alpha/unicosmk.h b/gcc/config/alpha/unicosmk.h index 21b719fdf2e3..65ab319d5024 100644 --- a/gcc/config/alpha/unicosmk.h +++ b/gcc/config/alpha/unicosmk.h @@ -413,51 +413,6 @@ ssib_section () \ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#ifdef REAL_ARITHMETIC -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad ^X%lx%08lx\n", \ - t[0] & 0xffffffff, t[1] & 0xffffffff); \ - } while (0) -#else -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - fprintf (FILE, "\t.quad ^X%lx\n", t[0]); \ - } while(0) -#endif - - -/* This is how to output an assembler line defining a `long double' - constant. `long double' and `double' are the same on the Cray T3E. */ - -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - ASM_OUTPUT_DOUBLE (FILE,VALUE) - -/* This is how to output an assembler line defining a `float' constant. - ??? Somehow, REAL_VALUE_TO_TARGET_SINGLE gets confused and returns the - value in the upper bits of the int. */ - -#undef ASM_OUTPUT_FLOAT -#ifdef REAL_ARITHMETIC -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long ^X%lx\n", t & 0xffffffff);\ - } while (0) -#else -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long ^X%lx\n", (t >> 32) & 0xffffffff);\ - } while(0) -#endif - /* CAM has some restrictions with respect to string literals. It won't accept lines with more that 256 characters which means that we have to split long strings. Moreover, it only accepts escape sequences of diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h index be258cdc2945..ed12e93d079f 100644 --- a/gcc/config/alpha/vms.h +++ b/gcc/config/alpha/vms.h @@ -253,25 +253,6 @@ typedef struct {int num_args; enum avms_arg_type atypes[6];} avms_arg_info; ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename); \ } -#undef ASM_OUTPUT_FLOAT -#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.%c_floating %s\n", (TARGET_FLOAT_VAX)?'f':'s', str); \ - } \ - } - #define LINK_SECTION_ASM_OP "\t.link" #define READONLY_SECTION_ASM_OP "\t.rdata" #define LITERALS_SECTION_ASM_OP "\t.literals" diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index d7db3bd66dbd..d31ccdbc2527 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -1238,28 +1238,6 @@ do { \ no longer contain unusual constructs. */ #define ASM_APP_OFF "" -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ -{ \ - long t; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ -} - -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ -{ \ - long t[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ -} - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ #define ASM_OUTPUT_LABEL(FILE, NAME) \ diff --git a/gcc/config/arm/aof.h b/gcc/config/arm/aof.h index 01826b817271..750bc08d1236 100644 --- a/gcc/config/arm/aof.h +++ b/gcc/config/arm/aof.h @@ -183,29 +183,6 @@ do \ #define ASM_APP_OFF "" -#define ASM_OUTPUT_LONG_DOUBLE(STREAM,VALUE) \ - ASM_OUTPUT_DOUBLE((STREAM),(VALUE)) - -#define ASM_OUTPUT_DOUBLE(STREAM,VALUE) \ -do { \ - char dstr[30]; \ - long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), l); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.14g", dstr); \ - fprintf ((STREAM), "\tDCD &%lx, &%lx\t%s double %s\n", \ - l[0], l[1], ASM_COMMENT_START, dstr); \ -} while (0) - -#define ASM_OUTPUT_FLOAT(STREAM,VALUE) \ -do { \ - char dstr[30]; \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), l); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.7g", dstr); \ - fprintf ((STREAM), "\tDCD &%lx\t%s double %s\n", \ - l, ASM_COMMENT_START, dstr); \ -} while (0) - #define ASM_OUTPUT_ASCII(STREAM,PTR,LEN) \ { \ int i; \ diff --git a/gcc/config/arm/aout.h b/gcc/config/arm/aout.h index 9832eda92607..64ca8b7caac1 100644 --- a/gcc/config/arm/aout.h +++ b/gcc/config/arm/aout.h @@ -184,48 +184,6 @@ Boston, MA 02111-1307, USA. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ asm_fprintf (STREAM, "\tb\t%LL%d\n", VALUE) -/* Output various types of constants. For real numbers we output hex, with - a comment containing the "human" value, this allows us to pass NaN's which - the riscix assembler doesn't understand (it also makes cross-assembling - less likely to fail). */ - -#define ASM_OUTPUT_LONG_DOUBLE(STREAM, VALUE) \ - do \ - { \ - char dstr[30]; \ - long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - asm_fprintf (STREAM, \ - "\t.long 0x%lx,0x%lx,0x%lx\t%@ long double %s\n", \ - l[0], l[1], l[2], dstr); \ - } \ - while (0) - -#define ASM_OUTPUT_DOUBLE(STREAM, VALUE) \ - do \ - { \ - char dstr[30]; \ - long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.14g", dstr); \ - asm_fprintf (STREAM, "\t.long 0x%lx, 0x%lx\t%@ double %s\n", l[0],\ - l[1], dstr); \ - } \ - while (0) - -#define ASM_OUTPUT_FLOAT(STREAM, VALUE) \ - do \ - { \ - char dstr[30]; \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.7g", dstr); \ - asm_fprintf (STREAM, "\t.word 0x%lx\t%@ float %s\n", l, \ - dstr); \ - } \ - while (0) - #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(STREAM, PTR, LEN) \ output_ascii_pseudo_op (STREAM, (const unsigned char *)(PTR), LEN) diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 7e20748220ce..073dd97d87db 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -4485,22 +4485,6 @@ avr_assemble_integer (x, size, aligned_p) return default_assemble_integer (x, size, aligned_p); } - -/* Output real N to file FILE */ - -void -asm_output_float (file, n) - FILE *file; - REAL_VALUE_TYPE n; -{ - long val; - char dstr[100]; - - REAL_VALUE_TO_TARGET_SINGLE (n, val); - REAL_VALUE_TO_DECIMAL (n, "%g", dstr); - fprintf (file, "\t.long 0x%08lx\t/* %s */\n", val, dstr); -} - /* Sets section name for declaration DECL */ void diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index fac7e46901af..1f8a8da50e42 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -2009,22 +2009,6 @@ progmem_section (void) \ Objective C program. */ - -#define ASM_OUTPUT_DOUBLE(STREAM, VALUE) fprintf (STREAM, "no double float %.20e\n", VALUE) -#define ASM_OUTPUT_FLOAT(STREAM, VALUE) asm_output_float (STREAM, VALUE) -/* `ASM_OUTPUT_LONG_DOUBLE (STREAM, VALUE)' - `ASM_OUTPUT_THREE_QUARTER_FLOAT (STREAM, VALUE)' - `ASM_OUTPUT_SHORT_FLOAT (STREAM, VALUE)' - `ASM_OUTPUT_BYTE_FLOAT (STREAM, VALUE)' - A C statement to output to the stdio stream STREAM an assembler - instruction to assemble a floating-point constant of `TFmode', - `DFmode', `SFmode', `TQFmode', `HFmode', or `QFmode', - respectively, whose value is VALUE. VALUE will be a C expression - of type `REAL_VALUE_TYPE'. Macros such as - `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these - definitions. */ - - #define ASM_OUTPUT_ASCII(FILE, P, SIZE) gas_output_ascii (FILE,P,SIZE) /* `ASM_OUTPUT_ASCII (STREAM, PTR, LEN)' output_ascii (FILE, P, SIZE) diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h index 824fa2ce7ffb..b245714af52b 100644 --- a/gcc/config/c4x/c4x.h +++ b/gcc/config/c4x/c4x.h @@ -1851,43 +1851,6 @@ const_section () \ #define ASM_APP_ON "" #define ASM_APP_OFF "" -/* Output float/double constants QFmode. */ - -#define ASM_OUTPUT_BYTE_FLOAT(FILE, VALUE) \ - do { \ - long l; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%20lf", str); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.word\t0%08xh\t; %s\n", (int) l, str);\ - else \ - fprintf (FILE, "\t.word\t0%08lxh\t; %s\n", l, str);\ - } while (0); - -/* Output long double constants HFmode. - The first word contains the exponent and first part of the mantissa - in the same manner as QFmode. The second word contains the full - mantissa. We should ensure that the two words are allocated within - the same page for the large memory model since we only output a single - LDP instruction. FIXME. The simplest solution probably is to output - a LDP for each load. */ - -#define ASM_OUTPUT_SHORT_FLOAT(FILE, VALUE) \ - do { \ - long l[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - REAL_VALUE_TO_DECIMAL (VALUE, "%20lf", str); \ - l[1] = (l[0] << 8) | ((l[1] >> 24) & 0xff); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.word\t0%08xh\t; %s\n\t.word\t0%08xh\n", \ - (int) l[0], str, (int) l[1]); \ - else \ - fprintf (FILE, "\t.word\t0%08lxh\t; %s\n\t.word\t0%08lxh\n", \ - l[0], str, l[1]); \ - } while (0); - #define ASM_OUTPUT_ASCII(FILE, PTR, LEN) c4x_output_ascii (FILE, PTR, LEN) /* Output and Generation of Labels. */ diff --git a/gcc/config/clipper/clix.h b/gcc/config/clipper/clix.h index cd625c1e827a..cae454b8b01f 100644 --- a/gcc/config/clipper/clix.h +++ b/gcc/config/clipper/clix.h @@ -46,22 +46,6 @@ do { \ fputs ("\n", (FILE)); \ } while (0) -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -{ \ - union { int i[2]; double d; } _d_; \ - _d_.d = VALUE; \ - fprintf (FILE, "\t.long 0x%08x,0x%08x\n", _d_.i[0],_d_.i[1]); \ -} - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -{ \ - union { int i; float f; } _f_; \ - _f_.f = VALUE; \ - fprintf (FILE, "\t.long 0x%08x\n", _f_.i); \ -} - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ diff --git a/gcc/config/convex/convex.h b/gcc/config/convex/convex.h index d8fa6836956a..16fb2a43b550 100644 --- a/gcc/config/convex/convex.h +++ b/gcc/config/convex/convex.h @@ -1257,16 +1257,6 @@ enum reg_class { #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - outfloat (FILE, VALUE, "%.17e", "\tds.d ", "\n") - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - outfloat (FILE, VALUE, "%.9e", "\tds.s ", "\n") - /* This is how to output a string */ #define ASM_OUTPUT_ASCII(FILE,STR,SIZE) do { \ diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index c7e2cba60537..493ac60d7ee6 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -1507,36 +1507,6 @@ struct cum_args {int regs;}; /* Node: Data Output */ -/* We must use REAL_VALUE_TO_TARGET_SINGLE and - REAL_VALUE_TO_TARGET_LONG_DOUBLE. It seems real.h cannot support when - target-double is target-single is 32bit-single. */ -#define ASM_OUTPUT_LONG_DOUBLE(FILE, VALUE) \ - do \ - { \ - long l[2]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t.dword 0x%lx\n", l[0]); \ - fprintf (FILE, "\t.dword 0x%lx\n", l[1]); \ - } \ - while (0) - -/* FIXME: The manual says "array of long:s", but - REAL_VALUE_TO_TARGET_SINGLE actually writes a long. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf (FILE, "\t.dword 0x%lx\n", l); \ - } \ - while (0) - -/* This is what is used by gcc for 64-bit floats, - not the "long double" one. */ -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - ASM_OUTPUT_LONG_DOUBLE (FILE, VALUE) - - #define IS_ASM_LOGICAL_LINE_SEPARATOR(C) (C) == '@' /* Node: Uninitialized Data */ diff --git a/gcc/config/d30v/d30v.h b/gcc/config/d30v/d30v.h index ebdefb598ed2..c0098a1cc911 100644 --- a/gcc/config/d30v/d30v.h +++ b/gcc/config/d30v/d30v.h @@ -3729,55 +3729,6 @@ extern const char *d30v_branch_cost_string; /* Output of Data. */ -/* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a floating-point constant of `TFmode', `DFmode', `SFmode', - `TQFmode', `HFmode', or `QFmode', respectively, whose value is VALUE. VALUE - will be a C expression of type `REAL_VALUE_TYPE'. Macros such as - `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these definitions. */ - -/* #define ASM_OUTPUT_LONG_DOUBLE(STREAM, 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); \ - } \ - } - -#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); \ - } \ - } - -/* #define ASM_OUTPUT_THREE_QUARTER_FLOAT(STREAM, VALUE) */ -/* #define ASM_OUTPUT_SHORT_FLOAT(STREAM, VALUE) */ -/* #define ASM_OUTPUT_BYTE_FLOAT(STREAM, VALUE) */ - /* A C statement to output to the stdio stream STREAM an assembler instruction to assemble a string constant containing the LEN bytes at PTR. PTR will be a C expression of type `char *' and LEN a C expression of type `int'. diff --git a/gcc/config/dsp16xx/dsp16xx.c b/gcc/config/dsp16xx/dsp16xx.c index 5cd1012e944b..674a3f08eba2 100644 --- a/gcc/config/dsp16xx/dsp16xx.c +++ b/gcc/config/dsp16xx/dsp16xx.c @@ -2264,30 +2264,6 @@ asm_output_local(file, name, size, rounded) fprintf (file, "int\n"); } -void -asm_output_float (file, fp_const) - FILE *file; - double fp_const; -{ -#if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT - REAL_VALUE_TYPE d = fp_const; - long value; - - REAL_VALUE_TO_TARGET_SINGLE (d, value); - fputs ("\tint ", file); -#ifdef WORDS_BIG_ENDIAN - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", (value >> 16) & 0xffff, - value & 0xffff); -#else - fprintf (file, "0x%-4.4lx, 0x%-4.4lx", value & 0xffff, - (value >> 16) & 0xffff); -#endif - fputs ("\n", file); -#else - fatal_error ("inline float constants not supported on this host"); -#endif -} - int dsp16xx_address_cost (addr) rtx addr; diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h index af05183d0d47..393869ddfaa7 100644 --- a/gcc/config/dsp16xx/dsp16xx.h +++ b/gcc/config/dsp16xx/dsp16xx.h @@ -1638,16 +1638,6 @@ const_section () \ /* OUTPUT OF DATA */ -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) asm_output_float (FILE,VALUE) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) - -/* This is how to output an assembler line defining a 'float' constant of - size HFmode. */ -#define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) - /* This is how we output a 'c' character string. For the 16xx assembler we have to do it one letter at a time */ diff --git a/gcc/config/elxsi/elxsi.h b/gcc/config/elxsi/elxsi.h index 13e39d8b7f04..04b7619048c3 100644 --- a/gcc/config/elxsi/elxsi.h +++ b/gcc/config/elxsi/elxsi.h @@ -732,21 +732,6 @@ enum reg_class { NO_REGS, GENERAL_REGS, ALL_REGS, LIM_REG_CLASSES }; #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, ".%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -{ union {double d; int i[2]; } tem; \ - tem.d = (VALUE); \ - fprintf (FILE, "\t.data\t%d{32}, %d{32}\n", tem.i[0], tem.i[1]); } - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -{ union {float f; int i; } tem; \ - tem.f = (VALUE); \ - fprintf (FILE, "\t.data %d{32}\n", tem.i); } - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/fr30/fr30.h b/gcc/config/fr30/fr30.h index b8f84f7d8344..aad2f68ee47a 100644 --- a/gcc/config/fr30/fr30.h +++ b/gcc/config/fr30/fr30.h @@ -1412,38 +1412,6 @@ do \ for ordinary compiler output. */ #define ASM_APP_OFF "#NO_APP\n" -/*}}}*/ -/*{{{ Output of Data. */ - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - long t; \ - char str[30]; \ - \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ - } \ - while (0) - -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - long t[2]; \ - char str[30]; \ - \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ - } \ - while (0) /*}}}*/ /*{{{ Output and Generation of Labels. */ diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index ca52689e697a..4b37f892cd55 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -1248,28 +1248,6 @@ readonly_data () \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \ sprintf (LABEL, "*.%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } \ - while (0) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } \ - while (0) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/i370/i370.h b/gcc/config/i370/i370.h index 826382fbe607..cd1695f41287 100644 --- a/gcc/config/i370/i370.h +++ b/gcc/config/i370/i370.h @@ -1183,14 +1183,6 @@ enum reg_class fprintf (FILE, "\tL\t%s,%d(13)\n\tLA\t13,4(13)\n", \ reg_names[REGNO], STACK_POINTER_OFFSET) -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - fprintf (FILE, "\tDC\tD'%.18G'\n", (VALUE)) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - fprintf (FILE, "\tDC\tE'%.9G'\n", (VALUE)) - /* This outputs a text string. The string are chopped up to fit into an 80 byte record. Also, control and special characters, interpreted by the IBM assembler, are output numerically. */ @@ -1866,24 +1858,6 @@ abort(); \ #define ASM_DOUBLE "\t.double" -/* Argument to the flt pt. macros is a REAL_VALUE_TYPE which - may or may not be a float/double, depending on whther we - are running in cross-compiler mode. */ -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE, RVAL) { \ - char buf[50]; \ - REAL_VALUE_TO_DECIMAL (RVAL, HOST_WIDE_INT_PRINT_DOUBLE_HEX, buf); \ - fprintf (FILE, "\tDC\tD'%s'\n", buf); \ -} - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, RVAL) { \ - char buf[50]; \ - REAL_VALUE_TO_DECIMAL (RVAL, HOST_WIDE_INT_PRINT_DEC, buf); \ - fprintf (FILE, "\tDC\tE'%s'\n", buf); \ -} - - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ #define ASM_OUTPUT_LABEL(FILE,NAME) \ diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 7b4056df58bf..7297f84d1d35 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2876,34 +2876,6 @@ extern int const svr4_dbx_register_map[FIRST_PSEUDO_REGISTER]; #define ASM_OUTPUT_LABEL(FILE,NAME) \ (assemble_name (FILE, NAME), fputs (":\n", FILE)) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "%s0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \ - } while (0) - -/* This is how to output a `long double' extended real constant. */ - -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long l[4]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - if (TARGET_128BIT_LONG_DOUBLE) \ - fprintf (FILE, "%s0x%lx,0x%lx,0x%lx,0x0\n", ASM_LONG, l[0], l[1], l[2]); \ - else \ - fprintf (FILE, "%s0x%lx,0x%lx,0x%lx\n", ASM_LONG, l[0], l[1], l[2]); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "%s0x%lx\n", ASM_LONG, l); \ - } while (0) - /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable named NAME. LABELNO is an integer which is different for each call. */ diff --git a/gcc/config/i386/i386elf.h b/gcc/config/i386/i386elf.h index 2bb7b8a058e6..ddf19b67e7c1 100644 --- a/gcc/config/i386/i386elf.h +++ b/gcc/config/i386/i386elf.h @@ -54,61 +54,6 @@ Boston, MA 02111-1307, USA. */ %{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}\ crtbegin.o%s" -/* This is how to output assembly code to define a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long value; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value); \ - else \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ - } while (0) - -/* This is how to output assembly code to define a `double' constant. - We always have to use a pair of .long pseudo-ops to do this because - the native SVR4 ELF assembler is buggy and it generates incorrect - values when we try to use the the .double pseudo-op instead. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long value[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - } \ - } while (0) - - -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long value[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[2]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ - } \ - } while (0) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) \ (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) diff --git a/gcc/config/i386/next.h b/gcc/config/i386/next.h index 02ca452e75fa..3081fdebf8c9 100644 --- a/gcc/config/i386/next.h +++ b/gcc/config/i386/next.h @@ -42,50 +42,6 @@ Boston, MA 02111-1307, USA. */ ((MODE) == SFmode || (MODE) == DFmode || (MODE) == XFmode \ ? FIRST_FLOAT_REG : 0) -#ifdef REAL_VALUE_TO_TARGET_LONG_DOUBLE -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - do { \ - long hex[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n\t.long 0x%x\n", \ - (int) hex[0], (int) hex[1], (int) hex[2]); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n\t.long 0x%lx\n", \ - hex[0], hex[1], hex[2]); \ - } while (0) -#endif - -#ifdef REAL_VALUE_TO_TARGET_DOUBLE -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long hex[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n\t.long 0x%x\n", \ - (int) hex[0], (int) hex[1]); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", hex[0], hex[1]); \ - } while (0) -#endif - -/* This is how to output an assembler line defining a `float' constant. */ - -#ifdef REAL_VALUE_TO_TARGET_SINGLE -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long hex; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\t.long 0x%x\n", (int) hex); \ - else \ - fprintf (FILE, "\t.long 0x%lx\n", hex); \ - } while (0) -#endif - /* A C statement or statements which output an assembler instruction opcode to the stdio stream STREAM. The macro-operand PTR is a variable of type `char *' which points to the opcode name in its diff --git a/gcc/config/i386/ptx4-i.h b/gcc/config/i386/ptx4-i.h index e106b68ace67..0c51703f6e81 100644 --- a/gcc/config/i386/ptx4-i.h +++ b/gcc/config/i386/ptx4-i.h @@ -40,61 +40,6 @@ Boston, MA 02111-1307, USA. */ #define CPP_PREDEFINES \ "-Dunix -D_SEQUENT_ -Asystem=unix -Asystem=ptx4" -/* This is how to output assembly code to define a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long value; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value); \ - else \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ - } while (0) - -/* This is how to output assembly code to define a `double' constant. - We always have to use a pair of .long pseudo-ops to do this because - the native SVR4 ELF assembler is buggy and it generates incorrect - values when we try to use the .double pseudo-op instead. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long value[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - } \ - } while (0) - - -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long value[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[2]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ - } \ - } while (0) - #undef DBX_REGISTER_NUMBER #define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] diff --git a/gcc/config/i386/sysv4.h b/gcc/config/i386/sysv4.h index 0d44b1a23e4c..f9b3093f1b99 100644 --- a/gcc/config/i386/sysv4.h +++ b/gcc/config/i386/sysv4.h @@ -38,61 +38,6 @@ Boston, MA 02111-1307, USA. */ #define CPP_PREDEFINES \ "-Dunix -D__svr4__ -Asystem=unix -Asystem=svr4" -/* This is how to output assembly code to define a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long value; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value); \ - else \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value); \ - } while (0) - -/* This is how to output assembly code to define a `double' constant. - We always have to use a pair of .long pseudo-ops to do this because - the native SVR4 ELF assembler is buggy and it generates incorrect - values when we try to use the .double pseudo-op instead. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long value[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - } \ - } while (0) - - -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long value[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - if (sizeof (int) == sizeof (long)) \ - { \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[0]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[1]); \ - fprintf((FILE), "%s0x%x\n", ASM_LONG, (int) value[2]); \ - } \ - else \ - { \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[0]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[1]); \ - fprintf((FILE), "%s0x%lx\n", ASM_LONG, value[2]); \ - } \ - } while (0) - /* Output at beginning of assembler file. */ /* The .file command should always begin the output. */ diff --git a/gcc/config/i860/fx2800.h b/gcc/config/i860/fx2800.h index b12cb1237427..04a62a5a0db7 100644 --- a/gcc/config/i860/fx2800.h +++ b/gcc/config/i860/fx2800.h @@ -266,15 +266,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_COMMENT_START #define ASM_COMMENT_START "//" -/* Use definitions of ASM_OUTPUT_{DOUBLE,FLOAT} as given in i860.h */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf(FILE, "\t.double %.20e\n", (VALUE)) -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf(FILE, "\t.float %.12e\n", (VALUE)) - #undef ASM_FILE_START #define ASM_FILE_START(FILE) #undef ASM_OUTPUT_FUNCTION_PREFIX diff --git a/gcc/config/i860/i860.h b/gcc/config/i860/i860.h index aec2f2c0a759..bffae0b8bab1 100644 --- a/gcc/config/i860/i860.h +++ b/gcc/config/i860/i860.h @@ -1072,16 +1072,6 @@ do { ASM_OUTPUT_ALIGN ((FILE), 2); \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*.%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.double %.20e\n", (VALUE)) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float %.12e\n", (VALUE)) - /* This is how to output code to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/i860/paragon.h b/gcc/config/i860/paragon.h index 2a374fc5ff6b..6ed94ad70eb5 100644 --- a/gcc/config/i860/paragon.h +++ b/gcc/config/i860/paragon.h @@ -81,41 +81,6 @@ Boston, MA 02111-1307, USA. */ #define ASM_OUTPUT_IDENT(FILE, NAME) \ fprintf (FILE, "//\t.ident \"%s\"\n", NAME); -/* - * the assembler doesn't grok .double INF and the like - * but does understand .long with hex numbers, so special - * case the "symbolic" IEEE numbers. - */ -#undef ASM_OUTPUT_DOUBLE -#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], t[1]); \ - } \ - else \ - fprintf (FILE, "\t.double %.20e\n", VALUE); \ - } - -#undef ASM_OUTPUT_FLOAT -#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); \ - } \ - else \ - fprintf (FILE, "\t.float %.12e\n", VALUE); \ - } - #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ do \ diff --git a/gcc/config/i860/sysv4.h b/gcc/config/i860/sysv4.h index 4d335f719c05..9d5e52f374d1 100644 --- a/gcc/config/i860/sysv4.h +++ b/gcc/config/i860/sysv4.h @@ -59,55 +59,6 @@ Boston, MA 02111-1307, USA. */ fprintf (FILE, "]@%s", PART_CODE); \ } while (0) -/* If the host and target formats match, output the floats as hex. */ -#if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT -#if defined (HOST_WORDS_BIG_ENDIAN) == WORDS_BIG_ENDIAN - -/* This is how to output an assembler line defining a `double' constant. - Note that the native i860/svr4 ELF assembler can't properly handle - infinity. It generates an incorrect (non-infinity) value when given - `.double 99e9999' and it doesn't grok `inf' at all. It also mishandles - NaNs and -0.0. */ - -#undef ASM_OUTPUT_DOUBLE -#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.word 0x%lx\n\t.word 0x%lx\n", t[0], t[1]); \ - } \ - else \ - fprintf (FILE, "\t.double %.20e\n", VALUE); \ - } - -/* This is how to output an assembler line defining a `float' constant. - Note that the native i860/svr4 ELF assembler can't properly handle - infinity. It actually generates an assembly time error when given - `.float 99e9999' and it doesn't grok `inf' at all. It also mishandles - NaNs and -0.0. */ - -#undef ASM_OUTPUT_FLOAT -#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.word 0x%lx\n", t); \ - } \ - else \ - fprintf (FILE, "\t.float %.12e\n", VALUE); \ - } - -#endif /* word order matches */ -#endif /* HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT */ - #undef ASM_FILE_START #define ASM_FILE_START(FILE) \ do { output_file_directive (FILE, main_input_filename); \ diff --git a/gcc/config/i960/i960-protos.h b/gcc/config/i960/i960-protos.h index 483c15bb4173..cdebff102c3f 100644 --- a/gcc/config/i960/i960-protos.h +++ b/gcc/config/i960/i960-protos.h @@ -88,12 +88,6 @@ extern int i960_final_reg_parm_stack_space PARAMS ((int, tree)); extern int i960_reg_parm_stack_space PARAMS ((tree)); #endif /* TREE_CODE */ -#ifdef REAL_VALUE_TYPE -extern void i960_output_long_double PARAMS ((FILE *, REAL_VALUE_TYPE)); -extern void i960_output_double PARAMS ((FILE *, REAL_VALUE_TYPE)); -extern void i960_output_float PARAMS ((FILE *, REAL_VALUE_TYPE)); -#endif /* REAL_VALUE_TYPE */ - extern int process_pragma PARAMS ((int(*)(void), void(*)(int), const char *)); extern int i960_object_bytes_bitalign PARAMS ((int)); extern void i960_initialize PARAMS ((void)); diff --git a/gcc/config/i960/i960.c b/gcc/config/i960/i960.c index ffa28d58161f..67fef75daa03 100644 --- a/gcc/config/i960/i960.c +++ b/gcc/config/i960/i960.c @@ -2447,54 +2447,6 @@ i960_function_arg (cum, mode, type, named) return ret; } -/* Floating-point support. */ - -void -i960_output_long_double (file, value) - FILE *file; - REAL_VALUE_TYPE value; -{ - long value_long[3]; - char dstr[30]; - - REAL_VALUE_TO_TARGET_LONG_DOUBLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.20g", dstr); - - fprintf (file, - "\t.word\t0x%08lx\t\t# %s\n\t.word\t0x%08lx\n\t.word\t0x%08lx\n", - value_long[0], dstr, value_long[1], value_long[2]); - fprintf (file, "\t.word\t0x0\n"); -} - -void -i960_output_double (file, value) - FILE *file; - REAL_VALUE_TYPE value; -{ - long value_long[2]; - char dstr[30]; - - REAL_VALUE_TO_TARGET_DOUBLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.20g", dstr); - - fprintf (file, "\t.word\t0x%08lx\t\t# %s\n\t.word\t0x%08lx\n", - value_long[0], dstr, value_long[1]); -} - -void -i960_output_float (file, value) - FILE *file; - REAL_VALUE_TYPE value; -{ - long value_long; - char dstr[30]; - - REAL_VALUE_TO_TARGET_SINGLE (value, value_long); - REAL_VALUE_TO_DECIMAL (value, "%.12g", dstr); - - fprintf (file, "\t.word\t0x%08lx\t\t# %s (float)\n", value_long, dstr); -} - /* Return the number of bits that an object of size N bytes is aligned to. */ int diff --git a/gcc/config/i960/i960.h b/gcc/config/i960/i960.h index 12cf09c787ff..8acb2e48683e 100644 --- a/gcc/config/i960/i960.h +++ b/gcc/config/i960/i960.h @@ -1388,19 +1388,6 @@ extern struct rtx_def *i960_compare_op0, *i960_compare_op1; #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `long double' - constant. */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) i960_output_long_double(FILE, VALUE) - -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) i960_output_double(FILE, VALUE) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) i960_output_float(FILE, VALUE) - #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ fprintf (FILE, "\tst\t%s,(sp)\n\taddo\t4,sp,sp\n", reg_names[REGNO]) diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index 24fdba1483d0..f9c28adcd545 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -1913,37 +1913,6 @@ do { \ /* Output of Data. */ -/* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a floating-point constant of `TFmode', `DFmode', `SFmode', - respectively, whose value is VALUE. */ - -/* ??? Must reverse the word order for big-endian code? */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE, VALUE) \ -do { \ - long t[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, t); \ - fprintf (FILE, "\tdata4 0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx\n", \ - t[0] & 0xffffffff, t[1] & 0xffffffff, t[2] & 0xffffffff, 0L);\ -} while (0) - -/* ??? Must reverse the word order for big-endian code? */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { \ - long t[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, t); \ - fprintf (FILE, "\tdata8 0x%08lx%08lx\n", \ - t[1] & 0xffffffff, t[0] & 0xffffffff); \ -} while (0) - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, t); \ - fprintf (FILE, "\tdata4 0x%lx\n", t & 0xffffffff); \ -} while (0) - /* This is how to output an assembler line defining a `char' constant to an xdata segment. */ diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 4741849f7946..e24368054eff 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -1719,32 +1719,6 @@ do { \ no longer contain unusual constructs. */ #define ASM_APP_OFF "" -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - do \ - { \ - long t; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n", \ - t, ASM_COMMENT_START, str); \ - } \ - while (0) - -/* This is how to output an assembler line defining a `double' constant. */ -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ - do \ - { \ - long t[2]; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t.word\t0x%lx %s %s\n\t.word\t0x%lx\n", \ - t[0], ASM_COMMENT_START, str, t[1]); \ - } \ - while (0) - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ /* On the M32R we need to ensure the next instruction starts on a 32 bit diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c index b0e82dcedd49..f45d195e0203 100644 --- a/gcc/config/m68hc11/m68hc11.c +++ b/gcc/config/m68hc11/m68hc11.c @@ -2209,20 +2209,21 @@ print_operand (file, op, letter) else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == SFmode) { REAL_VALUE_TYPE r; + long l; + REAL_VALUE_FROM_CONST_DOUBLE (r, op); - ASM_OUTPUT_FLOAT_OPERAND (letter, file, r); - } - else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == XFmode) - { - REAL_VALUE_TYPE r; - REAL_VALUE_FROM_CONST_DOUBLE (r, op); - ASM_OUTPUT_LONG_DOUBLE_OPERAND (file, r); + REAL_VALUE_TO_TARGET_SINGLE (r, l); + asm_fprintf (file, "%I0x%lx", l); } - else if (GET_CODE (op) == CONST_DOUBLE && GET_MODE (op) == DFmode) + else if (GET_CODE (op) == CONST_DOUBLE + && (GET_MODE (op) == DFmode || GET_MODE (op) == XFmode)) { REAL_VALUE_TYPE r; + char dstr[30]; + REAL_VALUE_FROM_CONST_DOUBLE (r, op); - ASM_OUTPUT_DOUBLE_OPERAND (file, r); + REAL_VALUE_TO_DECIMAL (r, "%.20g", dstr); + asm_fprintf (file, "%I0r%s", dstr); } else { diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h index c2603c596702..deeb6a4d87f2 100644 --- a/gcc/config/m68hc11/m68hc11.h +++ b/gcc/config/m68hc11/m68hc11.h @@ -1569,28 +1569,6 @@ do { \ /* Output #ident as a .ident. */ -/* This is how to output a `long double' extended real constant. */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - ASM_OUTPUT_DOUBLE(FILE,VALUE) - -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t%s\t0x%lx,0x%lx\n", \ - integer_asm_op (4, TRUE), l[0], l[1]); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - assemble_aligned_integer (4, GEN_INT (l)); \ - } while (0) - /* This is how to output the definition of a user-level label named NAME, such as the label on a static function or variable NAME. */ @@ -1629,33 +1607,6 @@ do { long l; \ "*_.frame", "*_.tmp", "*_.z", "*_.xy", "*fake clobber", \ SOFT_REG_NAMES, "*sframe", "*ap"} - -/* Output a float value (represented as a C double) as an immediate operand. - This macro is a 68k-specific macro. */ - -#define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ - do { \ - long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - asm_fprintf ((FILE), "%I0x%lx", l); \ - } while (0) - -/* Output a double value (represented as a C double) as an immediate operand. - This macro is a 68k-specific macro. */ -#define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - asm_fprintf (FILE, "%I0r%s", dstr); \ - } while (0) - -/* Note, long double immediate operands are not actually - generated by m68k.md. */ -#define ASM_OUTPUT_LONG_DOUBLE_OPERAND(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - asm_fprintf (FILE, "%I0r%s", dstr); \ - } while (0) - /* Print an instruction operand X on file FILE. CODE is the code from the %-spec for printing this operand. If `%z3' was used to print operand 3, then CODE is 'z'. */ diff --git a/gcc/config/m68k/3b1.h b/gcc/config/m68k/3b1.h index d380b405ec2e..74aec112bf63 100644 --- a/gcc/config/m68k/3b1.h +++ b/gcc/config/m68k/3b1.h @@ -101,8 +101,6 @@ output_file_directive ((FILE), main_input_filename) #undef TARGET_VERSION #undef ASM_FORMAT_PRIVATE_NAME -#undef ASM_OUTPUT_DOUBLE -#undef ASM_OUTPUT_FLOAT #undef ASM_OUTPUT_ALIGN #undef ASM_OUTPUT_SOURCE_FILENAME #undef ASM_OUTPUT_SOURCE_LINE @@ -127,29 +125,6 @@ output_file_directive ((FILE), main_input_filename) ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 12), \ sprintf ((OUTPUT), "%s_%%%d", (NAME), (LABELNO))) -/* The unixpc doesn't know about double's and float's */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%lx,0x%lx\n", l[0], l[1]); \ - } 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%lx,0x%lx,0x%lx\n", l[0], l[1], l[2]); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "\tlong 0x%lx\n", l); \ - } while (0) - #define ASM_OUTPUT_ALIGN(FILE,LOG) \ do { \ if ((LOG) == 1) \ diff --git a/gcc/config/m68k/altos3068.h b/gcc/config/m68k/altos3068.h index c13e6086a032..63a129ca506f 100644 --- a/gcc/config/m68k/altos3068.h +++ b/gcc/config/m68k/altos3068.h @@ -78,24 +78,6 @@ Boston, MA 02111-1307, USA. */ #define USE_GAS -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } 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 { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } while (0) - #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { \ diff --git a/gcc/config/m68k/crds.h b/gcc/config/m68k/crds.h index 1da17e52212e..03faa9fbba3c 100644 --- a/gcc/config/m68k/crds.h +++ b/gcc/config/m68k/crds.h @@ -155,15 +155,6 @@ Boston, MA 02111-1307, USA. */ #undef IMMEDIATE_PREFIX #define IMMEDIATE_PREFIX "$" -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t.long 0x%lx, 0x%lx\n", l[0], l[1]); \ - } while (0) - /*unos has no .skip :-( */ #undef ASM_OUTPUT_SKIP #define ASM_OUTPUT_SKIP(FILE,SIZE) \ diff --git a/gcc/config/m68k/dpx2.h b/gcc/config/m68k/dpx2.h index b23792930319..2bc06b4bc2b7 100644 --- a/gcc/config/m68k/dpx2.h +++ b/gcc/config/m68k/dpx2.h @@ -269,43 +269,6 @@ Boston, MA 02111-1307, USA. */ } \ } -/* This is how to output a `long double' extended real constant. */ -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\tdc.l $%x,$%x,$%x\n", (int)l[0], (int)l[1], (int)l[2]); \ - else \ - fprintf (FILE, "\tdc.l $%lx,$%lx,$%lx\n", l[0], l[1], l[2]); \ - } while (0) - -#undef ASM_OUTPUT_DOUBLE -#if 0 -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - fprintf (FILE, "\tdc.d %s\n", dstr); \ - } while (0) -#endif -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tdc.l $%lx,$%lx\n", 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 { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - if (sizeof (int) == sizeof (long)) \ - fprintf (FILE, "\tdc.l $%x\n", (int) l); \ - else \ - fprintf (FILE, "\tdc.l $%lx\n", l); \ - } while (0) - /* This is how to output an element of a case-vector that is absolute. (The 68000 does not use such vectors, but we must define this macro anyway.) */ diff --git a/gcc/config/m68k/hp320.h b/gcc/config/m68k/hp320.h index 11784c7ca9f3..292d25db5b9e 100644 --- a/gcc/config/m68k/hp320.h +++ b/gcc/config/m68k/hp320.h @@ -165,8 +165,6 @@ Boston, MA 02111-1307, USA. */ #undef TEXT_SECTION_ASM_OP #undef DATA_SECTION_ASM_OP #undef READONLY_DATA_SECTION -#undef ASM_OUTPUT_DOUBLE -#undef ASM_OUTPUT_FLOAT #undef ASM_OUTPUT_ADDR_VEC_ELT #undef ASM_OUTPUT_ADDR_DIFF_ELT #undef ASM_OUTPUT_ALIGN @@ -266,25 +264,6 @@ do{ if (PREFIX[0] == 'L' && PREFIX[1] == 'I') \ fprintf (FILE, "%s%d:\n", PREFIX, NUM); \ } while(0) -#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%lx,0x%lx,0x%lx\n", l[0], l[1], l[2]); \ - } while (0) - #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tlong L%d\n", VALUE) diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index 4637d812249a..2d422a07c173 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -1802,30 +1802,6 @@ __transfer_from_trampoline () \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM)) -/* This is how to output a `long double' extended real constant. */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long l[3]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t.long 0x%lx,0x%lx,0x%lx\n", l[0], l[1], l[2]); \ - } while (0) - -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20g", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf (FILE, "\t.long 0x%lx\n", l); \ - } while (0) - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/m68k/mot3300.h b/gcc/config/m68k/mot3300.h index 6801f6b53eac..88e41fa03396 100644 --- a/gcc/config/m68k/mot3300.h +++ b/gcc/config/m68k/mot3300.h @@ -296,34 +296,6 @@ Boston, MA 02111-1307, USA. */ #define INT_OP_GROUP INT_OP_NO_DOT #endif -/* The sysV68 as doesn't know about double's and float's. */ -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf ((FILE), "%s0x%lx,0x%lx\n", \ - integer_asm_op (4, TRUE), l[0], l[1]); \ - } 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, "%s 0x%lx,0x%lx,0x%lx\n", \ - integer_asm_op (4, TRUE), l[0], l[1], l[2]); \ - } 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 { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - assemble_aligned_integer (4, GEN_INT (l)); \ - } while (0) - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ diff --git a/gcc/config/m68k/news.h b/gcc/config/m68k/news.h index 8e556439b0fc..7b48a10e1433 100644 --- a/gcc/config/m68k/news.h +++ b/gcc/config/m68k/news.h @@ -102,7 +102,6 @@ Boston, MA 02111-1307, USA. */ #undef REGISTER_NAMES #undef ASM_OUTPUT_REG_PUSH #undef ASM_OUTPUT_REG_POP -#undef ASM_OUTPUT_DOUBLE #undef ASM_OUTPUT_SKIP #undef ASM_FORMAT_PRIVATE_NAME #endif @@ -160,12 +159,6 @@ Boston, MA 02111-1307, USA. */ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ fprintf (FILE, "\tmove.l (sp)+,%s\n", reg_names[REGNO]) -#define ASM_OUTPUT_DOUBLE(FILE,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)) diff --git a/gcc/config/m68k/next.h b/gcc/config/m68k/next.h index 1e2d10d527e5..3ccffc8ee0ce 100644 --- a/gcc/config/m68k/next.h +++ b/gcc/config/m68k/next.h @@ -39,59 +39,6 @@ Boston, MA 02111-1307, USA. */ (Why isn't this in m68k.h?) */ #define STRUCTURE_SIZE_BOUNDARY 16 -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#ifdef REAL_VALUE_TO_TARGET_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - long hex[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, hex); \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", hex[0], hex[1]); \ - } while (0) -#else -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } while (0) -#endif - -/* This is how to output an assembler line defining a `float' constant. */ - -#undef ASM_OUTPUT_FLOAT -#ifdef REAL_VALUE_TO_TARGET_SINGLE -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - long hex; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, hex); \ - fprintf (FILE, "\t.long 0x%lx\n", hex); \ - } while (0) -#else -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) -#endif #undef ASM_OUTPUT_FLOAT_OPERAND #ifdef REAL_VALUE_TO_TARGET_SINGLE diff --git a/gcc/config/m68k/next21.h b/gcc/config/m68k/next21.h index 5040aa6a92f1..b4d8aee8eeb3 100644 --- a/gcc/config/m68k/next21.h +++ b/gcc/config/m68k/next21.h @@ -27,39 +27,6 @@ Boston, MA 02111-1307, USA. */ /* for #include in libgcc2.c */ #define NeXTStep21 -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "#0r-99e999"); \ - else \ - fprintf (FILE, "#0r99e999"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } 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 { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) - /* called from m68k.c line 1881 */ #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ diff --git a/gcc/config/m68k/sgs.h b/gcc/config/m68k/sgs.h index 7f44b2682093..949ea7dcaa77 100644 --- a/gcc/config/m68k/sgs.h +++ b/gcc/config/m68k/sgs.h @@ -99,36 +99,6 @@ Boston, MA 02111-1307, USA. */ #endif /* defined SUPPORT_SUN_FPA */ -/* This is how to output an assembler line defining an `int' constant. */ -/* The SGS assembler doesn't understand ".word". */ - -#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), "%s0x%lx,0x%lx,0x%lx\n", \ - integer_asm_op (4, TRUE), 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 { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf ((FILE), "%s0x%lx,0x%lx\n", \ - integer_asm_op (4, TRUE), 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 { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - assemble_aligned_integer (4, GEN_INT (l)); \ - } while (0) - /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes. */ diff --git a/gcc/config/m68k/sun2o4.h b/gcc/config/m68k/sun2o4.h index 4dd393baccf5..b3564c233358 100644 --- a/gcc/config/m68k/sun2o4.h +++ b/gcc/config/m68k/sun2o4.h @@ -96,48 +96,6 @@ Boston, MA 02111-1307, USA. */ #define LINK_SPEC \ "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic}" -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else if (REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - fprintf (FILE, "\t.long 0x80000000,0\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } 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 { if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else if (REAL_VALUE_MINUS_ZERO (VALUE)) \ - { \ - fprintf (FILE, "\t.long 0x80000000\n"); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } while (0) - #undef ASM_OUTPUT_FLOAT_OPERAND #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \ do { \ diff --git a/gcc/config/m68k/sun3.h b/gcc/config/m68k/sun3.h index e8265630dff0..0bee82346875 100644 --- a/gcc/config/m68k/sun3.h +++ b/gcc/config/m68k/sun3.h @@ -183,54 +183,6 @@ Boston, MA 02111-1307, USA. */ #define FUNCTION_VALUE(VALTYPE,FUNC) FUNCTION_VALUEX (TYPE_MODE (VALTYPE)) #endif /* 0 */ -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.double 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.double 0r99e999\n"); \ - } \ - else if (REAL_VALUE_ISNAN (VALUE)) \ - { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), l); \ - fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", l[0], l[1]); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.17g", dstr); \ - fprintf (FILE, "\t.double 0r%s\n", dstr); \ - } \ - } - -/* This is how to output an assembler line defining a `float' constant. */ - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - if (REAL_VALUE_ISINF (VALUE)) \ - { \ - if (REAL_VALUE_NEGATIVE (VALUE)) \ - fprintf (FILE, "\t.single 0r-99e999\n"); \ - else \ - fprintf (FILE, "\t.single 0r99e999\n"); \ - } \ - else if (REAL_VALUE_ISNAN (VALUE)) \ - { long l; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), l); \ - fprintf (FILE, "\t.long 0x%lx\n", l); \ - } \ - else \ - { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.9g", dstr); \ - fprintf (FILE, "\t.single 0r%s\n", dstr); \ - } \ - } - /* This is how to output an assembler lines defining floating operands. There's no way to output a NaN's fraction, so we lose it. */ diff --git a/gcc/config/m68k/tower-as.h b/gcc/config/m68k/tower-as.h index f9009df0083b..6007099bd3ee 100644 --- a/gcc/config/m68k/tower-as.h +++ b/gcc/config/m68k/tower-as.h @@ -258,27 +258,6 @@ Boston, MA 02111-1307, USA. */ fprintf (FILE, "\tswbeg &%d\n%s%%%d:\n", \ XVECLEN (PATTERN (TABLE), 1), (PREFIX), (NUM)); \ -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\tlong 0x%lx,0x%lx\n", l[0], l[1]); \ - } 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%lx,0x%lx,0x%lx\n", l[0], l[1], l[2]); \ - } while (0) - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf ((FILE), "\tlong 0x%lx\n", l); \ - } while (0) - #undef ASM_OUTPUT_ADDR_VEC_ELT #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ fprintf (FILE, "\tlong L%%%d\n", (VALUE)) diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h index 47c49b822cdb..590116bd241e 100644 --- a/gcc/config/m88k/m88k.h +++ b/gcc/config/m88k/m88k.h @@ -1988,61 +1988,6 @@ do { \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, TARGET_SVR4 ? "*.%s%ld" : "*@%s%ld", PREFIX, (long)(NUM)) -/* Internal macro to get a single precision floating point value into - an int, so we can print its value in hex. */ -#define FLOAT_TO_INT_INTERNAL( FVALUE, IVALUE ) \ - { union { \ - REAL_VALUE_TYPE d; \ - struct { \ - unsigned sign : 1; \ - unsigned exponent1 : 1; \ - unsigned exponent2 : 3; \ - unsigned exponent3 : 7; \ - unsigned mantissa1 : 20; \ - unsigned mantissa2 : 3; \ - unsigned mantissa3 : 29; \ - } s; \ - } _u; \ - \ - union { \ - int i; \ - struct { \ - unsigned sign : 1; \ - unsigned exponent1 : 1; \ - unsigned exponent3 : 7; \ - unsigned mantissa1 : 20; \ - unsigned mantissa2 : 3; \ - } s; \ - } _u2; \ - \ - _u.d = REAL_VALUE_TRUNCATE (SFmode, FVALUE); \ - _u2.s.sign = _u.s.sign; \ - _u2.s.exponent1 = _u.s.exponent1; \ - _u2.s.exponent3 = _u.s.exponent3; \ - _u2.s.mantissa1 = _u.s.mantissa1; \ - _u2.s.mantissa2 = _u.s.mantissa2; \ - IVALUE = _u2.i; \ - } - -/* This is how to output an assembler line defining a `double' constant. - Use "word" pseudos to avoid printing NaNs, infinity, etc. */ -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { \ - union { REAL_VALUE_TYPE d; long l[2]; } x; \ - x.d = (VALUE); \ - fprintf (FILE, "%s0x%.8lx, 0x%.8lx\n", \ - integer_asm_op (4, TRUE), \ - (long) x.l[0], (long) x.l[1]); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { \ - int i; \ - FLOAT_TO_INT_INTERNAL (VALUE, i); \ - assemble_aligned_integer (4, GEN_INT (i)); \ - } while (0) - /* The single-byte pseudo-op is the default. Override svr[34].h. */ #undef ASM_OUTPUT_ASCII #define ASM_OUTPUT_ASCII(FILE, P, SIZE) \ diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h index 2709c578aabf..61c8c6bb7690 100644 --- a/gcc/config/mcore/mcore.h +++ b/gcc/config/mcore/mcore.h @@ -1245,27 +1245,6 @@ extern long mcore_current_compilation_timestamp; /* Output various types of constants. */ -/* This is how to output an assembler line defining a `double'. */ -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } \ - while (0) - - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do \ - { \ - char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } \ - while (0) - /* This is how to output an assembler line that says to advance the location counter by SIZE bytes. */ #undef ASM_OUTPUT_SKIP diff --git a/gcc/config/mips/mips-protos.h b/gcc/config/mips/mips-protos.h index a208b9126668..1acf3c1c2c6c 100644 --- a/gcc/config/mips/mips-protos.h +++ b/gcc/config/mips/mips-protos.h @@ -40,10 +40,6 @@ extern void mips_declare_object PARAMS ((FILE *, const char *, const char *, int)); extern void mips_expand_epilogue PARAMS ((void)); extern void mips_expand_prologue PARAMS ((void)); -#ifdef REAL_VALUE_TYPE -extern void mips_output_double PARAMS ((FILE *, REAL_VALUE_TYPE)); -extern void mips_output_float PARAMS ((FILE *, REAL_VALUE_TYPE)); -#endif /* REAL_VALUE_TYPE */ extern void mips_output_filename PARAMS ((FILE *, const char *)); extern void mips_output_lineno PARAMS ((FILE *, int)); extern void mips_output_ascii PARAMS ((FILE *, const char *, diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 9601efb946d9..e433488e6c2f 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -6289,43 +6289,6 @@ mips_declare_object (stream, name, init_string, final_string, size) } } -/* Output a double precision value to the assembler. If both the - host and target are IEEE, emit the values in hex. */ - -void -mips_output_double (stream, value) - FILE *stream; - REAL_VALUE_TYPE value; -{ -#ifdef REAL_VALUE_TO_TARGET_DOUBLE - long value_long[2]; - REAL_VALUE_TO_TARGET_DOUBLE (value, value_long); - - fprintf (stream, "\t.word\t0x%08lx\t\t# %.20g\n\t.word\t0x%08lx\n", - value_long[0], value, value_long[1]); -#else - fprintf (stream, "\t.double\t%.20g\n", value); -#endif -} - -/* Output a single precision value to the assembler. If both the - host and target are IEEE, emit the values in hex. */ - -void -mips_output_float (stream, value) - FILE *stream; - REAL_VALUE_TYPE value; -{ -#ifdef REAL_VALUE_TO_TARGET_SINGLE - long value_long; - REAL_VALUE_TO_TARGET_SINGLE (value, value_long); - - fprintf (stream, "\t.word\t0x%08lx\t\t# %.12g (float)\n", value_long, value); -#else - fprintf (stream, "\t.float\t%.12g\n", value); -#endif -} - /* Return the bytes needed to compute the frame pointer from the current stack pointer. diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index c877fd15adc0..a9a77ee37988 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -4384,18 +4384,6 @@ do { \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf ((LABEL), "*%s%s%ld", (LOCAL_LABEL_PREFIX), (PREFIX), (long)(NUM)) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(STREAM,VALUE) \ - mips_output_double (STREAM, VALUE) - - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(STREAM,VALUE) \ - mips_output_float (STREAM, VALUE) - - /* This is how to output an element of a case-vector that is absolute. */ #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \ diff --git a/gcc/config/mmix/mmix-protos.h b/gcc/config/mmix/mmix-protos.h index 0a3aca1ca803..b936625c7076 100644 --- a/gcc/config/mmix/mmix-protos.h +++ b/gcc/config/mmix/mmix-protos.h @@ -131,12 +131,6 @@ extern rtx mmix_gen_compare_reg PARAMS ((enum rtx_code, rtx, rtx)); extern int mmix_asm_preferred_eh_data_format PARAMS ((int, int)); extern void mmix_setup_frame_addresses PARAMS ((void)); -/* Need real.h */ -#ifdef GCC_REAL_H -extern void mmix_asm_output_double PARAMS ((FILE *, REAL_VALUE_TYPE *)); -extern void mmix_asm_output_float PARAMS ((FILE *, REAL_VALUE_TYPE *)); -#endif /* GCC_REAL_H */ - /* * Local variables: * eval: (c-set-style "gnu") diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c index 9ba6c2d2b409..3269d5b40750 100644 --- a/gcc/config/mmix/mmix.c +++ b/gcc/config/mmix/mmix.c @@ -1890,39 +1890,6 @@ mmix_asm_output_source_line (stream, lineno) fprintf (stream, "\n"); } -/* ASM_OUTPUT_DOUBLE. */ - -void -mmix_asm_output_double (stream, valuep) - FILE * stream; - REAL_VALUE_TYPE * valuep; -{ - unsigned long bits[2]; - HOST_WIDEST_INT value; - - REAL_VALUE_TO_TARGET_DOUBLE (*valuep, (long *) bits); - value - = (((HOST_WIDEST_INT) bits[0]) << 32) | (HOST_WIDEST_INT) bits[1]; - mmix_output_octa (stream, value, 1); -} - -/* ASM_OUTPUT_FLOAT. */ - -void -mmix_asm_output_float (stream, valuep) - FILE * stream; - REAL_VALUE_TYPE * valuep; -{ - unsigned long bits; - - REAL_VALUE_TO_TARGET_SINGLE (*valuep, bits); - - fprintf (stream, "\tTETRA #%lx\n", - (unsigned long) (bits - & (((unsigned HOST_WIDEST_INT) (1 << 31) - 1) * 2 - + 1))); -} - /* Target hook for assembling integer objects. Use mmix_print_operand for WYDE and TETRA. Use mmix_output_octa to output 8-byte CONST_DOUBLEs. */ diff --git a/gcc/config/mmix/mmix.h b/gcc/config/mmix/mmix.h index 8cb14e29f8ac..8e8198184aa1 100644 --- a/gcc/config/mmix/mmix.h +++ b/gcc/config/mmix/mmix.h @@ -966,16 +966,9 @@ const_section () \ /* Node: Data Output */ -#define ASM_OUTPUT_DOUBLE(STREAM, VALUE) \ - mmix_asm_output_double (STREAM, &VALUE) - -#define ASM_OUTPUT_FLOAT(STREAM, VALUE) \ - mmix_asm_output_float (STREAM, &VALUE) - #define ASM_OUTPUT_ASCII(STREAM, PTR, LEN) \ mmix_asm_output_ascii (STREAM, PTR, LEN) - /* Node: Uninitialized Data */ #define ASM_OUTPUT_ALIGNED_COMMON(ST, N, S, A) \ diff --git a/gcc/config/mn10200/mn10200.h b/gcc/config/mn10200/mn10200.h index 3aa38cf80f9d..261ae4611bea 100644 --- a/gcc/config/mn10200/mn10200.h +++ b/gcc/config/mn10200/mn10200.h @@ -817,23 +817,6 @@ struct cum_arg { int nbytes; }; #define ASM_APP_OFF "#NO_APP\n" -/* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } while (0) - - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } while (0) - /* This says how to output the assembler to define a global uninitialized but not common symbol. Try to use asm_output_bss to implement this macro. */ diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index 4adf82372c74..9297b812533b 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -901,23 +901,6 @@ struct cum_arg {int nbytes; }; #define ASM_APP_OFF "#NO_APP\n" -/* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } while (0) - - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } while (0) - /* This says how to output the assembler to define a global uninitialized but not common symbol. Try to use asm_output_bss to implement this macro. */ diff --git a/gcc/config/ns32k/encore.h b/gcc/config/ns32k/encore.h index 3a1515cdde5e..07d447716636 100644 --- a/gcc/config/ns32k/encore.h +++ b/gcc/config/ns32k/encore.h @@ -39,7 +39,6 @@ Boston, MA 02111-1307, USA. */ #undef ASM_OUTPUT_ADDR_DIFF_ELT #undef ASM_OUTPUT_ALIGN #undef ASM_OUTPUT_ASCII -#undef ASM_OUTPUT_DOUBLE #undef ASM_OUTPUT_INTERNAL_LABEL #undef ASM_OUTPUT_LOCAL #undef CPP_PREDEFINES @@ -105,9 +104,6 @@ do { \ } while (0) -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.long 0f%.20e\n", (VALUE)) - #define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ ( fputs ("\t.bss ", (FILE)), \ assemble_name ((FILE), (NAME)), \ diff --git a/gcc/config/ns32k/ns32k.h b/gcc/config/ns32k/ns32k.h index 8bd64f6a2efe..1822c189b5ed 100644 --- a/gcc/config/ns32k/ns32k.h +++ b/gcc/config/ns32k/ns32k.h @@ -1283,18 +1283,6 @@ while (0) /* Output of Data */ -/* 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)) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float 0f%.20e\n", (VALUE)) - -/* This is how to output an assembler line defining an `int' constant. */ - /* This is how to output an assembler line defining an external/static address which is not in tree format (for collect.c). */ diff --git a/gcc/config/pa/long_double.h b/gcc/config/pa/long_double.h index f8358cca3240..9d21eea6bc4c 100644 --- a/gcc/config/pa/long_double.h +++ b/gcc/config/pa/long_double.h @@ -20,17 +20,6 @@ Boston, MA 02111-1307, USA. */ #define LONG_DOUBLE_TYPE_SIZE 128 -#undef ASM_OUTPUT_LONG_DOUBLE -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ -do { long value[4]; \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), value); \ - fprintf((FILE), "%s\t0x%lx\n", "\t.word", value[0]); \ - fprintf((FILE), "%s\t0x%lx\n", "\t.word", value[1]); \ - fprintf((FILE), "%s\t0x%lx\n", "\t.word", value[2]); \ - fprintf((FILE), "%s\t0x%lx\n", "\t.word", value[3]); \ - } while (0) - - /* Define library calls for quad FP operations. These are all part of the PA32 and PA64 ABIs. */ #define ADDTF3_LIBCALL "_U_Qfadd" diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 525a9420d2d6..1663be76f9e2 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1735,22 +1735,6 @@ while (0) #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%c$%s%04ld", (PREFIX)[0], (PREFIX) + 1, (long)(NUM)) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - do { long l[2]; \ - REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ - fprintf (FILE, "\t.word 0x%lx\n\t.word 0x%lx\n", l[0], l[1]); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { long l; \ - REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ - fprintf (FILE, "\t.word 0x%lx\n", l); \ - } while (0) - #define ASM_GLOBALIZE_LABEL(FILE, NAME) \ do { \ /* We only handle DATA objects here, functions are globalized in \ diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h index 61327e748f58..53b157180a0f 100644 --- a/gcc/config/pdp11/pdp11.h +++ b/gcc/config/pdp11/pdp11.h @@ -1089,16 +1089,6 @@ fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n") \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s_%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\tdouble %.20e\n", (VALUE)) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\tfloat %.12e\n", (VALUE)) - #define ASM_OUTPUT_ASCII(FILE, P, SIZE) \ output_ascii (FILE, P, SIZE) diff --git a/gcc/config/pj/pj.h b/gcc/config/pj/pj.h index 11c6aad9d61d..87606fc283c8 100644 --- a/gcc/config/pj/pj.h +++ b/gcc/config/pj/pj.h @@ -1184,22 +1184,6 @@ do { fputs (current_function_varargs || current_function_stdarg \ /* Output various types of constants. */ -/* This is how to output an assembler line defining a `double'. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((FILE), "\t.double %s\n", dstr); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((FILE), "\t.float %s\n", dstr); \ - } while (0) - /* This is how to output an assembler line that says to advance the location counter by SIZE bytes. */ diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c index 2d9f9772ecd4..6ded1f7d5384 100644 --- a/gcc/config/romp/romp.c +++ b/gcc/config/romp/romp.c @@ -1965,10 +1965,8 @@ output_fpops (file) union real_extract u; memcpy (&u, &CONST_DOUBLE_LOW (immed[i]), sizeof u); - if (GET_MODE (immed[i]) == DFmode) - ASM_OUTPUT_DOUBLE (file, u.d); - else - ASM_OUTPUT_FLOAT (file, u.d); + assemble_real (u.d, GET_MODE (immed[i]), + GET_MODE_ALIGNMENT (GET_MODE (immed[i]))); } else abort (); diff --git a/gcc/config/romp/romp.h b/gcc/config/romp/romp.h index f9b7e9d89895..4f820781d08f 100644 --- a/gcc/config/romp/romp.h +++ b/gcc/config/romp/romp.h @@ -1384,26 +1384,6 @@ struct rt_cargs {int gregs, fregs; }; #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) -/* 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)) - -/* This is how to output an assembler line defining a `float' constant. - - WARNING: Believe it or not, the ROMP assembler has a bug in its - handling of single-precision floating-point values making it impossible - to output such values in the expected way. Therefore, it must be output - in hex. THIS WILL NOT WORK IF CROSS-COMPILING FROM A MACHINE THAT DOES - NOT USE IEEE-FORMAT FLOATING-POINT, but there is nothing that can be done - about it short of fixing the assembler. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { union { int i; float f; } u_i_f; \ - u_i_f.f = (VALUE); \ - fprintf (FILE, "\t.long 0x%x\n", u_i_f.i);\ - } while (0) - /* This is how to output code to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index ed8becd6567f..72c1f7228717 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -2669,25 +2669,6 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */ the loader. This depends on the AIX version. */ #define RS6000_CALL_GLUE "cror 31,31,31" -/* This is how to output an assembler line defining a `double' constant. */ - -#define ASM_OUTPUT_DOUBLE(FILE, 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); \ - } - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } - /* This is how to output an element of a case-vector that is relative. */ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \ diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h index 25bae58d475e..9c01e5815e58 100644 --- a/gcc/config/s390/linux.h +++ b/gcc/config/s390/linux.h @@ -93,30 +93,6 @@ Boston, MA 02111-1307, USA. */ #define ASM_OUTPUT_LABEL(FILE, NAME) \ (assemble_name (FILE, NAME), fputs (":\n", FILE)) -/* This is how to output an assembler line defining a `double' constant. */ - - -/* This is how to output an assembler line defining a `double' constant. */ - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE, 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); \ - } - -/* This is how to output an assembler line defining a `float' constant. */ - -#undef ASM_OUTPUT_FLOAT -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ - { \ - long t; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - fprintf (FILE, "\t.long 0x%lx\n", t & 0xffffffff); \ - } - /* Store in OUTPUT a string (made with alloca) containing an assembler-name for a local static variable named NAME. LABELNO is an integer which is different for each call. */ diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index b2dd8f9bcc68..c43470317aca 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -2072,21 +2072,6 @@ extern char fp_reg_names[][5]; /* Output various types of constants. */ -/* This is how to output an assembler line defining a `double'. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((FILE), "\t.double %s\n", dstr); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((FILE), "\t.float %s\n", dstr); \ - } while (0) - /* Loop alignment is now done in machine_dependent_reorg, so that branch shortening can know about it. */ diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 358027537465..1a6547cc3b06 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -2717,56 +2717,6 @@ do { \ #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf ((LABEL), "*%s%ld", (PREFIX), (long)(NUM)) -/* This is how to output an assembler line defining a `float' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - { \ - long t; \ - char str[30]; \ - REAL_VALUE_TO_TARGET_SINGLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", \ - integer_asm_op (4, TRUE), t, \ - ASM_COMMENT_START, str); \ - } \ - -/* This is how to output an assembler line defining a `double' constant. - We always have to use a .long pseudo-op to do this because the native - SVR4 ELF assembler is buggy and it generates incorrect values when we - try to use the .float pseudo-op instead. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - { \ - long t[2]; \ - char str[30]; \ - const char *long_op = integer_asm_op (4, TRUE); \ - REAL_VALUE_TO_TARGET_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", long_op, t[0], \ - ASM_COMMENT_START, str); \ - fprintf (FILE, "\t%s\t0x%lx\n", long_op, t[1]); \ - } - -/* This is how to output an assembler line defining a `long double' - constant. */ - -#define ASM_OUTPUT_LONG_DOUBLE(FILE,VALUE) \ - { \ - long t[4]; \ - char str[30]; \ - const char *long_op = integer_asm_op (4, TRUE); \ - REAL_VALUE_TO_TARGET_LONG_DOUBLE ((VALUE), t); \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", str); \ - fprintf (FILE, "\t%s\t0x%lx %s ~%s\n", long_op, t[0], \ - ASM_COMMENT_START, str); \ - fprintf (FILE, "\t%s\t0x%lx\n", long_op, t[1]); \ - fprintf (FILE, "\t%s\t0x%lx\n", long_op, t[2]); \ - fprintf (FILE, "\t%s\t0x%lx\n", long_op, t[3]); \ - } - /* This is how we hook in and defer the case-vector until the end of the function. */ #define ASM_OUTPUT_ADDR_VEC(LAB,VEC) \ diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h index 4f71d53e66ee..ac000e460361 100644 --- a/gcc/config/stormy16/stormy16.h +++ b/gcc/config/stormy16/stormy16.h @@ -3546,31 +3546,6 @@ do { \ /* Output of Data. */ -/* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a floating-point constant of `TFmode', `DFmode', `SFmode', - `TQFmode', `HFmode', or `QFmode', respectively, whose value is VALUE. VALUE - will be a C expression of type `REAL_VALUE_TYPE'. Macros such as - `REAL_VALUE_TO_TARGET_DOUBLE' are useful for writing these definitions. */ - -/* This is how to output an assembler line defining a `double'. */ -#define ASM_OUTPUT_DOUBLE(STREAM,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((STREAM), "\t.double %s\n", dstr); \ - } while (0) - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(STREAM,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf ((STREAM), "\t.float %s\n", dstr); \ - } while (0) - -/* #define ASM_OUTPUT_LONG_DOUBLE(STREAM, VALUE) */ -/* #define ASM_OUTPUT_THREE_QUARTER_FLOAT(STREAM, VALUE) */ -/* #define ASM_OUTPUT_SHORT_FLOAT(STREAM, VALUE) */ -/* #define ASM_OUTPUT_BYTE_FLOAT(STREAM, VALUE) */ - /* A C statement to output to the stdio stream STREAM an assembler instruction to assemble a string constant containing the LEN bytes at PTR. PTR will be a C expression of type `char *' and LEN a C expression of type `int'. diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index cb3d1459f512..a81a6711982a 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -1258,23 +1258,6 @@ do { \ else \ goto FAIL; -/* This is how to output an assembler line defining a `double' constant. - It is .double or .float, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.double %s\n", dstr); \ - } while (0) - - -/* This is how to output an assembler line defining a `float' constant. */ -#define ASM_OUTPUT_FLOAT(FILE, VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL ((VALUE), "%.20e", dstr); \ - fprintf (FILE, "\t.float %s\n", dstr); \ - } while (0) - /* This says how to output the assembler to define a global uninitialized but not common symbol. */ diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index 7d0608e46cfb..8153303c115c 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -1106,23 +1106,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES }; #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%d", PREFIX, NUM) -/* This is how to output an assembler line defining a `double' constant. - It is .dfloat or .gfloat, depending. */ - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.%cfloat 0%c%s\n", ASM_DOUBLE_CHAR, \ - ASM_DOUBLE_CHAR, dstr); \ - } while (0); - -/* This is how to output an assembler line defining a `float' constant. */ - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.float 0f%s\n", dstr); } while (0); - /* This is how to output an insn to push a register on the stack. It need not be very fast code. */ diff --git a/gcc/config/vax/vaxv.h b/gcc/config/vax/vaxv.h index 2a113b3836ea..72c09fe8734b 100644 --- a/gcc/config/vax/vaxv.h +++ b/gcc/config/vax/vaxv.h @@ -61,10 +61,3 @@ do { \ } \ fputs ("\n", (FILE)); \ } while (0) - -#undef ASM_OUTPUT_DOUBLE -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { char dstr[30]; \ - REAL_VALUE_TO_DECIMAL (VALUE, "%.20e", dstr); \ - fprintf (FILE, "\t.double 0d%s\n", dstr); \ - } while (0) diff --git a/gcc/config/we32k/we32k.h b/gcc/config/we32k/we32k.h index 0cc12caf20ef..094c9c3b9294 100644 --- a/gcc/config/we32k/we32k.h +++ b/gcc/config/we32k/we32k.h @@ -755,37 +755,6 @@ enum reg_class { NO_REGS, GENERAL_REGS, ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \ } while (0) -/* This is how to output an assembler line defining a `double' constant. */ - -/* This is how to output an assembler line defining a `float' constant. */ - -/* AT&T's assembler can't handle floating constants written as floating. - However, when cross-compiling, always use that in case format differs. */ - -#ifdef CROSS_COMPILE - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ - fprintf (FILE, "\t.double 0r%.20g\n", (VALUE)) - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ - fprintf (FILE, "\t.float 0r%.10g\n", (VALUE)) - -#else - -#define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ -do { union { double d; long l[2];} tem; \ - tem.d = (VALUE); \ - fprintf (FILE, "\t.word 0x%lx, 0x%lx\n", tem.l[0], tem.l[1]);\ - } while (0) - -#define ASM_OUTPUT_FLOAT(FILE,VALUE) \ -do { union { float f; long l;} tem; \ - tem.f = (VALUE); \ - fprintf (FILE, "\t.word 0x%lx\n", tem.l); \ - } while (0) - -#endif /* not CROSS_COMPILE */ - #define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ do { \ const unsigned char *s; \ diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b62e33a2c4cb..1ad7dcb6ffb6 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -5852,23 +5852,6 @@ when the relevant string is @code{NULL}. @end deftypefn @table @code -@findex ASM_OUTPUT_LONG_DOUBLE -@findex ASM_OUTPUT_DOUBLE -@findex ASM_OUTPUT_FLOAT -@item ASM_OUTPUT_LONG_DOUBLE (@var{stream}, @var{value}) -@itemx ASM_OUTPUT_DOUBLE (@var{stream}, @var{value}) -@itemx ASM_OUTPUT_FLOAT (@var{stream}, @var{value}) -@itemx ASM_OUTPUT_THREE_QUARTER_FLOAT (@var{stream}, @var{value}) -@itemx ASM_OUTPUT_SHORT_FLOAT (@var{stream}, @var{value}) -@itemx ASM_OUTPUT_BYTE_FLOAT (@var{stream}, @var{value}) -A C statement to output to the stdio stream @var{stream} an assembler -instruction to assemble a floating-point constant of @code{TFmode}, -@code{DFmode}, @code{SFmode}, @code{TQFmode}, @code{HFmode}, or -@code{QFmode}, respectively, whose value is @var{value}. @var{value} -will be a C expression of type @code{REAL_VALUE_TYPE}. Macros such as -@code{REAL_VALUE_TO_TARGET_DOUBLE} are useful for writing these -definitions. - @findex OUTPUT_ADDR_CONST_EXTRA @item OUTPUT_ADDR_CONST_EXTRA (@var{stream}, @var{x}, @var{fail}) A C statement to recognize @var{rtx} patterns that diff --git a/gcc/varasm.c b/gcc/varasm.c index 87d81e38ba33..3435f770c9b0 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -140,7 +140,6 @@ static HOST_WIDE_INT const_alias_set; static const char *strip_reg_name PARAMS ((const char *)); static int contains_pointers_p PARAMS ((tree)); -static void assemble_real_1 PARAMS ((PTR)); static void decode_addr_const PARAMS ((tree, struct addr_const *)); static int const_hash PARAMS ((tree)); static int compare_constant PARAMS ((tree, @@ -2038,87 +2037,86 @@ assemble_integer (x, size, align, force) return false; } -/* Assemble the floating-point constant D into an object of size MODE. */ -struct assemble_real_args -{ - REAL_VALUE_TYPE *d; - enum machine_mode mode; -}; - -static void -assemble_real_1 (p) - PTR p; +void +assemble_real (d, mode, align) + REAL_VALUE_TYPE d; + enum machine_mode mode; + unsigned int align; { - struct assemble_real_args *args = (struct assemble_real_args *) p; - REAL_VALUE_TYPE *d = args->d; - enum machine_mode mode = args->mode; + long data[4]; + long l; + unsigned int nalign = min_align (align, 32); - switch (mode) + switch (BITS_PER_UNIT) { -#ifdef ASM_OUTPUT_BYTE_FLOAT - case QFmode: - ASM_OUTPUT_BYTE_FLOAT (asm_out_file, *d); - break; -#endif -#ifdef ASM_OUTPUT_SHORT_FLOAT - case HFmode: - ASM_OUTPUT_SHORT_FLOAT (asm_out_file, *d); - break; -#endif -#ifdef ASM_OUTPUT_THREE_QUARTER_FLOAT - case TQFmode: - ASM_OUTPUT_THREE_QUARTER_FLOAT (asm_out_file, *d); - break; -#endif -#ifdef ASM_OUTPUT_FLOAT - case SFmode: - ASM_OUTPUT_FLOAT (asm_out_file, *d); + case 8: + switch (mode) + { + case SFmode: + REAL_VALUE_TO_TARGET_SINGLE (d, l); + assemble_integer (GEN_INT (l), 4, align, 1); + break; + case DFmode: + REAL_VALUE_TO_TARGET_DOUBLE (d, data); + assemble_integer (GEN_INT (data[0]), 4, align, 1); + assemble_integer (GEN_INT (data[1]), 4, nalign, 1); + break; + case XFmode: + REAL_VALUE_TO_TARGET_LONG_DOUBLE (d, data); + assemble_integer (GEN_INT (data[0]), 4, align, 1); + assemble_integer (GEN_INT (data[1]), 4, nalign, 1); + assemble_integer (GEN_INT (data[2]), 4, nalign, 1); + break; + case TFmode: + REAL_VALUE_TO_TARGET_LONG_DOUBLE (d, data); + assemble_integer (GEN_INT (data[0]), 4, align, 1); + assemble_integer (GEN_INT (data[1]), 4, nalign, 1); + assemble_integer (GEN_INT (data[2]), 4, nalign, 1); + assemble_integer (GEN_INT (data[3]), 4, nalign, 1); + break; + default: + abort (); + } break; -#endif -#ifdef ASM_OUTPUT_DOUBLE - case DFmode: - ASM_OUTPUT_DOUBLE (asm_out_file, *d); + case 16: + switch (mode) + { + case HFmode: + REAL_VALUE_TO_TARGET_SINGLE (d, l); + assemble_integer (GEN_INT (l), 2, align, 1); + break; + case TQFmode: + REAL_VALUE_TO_TARGET_DOUBLE (d, data); + assemble_integer (GEN_INT (data[0]), 2, align, 1); + assemble_integer (GEN_INT (data[1]), 1, nalign, 1); + break; + default: + abort (); + } break; -#endif -#ifdef ASM_OUTPUT_LONG_DOUBLE - case XFmode: - case TFmode: - ASM_OUTPUT_LONG_DOUBLE (asm_out_file, *d); + case 32: + switch (mode) + { + case QFmode: + REAL_VALUE_TO_TARGET_SINGLE (d, l); + assemble_integer (GEN_INT (l), 1, align, 1); + break; + case HFmode: + REAL_VALUE_TO_TARGET_DOUBLE (d, data); + assemble_integer (GEN_INT (data[0]), 1, align, 1); + assemble_integer (GEN_INT (data[1]), 1, nalign, 1); + break; + default: + abort (); + } break; -#endif default: abort (); } } - -void -assemble_real (d, mode, align) - REAL_VALUE_TYPE d; - enum machine_mode mode; - unsigned int align; -{ - struct assemble_real_args args; - args.d = &d; - args.mode = mode; - - /* We cannot emit unaligned floating point constants. This is slightly - complicated in that we don't know what "unaligned" means exactly. */ -#ifdef BIGGEST_FIELD_ALIGNMENT - if (align >= BIGGEST_FIELD_ALIGNMENT) - ; - else -#endif - if (align < GET_MODE_ALIGNMENT (mode)) - abort (); - - if (do_float_handler (assemble_real_1, (PTR) &args)) - return; - - internal_error ("floating point trap outputting a constant"); -} /* Here we combine duplicate floating constants to make CONST_DOUBLE rtx's, and force those out to memory when necessary. */