This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: __LDBL_MANT_DIG__
Perry Smith <pedz@easesoftware.net> writes:
| Thanks Gaby...
|
| To recap, my current quest is to resolve references to symbols like
| __floatdidf. This is in a library for ppc64/soft-float.
|
| Ian pointed me to ppc64-fp.c. When I try to compile it, TFtype is
| undefined. It is suppose to get defined in fp-bit.h but only if
| __LDBL_MANT_DIG__ is set to 113 or 106. Right now, in the
| environment that I have now, ___LDBL_MANT_DIG__ is set to 53. In the
| RS/6000, long doubles are 106. (I'm not sure if "long double" is the
| right term to use here.)
|
| I am compiling with -maix64. It appears to me that some parts of gcc
| or libgcc assume that this implies long double but c-cppbuiltin.c
| appears to not make that assumption.
hmm, it looks to me that there is some communication mismatch between
the target back-end and the front-end. From
gcc/c-cppbuiltin.c:builtin_define_float_constants:
fmt = REAL_MODE_FORMAT (TYPE_MODE (type));
gcc_assert (fmt->b != 10);
gcc_assert (fmt->b != 10);
/* The radix of the exponent representation. */
if (type == float_type_node)
builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
log10_b = log10_2 * fmt->log2_b;
/* The number of radix digits, p, in the floating-point
significand. */
sprintf (name, "__%s_MANT_DIG__", name_prefix);
builtin_define_with_int_value (name, fmt->p);
So, for some reasons, it looks like TYPE_MODE (long_double_type_node)
does not have the information you would like it to report (106,
instead of 53).
do I understand correctly that -maix64 is supposed to change the
layout for long double?
-- Gaby