On 26/05/17 22:32, Alexander Monakov wrote: > On Fri, 26 May 2017, Toebs Douglass wrote: >>> Just as a note to any future readers, although I may well be wrong, I >>> think this is only true for GCC 4.8.0 onwards, with the introduction of >>> the 128 bit types. > > (4.6 actually) Yes. I mixed 4.6 up in my head with 4.8, probably because I've been thinking about 4.8 recently (aarch64). >> I *think* -mcx16 was introduced in 4.3.0. >> >> Why would it *be* introduced here if GCC could not use it? >> >> Was there then another way to indicate to the __sync functions they were >> being given a 128-bit type? > > The intended way was via a typedef: > > typedef int my_int128 __attribute__((mode(TI))); Gosh. I never knew - I did at least some looking at one point many years into using 128-bit variable with __sync. Hmm. I think I could use that to remove the in-line assembly I have for cmpxchg16b, for versions 4.3 to 4.6. > And it appears there's another, undocumented (and thus unsupported afaict) way, > via suffixing object size to the builtin name: __sync_val_compare_and_swap_16. Even further away from my knowledge, probably for the best in this case though :-) Thankyou again, Alex! invaluable.