__sync_bool_compare_and_swap() With a Pointer

Ian Lance Taylor iant@google.com
Mon Nov 19 05:42:00 GMT 2012


On Sun, Nov 18, 2012 at 9:10 PM, Hei Chan <structurechart@yahoo.com> wrote:
>
> According to http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html, __sync_bool_compare_and_swap() supports int, long, long long, and their unsigned counterparts, and GCC will allow any integral scalar or pointer type that is 1, 2, 4 or 8 bytes in length.
>
> I wonder in what situation the pointer type won't be 1, 2, 4 or 8 bytes in length.  Let's say I am running on a 64-bit Intel CPU.

On a 64-bit Intel CPU pointer types will always be either 4 or 8 bytes
(4 bytes if using x32).

Remember that GCC supports many different targets.  In any case the
sentence does not imply that there will ever be a pointer type that is
not 1, 2, 4 or 8 bytes (though of course there will be if GCC ever
supports a 128-bit machine).  The sentence also refers to integral
types, and GCC supports integral types larger than 8 bytes on some
processors, e.g., __int128_t on x86_64.

Ian



More information about the Gcc-help mailing list