https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78804

--- Comment #4 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Nick Clifton from comment #2)
> 
> So what I suspect is that something is missing from the rx libgcc
> configuration files (libgcc/config/rx/t-rx and/or libgcc/config/rx/rx-lib.h)
> which means that float_to_si() is being mis-compiled, for the 64-bit-doubles
> multilib, with the size of a double set to 32-bits.

I did a bit of digging ...

When the 64-bit-double/libgcc multilib is built, the correct -m64bit-doubles
arg is passed to the compiler.

In libgcc/config/rx/t-rx there is:

FPBIT = true
ifeq ($(double_type_size),64)
DPBIT = true
endif

and double_type_size is set to 64:

config.log:double_type_size='64'
config.log:long_double_type_size='64'
config.status:S["long_double_type_size"]="64"
config.status:S["double_type_size"]="64"
Makefile:double_type_size = 64
Makefile:long_double_type_size = 64

Taking out FPBIT, DPBIT from libgcc/config/rx/t-rx or setting both to true
doesn't make a difference.

The __RX_64BIT_DOUBLES__ check in libgcc/config/rx/rx-lib.h seems to be OK when
building 64-bit-double/libgcc, so FLOAT_ONLY is not defined and DF is not
redefined to SF.

libgcc/fp-bit.c is also compiled with things defined such as L_addsub_df.

When 64-bit-double/libgcc is built, FLOAT_ONLY is not defined in
libgcc/fp-bit.h

...

Any other ideas where or what to check?

Reply via email to