[PATCH][risc-v] libstdc++: Preserve signbit of nan when converting float to double [PR113578]
Jonathan Wakely
jwakely.gcc@gmail.com
Tue May 7 16:45:56 GMT 2024
On Tue, 7 May 2024 at 17:39, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>
> On Tue, 7 May 2024 at 17:33, Jeff Law wrote:
> >
> >
> >
> > On 5/7/24 9:36 AM, Andreas Schwab wrote:
> > > On Mai 07 2024, Jonathan Wakely wrote:
> > >
> > >> +#ifdef __riscv
> > >> + return _M_insert(__builtin_copysign((double)__f,
> > >> + (double)-__builtin_signbit(__f));
> > >
> > > Should this use static_cast<double>?
>
> Meh. It wouldn't fit in 80 columns any more with static_cast, and it
> means exactly the same thing.
>
> > And it's missing a close paren.
>
> Now that's more important! Thanks.
Also, I've just realised that signbit might return a negative value if
the signbit is set. The spec only says it returns non-zero if the
signbit is set.
So maybe we want:
#ifdef __riscv
const int __neg = __builtin_signbit(__f) ? -1 : 0;
return _M_insert(__builtin_copysign(static_cast<double>(__f),
static_cast<double>(__neg)));
#else
return _M_insert(static_cast<double>(__f));
#endif
More information about the Libstdc++
mailing list