Irix6 long doubles implemented wrong? (27_io/ostream_inserter_arith)
Richard Henderson
rth@redhat.com
Tue Jan 7 22:16:00 GMT 2003
This should have been split into several smaller patches.
On Fri, Dec 27, 2002 at 11:47:15AM -0200, Alexandre Oliva wrote:
> * Makefile.in (FPBIT_FUNCS): Added _sf_to_tf.
> (DBBIT_FUNCS): Added _df_to_tf.
> (TPBIT_FUNCS): New.
> (libgcc.mk): Pass TPBIT and TPBIT_FUNCS down.
> (LIBGCC_DEPS): Added TPBIT.
> * mklibgcc.in: Support TPBIT and TPBIT_FUNCS.
Ok.
> * fp-bit.h: Define macros for TFmode floating-point constants
> in IEEE and IBM-extended TFmode types. Declare functions
> according to L_ macros.
> (TMODES): Define if __LDBL_MANT_DIG__ has one of
> the newly-supported widths.
> (TFtype, TItype, UTItype): Define if TMODES is defined.
> (MAX_UDI_INT, MAX_DI_INT, BITS_PER_DI): Likewise.
> (F_T_BITOFF, D_T_BITOFF): Define.
> (IMPLICIT_1, IMPLICIT_2): Cast constants to types that are
> guaranteed to be wide enough.
> * config/fp-bit.c: Check for L_ macros for tf functions.
> (__thenan_tf): New.
> (nan): Adjust.
> (pack_d, unpack_d): Support IEEE 854 and IBM-extended TFmode
> types.
> (_fpmul_parts): Support TFmode. Compute exponent adjustment
> from FRAC_NBITS, FRAC_BITS and NGARDS.
> (usi_to_float): Cast constants to be shifted to fractype
> instead of assuming long long is wide enough.
> (sf_to_tf, df_to_tf, __make_tp, tf_to_df, tf_to_sf): New.
Ok, I guess.
I'd kinda prefer that we use different names for the routines
than __addtf etc for the IBM format. This would allow the
IBM double-double format and the IEEE quad format routines to
co-exist on one platform, which would allow non-Irix to use a
more sensible format unambiguously.
I won't insist on this though.
> * print-rtl.c (print_rtx): Don't print MEM details in
> GENERATOR_FILEs.
Ok.
> * rtl.c (get_mode_alignment): Moved to...
> * stor-layout.c: ... here.
Ok.
> * calls.c (emit_library_call_value_1): Handle return values
> in a PARALLEL.
Ok. Yet another clue that these routines should be removed,
and replaced with the generic call functions.
> * expr.c (emit_group_store): Initialize dst with CONST0_RTX
> for the appropriate mode.
Ok.
> * optabs.c (expand_binop) <add, sub>: Return xtarget if we haven't
> been able to move the result to target.
Ok, I guess. How does this come up?
> * real.h (struct real_format): Add denorm_p, remove has_denorm.
> * real.c: Adjust all formats and references to has_denorm.
> * c-common.c (builtin_define_float_constants): Use denorm_p to
> define DENORM_MIN.
This one's sticky. Strictly speaking, the double-double format
isn't LIA-1 compliant (too few denormal bits), and so libstdc++
ought to be setting denorm_min to zero. On the other hand, I
can see that this value might still be useful for some people.
Run it by the libstdc++ language lawyers.
r~
More information about the Gcc-patches
mailing list