On Wed, May 31, 2023, at 15:08, Peter Zijlstra wrote: > Some 64bit architectures do not advertise __SIZEOF_INT128__ on all > supported compiler versions. Notably the HPPA64 only started doing > with GCC-11. I checked the other compilers to be sure that anything else we support (gcc-5.1 and up) across all 64-bit architectures does support int128. It would be nice to have the hack more localized to parisc and guarded with a CONFIG_GCC_VERSION check so we can kill it off in the future, once we drop either gcc-10 or parisc support. > +#ifndef __SIZEOF_INT128__ > +#define raw_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval) \ > +({ \ > + typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \ > + typeof(pcp) __val = *__p, __old = *(ovalp); \ > + bool __ret; \ > + if (!__builtin_memcmp(&__val, &__old, sizeof(pcp))) { \ > + *__p = nval; \ > + __ret = true; \ > + } else { \ > + *(ovalp) = __val; \ > + __ret = false; \ > + } \ > + __ret; \ > +}) > + > +#define raw_cpu_generic_cmpxchg_memcmp(pcp, oval, nval) \ > +({ \ > + typeof(pcp) __old = (oval); \ > + raw_cpu_generic_try_cmpxchg_memcpy(pcp, &__old, nval); \ > + __old; \ > +}) Instead of having this in include/asm-generic under !__SIZEOF_INT128__, could you just move this into the parisc files with a compiler version check? Arnd