---
 gcc/ChangeLog.mm          |   58 +++++++++++++++++++++++++++++++++++++++++++++
 gcc/c-family/ChangeLog.mm |    4 +++
 2 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/gcc/ChangeLog.mm b/gcc/ChangeLog.mm
index 498cc15..758b510 100644
--- a/gcc/ChangeLog.mm
+++ b/gcc/ChangeLog.mm
@@ -1,3 +1,61 @@
+2011-10-27  Richard Henderson  <r...@redhat.com>
+
+       * config/i386/i386.md (UNSPECV_CMPXCHG): Split into ...
+       (UNSPECV_CMPXCHG_1, UNSPECV_CMPXCHG_2,
+       UNSPECV_CMPXCHG_3, UNSPECV_CMPXCHG_4): New.
+       * config/i386/sync.md (mem_thread_fence): Rename from memory_barrier.
+       Handle the added memory model parameter.
+       (mfence_nosse): Rename from memory_barrier_nosse.
+       (sync_compare_and_swap<CASMODE>): Split into ...
+       (atomic_compare_and_swap<SWI124>): this and ...
+       (atomic_compare_and_swap<CASMODE>): this.  Handle the new parameters.
+       (atomic_compare_and_swap_single<SWI>): Rename from
+       sync_compare_and_swap<SWI>; rewrite to use split unspecs.
+       (atomic_compare_and_swap_double<DCASMODE>): Rename from
+       sync_double_compare_and_swap<DCASMODE>; rewrite to use split unspecs.
+       (*atomic_compare_and_swap_doubledi_pic): Rename from
+       sync_double_compare_and_swapdi_pic; rewrite to use split unspecs.
+       (atomic_fetch_add<SWI>): Rename from sync_old_add<SWI>; add memory
+       model parameter.
+       (*atomic_fetch_add_cmp<SWI>): Similarly.
+       (atomic_add<SWI>, atomic<any_logic><SWI>): Similarly.
+       (atomic_sub<SWI>): Similarly.  Use x86_maybe_negate_const_int.
+       (sync_lock_test_and_set<SWI>): Merge with ...
+       (atomic_exchange<SWI>): ... this.
+
+       * optabs.c (get_atomic_op_for_code): Split out from ...
+       (maybe_emit_op): ... here.
+       * optabs.h (struct atomic_op_functions): Move from optabs.c and
+       rename from struct op_functions.
+       (get_atomic_op_for_code): Declare.
+       * omp-low.c (expand_omp_atomic_fetch_op): Use get_atomic_op_for_code
+       and test both atomic and sync optabs.
+
+       * genopinit.c (optabs): Add atomic_add, atomic_sub, atomic_and,
+       atomic_nand, atomic_xor, atomic_or.
+
+       * optabs.c (expand_val_compare_and_swap_1): Remove.
+       (expand_val_compare_and_swap, expand_bool_compare_and_swap): Remove.
+       (expand_atomic_compare_and_swap): Rename from
+       expand_atomic_compare_exchange.  Rewrite to return both success and
+       oldval return values; expand via both atomic and sync optabs.
+       (expand_compare_and_swap_loop): Use expand_atomic_compare_and_swap.
+       (expand_atomic_load): Likewise.
+       * builtins.c (expand_builtin_compare_and_swap): Likewise.
+       (expand_builtin_atomic_compare_exchange): Likewise.
+       * expr.h, optabs.h: Update.
+
+       * optabs.c (can_compare_and_swap_p): New.
+       (expand_atomic_exchange, expand_atomic_fetch_op): Use it.
+       * builtins.c (fold_builtin_atomic_always_lock_free): Likewise.
+       * omp-low.c (expand_omp_atomic_pipeline): Likewise.
+       * optabs.h: Update.
+
+       * optabs.c (maybe_gen_insn): Handle 8 operands.
+
+       * builtins.c (expand_builtin_mem_thread_fence): Fixup thinko in
+       mem_thread_fence case.
+
 2011-10-26  Andrew MacLeod  <amacl...@redhat.com>
 
        * builtins.c (expand_builtin_atomic_fetch_op): External calls for
diff --git a/gcc/c-family/ChangeLog.mm b/gcc/c-family/ChangeLog.mm
index f23e1c0..5845d68 100644
--- a/gcc/c-family/ChangeLog.mm
+++ b/gcc/c-family/ChangeLog.mm
@@ -1,3 +1,7 @@
+2011-10-27  Richard Henderson  <r...@redhat.com>
+
+       * c-cppbuiltin.c (c_cpp_builtins): Test both atomic and sync patterns.
+
 2011-10-25  Andrew MacLeod  <amacl...@redhat.com>
 
        * c-common.c (get_atomic_generic_size): New.  Find size of generic
-- 
1.7.6.4

Reply via email to