Skip to content
  • torvald's avatar
    Fix __atomic to not implement atomic loads with CAS. · d5f5fa27
    torvald authored
    gcc/
    	* builtins.c (fold_builtin_atomic_always_lock_free): Make "lock-free"
    	conditional on existance of a fast atomic load.
    	* optabs-query.c (can_atomic_load_p): New function.
    	* optabs-query.h (can_atomic_load_p): Declare it.
    	* optabs.c (expand_atomic_exchange): Always delegate to libatomic if
    	no fast atomic load is available for the particular size of access.
    	(expand_atomic_compare_and_swap): Likewise.
    	(expand_atomic_load): Likewise.
    	(expand_atomic_store): Likewise.
    	(expand_atomic_fetch_op): Likewise.
    	* testsuite/lib/target-supports.exp
    	(check_effective_target_sync_int_128): Remove x86 because it provides
    	no fast atomic load.
    	(check_effective_target_sync_int_128_runtime): Likewise.
    
    libatomic/
    	* acinclude.m4: Add #define FAST_ATOMIC_LDST_*.
    	* auto-config.h.in: Regenerate.
    	* config/x86/host-config.h (FAST_ATOMIC_LDST_16): Define to 0.
    	(atomic_compare_exchange_n): New.
    	* glfree.c (EXACT, LARGER): Change condition and add comments.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@245098 138bc75d-0d04-0410-961f-82ee72b054a4
    d5f5fa27