Here are my compilers. Output of $(CC) --version | head -n 1 $(CC) -E -dM -x c /dev/null | egrep 'ATOMIC|SYNC' -------------------------------------------------------------------- VxWorks 5.5: gcc-2.96 -none- Does not support __sync_val_compare_and_swap -------------------------------------------------------------------- VxWorks 6.7: ccppc (Wind River VxWorks G++ DWARF-EH 4.1-131) 4.1.2 -none- but compiles __sync_val_compare_and_swap_4 (int, size_t, void*) to sync .L3: lwarx 8,0,9 cmpw 0,8,11 bne- 0,.L4 mr 10,0 stwcx. 10,0,9 bne- 0,.L3 isync .L4: Does not implement data sizes 1, 2, 8. -------------------------------------------------------------------- VxWorks 6.9 ppc: ccppc (Wind River VxWorks G++ 4.3-315) 4.3.3 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __NO_LWSYNC__ 1 Does not implement data size 8. -------------------------------------------------------------------- ELDK 4.2: ppc_4xxFP-gcc (GCC) 4.2.2 -none- But supports data sizes 1, 2, 4. Does not implement data size 8. -------------------------------------------------------------------- ELDK 5.1: powerpc-4xx-softfloat-gcc (GCC) 4.6.1 20110627 (prerelease) #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __SIG_ATOMIC_TYPE__ int #define __SIG_ATOMIC_MAX__ 2147483647 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) Does not implement data size 8. -------------------------------------------------------------------- ELDK 5.2: powerpc-e500v2-gcc (GCC) 4.6.4 20120303 (prerelease) #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __SIG_ATOMIC_TYPE__ int #define __NO_LWSYNC__ 1 #define __SIG_ATOMIC_MAX__ 2147483647 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) Does not implement data size 8. -------------------------------------------------------------------- ELDK 5.3: powerpc-linux-gcc (GCC) 4.7.2 #define __ATOMIC_ACQUIRE 2 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 #define __SIG_ATOMIC_TYPE__ int #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 #define __GCC_ATOMIC_INT_LOCK_FREE 2 #define __SIG_ATOMIC_MAX__ 2147483647 #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 #define __GCC_ATOMIC_LONG_LOCK_FREE 2 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 #define __ATOMIC_RELAXED 0 #define __ATOMIC_CONSUME 1 #define __ATOMIC_SEQ_CST 5 #define __GCC_ATOMIC_LLONG_LOCK_FREE 1 #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 #define __ATOMIC_ACQ_REL 4 #define __ATOMIC_RELEASE 3 Does not implement data size 8. -------------------------------------------------------------------- MontaVista Linux 4.0: gcc (GCC) 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-23) -none- Does not support __sync_val_compare_and_swap -------------------------------------------------------------------- Moxa SDK 4.2: arm-none-linux-gnueabi-gcc (GCC) 4.4.2 -none- Compiles data sizes 1, 2, 4 but not inline Calls, __sync_val_compare_and_swap_* functions Does not implement data size 8. -------------------------------------------------------------------- FreeScale Linux 2.0: powerpc64-fsl-linux-gcc (GCC) 4.9.2 #define __ATOMIC_ACQUIRE 2 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 #define __SIG_ATOMIC_TYPE__ int #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 #define __GCC_ATOMIC_INT_LOCK_FREE 2 #define __SIG_ATOMIC_MAX__ 2147483647 #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 #define __GCC_ATOMIC_LONG_LOCK_FREE 2 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 #define __ATOMIC_RELAXED 0 #define __ATOMIC_CONSUME 1 #define __ATOMIC_SEQ_CST 5 #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 #define __ATOMIC_ACQ_REL 4 #define __ATOMIC_RELEASE 3 Supports data sizes 1, 2, 4, 8. -------------------------------------------------------------------- Petalinux 2017: aarch64-xilinx-linux-gcc (Linaro GCC 6.2-2016.11) 6.2.1 20161016 #define __ATOMIC_ACQUIRE 2 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 #define __GCC_ATOMIC_CHAR_LOCK_FREE 2 #define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 #define __SIG_ATOMIC_TYPE__ int #define __GCC_ATOMIC_BOOL_LOCK_FREE 2 #define __GCC_ATOMIC_POINTER_LOCK_FREE 2 #define __GCC_ATOMIC_INT_LOCK_FREE 2 #define __SIG_ATOMIC_MAX__ 0x7fffffff #define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 #define __GCC_ATOMIC_LONG_LOCK_FREE 2 #define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) #define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 #define __ATOMIC_RELAXED 0 #define __ATOMIC_CONSUME 1 #define __ATOMIC_SEQ_CST 5 #define __GCC_ATOMIC_LLONG_LOCK_FREE 2 #define __GCC_ATOMIC_SHORT_LOCK_FREE 2 #define __ATOMIC_ACQ_REL 4 #define __ATOMIC_RELEASE 3 Supports data sizes 1, 2, 4, 8.