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