[PATCH] libstdc++: Clear padding bits in atomic compare_exchange
Thomas Rodgers
rodgert@twrodgers.com
Wed Nov 3 03:06:45 GMT 2021
This version of the patch specifically doesn’t deal with long double.
Mostly looking for Jonathan’s review to ensure his previous feedback is
addressed. I plan to rev the patch to handle long doubles after some
further discussion with you and Jonathan.
On Tue, Nov 2, 2021 at 12:49 AM Jakub Jelinek <jakub@redhat.com> wrote:
> On Mon, Nov 01, 2021 at 06:25:45PM -0700, Thomas Rodgers via Gcc-patches
> wrote:
> > + template<typename _Tp>
> > + constexpr bool
> > + __maybe_has_padding()
> > + {
> > +#if __has_builtin(__has_unique_object_representations)
> > + return !__has_unique_object_representations(_Tp)
> > + && !is_floating_point<_Tp>::value;
> > +#else
> > + return true;
> > +#endif
>
> I'm not sure I understand the && !is_floating_point<_Tp>::value.
> Yes, float and double will never have padding, but long double often
> will, e.g. on x86 or ia64 (but e.g. not on ppc, s390x, etc.).
> So, unless we want to play with numeric_limits, it should be either
> just return !__has_unique_object_representations(_Tp);
> or return !__has_unique_object_representations(_Tp)
> && (!is_floating_point<_Tp>::value
> || is_same<__remove_cv_t<_Tp>,long double>::value);
> or, with numeric_limits test numeric_limits<_Tp>::digits == 64
> (but I'm sure Jonathan will not want including such a header dependency
> unless it is already included).
> Or I can always provide a new __builtin_clear_padding_p ...
>
> Jakub
>
>
More information about the Gcc-patches
mailing list