On Thu, Jan 23, 2014 at 6:35 PM, Michael Meissner <meiss...@linux.vnet.ibm.com> wrote: > This is my fixed patch that correctly swaps the words for atomic quad memory > accesses in little endian. It would be nice in the future to eliminate some > of > the extra moves for things like compare and add. > > I have tested this with a bootstrap (using --with-cpu=power8) on a little > endian power8 system, and I verified the example program works. I'm running > the rest of the test suite right now. Assuming the test suite doesn't show > anything wrong, is it ok to commit? > > [gcc] > 2014-01-23 Michael Meissner <meiss...@linux.vnet.ibm.com> > > PR target/59909 > * doc/invoke.texi (RS/6000 and PowerPC Options): Document > -mquad-memory-atomic. Update -mquad-memory documentation to say > it is only used for non-atomic loads/stores. > > * config/rs6000/predicates.md (quad_int_reg_operand): Allow either > -mquad-memory or -mquad-memory-atomic switches. > > * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Add > -mquad-memory-atomic to ISA 2.07 support. > > * config/rs6000/rs6000.opt (-mquad-memory-atomic): Add new switch > to separate support of normal quad word memory operations (ldq, > stq) from the atomic quad word memory operations. > > * config/rs6000/rs6000.c (rs6000_option_override_internal): Add > support to separate non-atomic quad word operations from atomic > quad word operations. Disable non-atomic quad word operations in > little endian mode so that we don't have to swap words after the > load and before the store. > (quad_load_store_p): Add comment about atomic quad word support. > (rs6000_opt_masks): Add -mquad-memory-atomic to the list of > options printed with -mdebug=reg. > > * config/rs6000/rs6000.h (TARGET_SYNC_TI): Use > -mquad-memory-atomic as the test for whether we have quad word > atomic instructions. > (TARGET_SYNC_HI_QI): If either -mquad-memory-atomic, > -mquad-memory, or -mp8-vector are used, allow byte/half-word > atomic operations. > > * config/rs6000/sync.md (load_lockedti): Insure that the address > is a proper indexed or indirect address for the lqarx instruction. > On little endian systems, swap the hi/lo registers after the lqarx > instruction. > (load_lockedpti): Use indexed_or_indirect_operand predicate to > insure the address is valid for the lqarx instruction. > (store_conditionalti): Insure that the address is a proper indexed > or indirect address for the stqcrx. instruction. On little endian > systems, swap the hi/lo registers before doing the stqcrx. > instruction. > (store_conditionalpti): Use indexed_or_indirect_operand predicate to > insure the address is valid for the stqcrx. instruction. > > * gcc/config/rs6000/rs6000.md (UNSPEC_TI_PTI_SWAP): New UNSPEC for > dealing with quad word atomic instructions in little endian mode. > > * gcc/config/rs6000/rs6000-c.c (rs6000_target_modify_macros): > Define __QUAD_MEMORY__ and __QUAD_MEMORY_ATOMIC__ based on what > type of quad memory support is available. > > [gcc/testsuite] > 2014-01-23 Michael Meissner <meiss...@linux.vnet.ibm.com> > > PR target/59909 > * gcc.target/powerpc/quad-atomic.c: New file to test power8 quad > word atomic functions at runtime.
Okay. Thanks, David