http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53194
--- Comment #8 from eraman at gcc dot gnu.org 2012-08-14 00:51:15 UTC --- Author: eraman Date: Tue Aug 14 00:51:10 2012 New Revision: 190375 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=190375 Log: 2012-08-13 Easwaran Raman <era...@google.com> Backport the following patches from trunk to add support for Intel Transactional Memory Instructions support (Google ref b/6496405): r185218, r185223, r187051, r187084. r185218,r185223: 2012-02-12 Kirill Yukhin <kirill.yuk...@intel.com> * doc/invoke.texi: Document -mrtm option. * common/config/i386/i386-common.c (OPTION_MASK_ISA_RTM_SET): New. (OPTION_MASK_ISA_RTM_UNSET): Ditto. (ix86_handle_option): Handle OPT_mrtm. * config.gcc (i[34567]86-*-*): Add rtmintrin.h and xtestintrin.h. (x86_64-*-*): Ditto. * i386-builtin-types.def (INT_FTYPE_VOID): New. * config/i386/i386-c.c (ix86_target_macros_internal): Define __RTM__ if needed. (ix86_target_string): Define -mrtm option. (PTA_RTM): New. (ix86_option_override_internal): Extend "corei7-avx" with RTM option. Handle new option. (ix86_valid_target_attribute_inner_p): Add OPT_mrtm. (ix86_builtins): Add IX86_BUILTIN_XBEGIN, IX86_BUILTIN_XEND, IX86_BUILTIN_XTEST. (bdesc_special_args): Ditto. (ix86_init_mmx_sse_builtins): Add IX86_BUILTIN_XABORT. (ix86_expand_special_args_builtin): Handle new built-in type. (ix86_expand_builtin): Handle XABORT instruction. * config/i386/i386.h (TARGET_RTM): New. * config/i386/i386.md (UNSPECV_XBEGIN): New. (UNSPECV_XEND): Ditto. (UNSPECV_XABORT): Ditto. (UNSPECV_XTEST): Ditto. (xbegin): Ditto. (xbegin_1): Ditto. (xend): Ditto. (xabort): Ditto (xtest): Ditto. (xtest_1): Ditto. * config/i386/i386.opt (mrtm): New. * config/i386/immintrin.h: Include rtmintrin.h and xtestintrin.h. * config/i386/rtmintrin.h: New header. * config/i386/xtestintrin.h: Ditto. r187051: 2012-05-02 Kirill Yukhin <kirill.yuk...@intel.com> Andi Kleen <a...@linux.intel.com> * coretypes (MEMMODEL_MASK): New. * builtins.c (get_memmodel): Add val. Call target.memmodel_check and return new variable. (expand_builtin_atomic_exchange): Mask memmodel values. (expand_builtin_atomic_compare_exchange): Ditto. (expand_builtin_atomic_load): Ditto. (expand_builtin_atomic_store): Ditto. (expand_builtin_atomic_clear): Ditto. * doc/extend.texi: Mention port-dependent memory model flags. * config/i386/cpuid.h (bit_HLE): New. * config/i386/driver-i386.c (host_detect_local_cpu): Detect HLE support. * config/i386/i386-protos.h (ix86_generate_hle_prefix): New. * config/i386/i386-c.c (ix86_target_macros_internal): Set HLE defines. (ix86_target_string)<-mhle>: New. (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto. * config/i386/i386.c (ix86_target_string)<OPTION_MASK_ISA_HLE>: New. (ix86_valid_target_attribute_inner_p)<OPT_mhle>: Ditto. (ix86_option_override_internal)<PTA_HLE>: New switch, set it enabled for generic, generic64 and core-avx2. (ix86_print_operand): Generate HLE lock prefixes. (ix86_memmodel_check): New. (TARGET_MEMMODEL_CHECK): Ditto. * config/i386/i386.h (OPTION_ISA_HLE): Ditto. (IX86_HLE_ACQUIRE): Ditto. (IX86_HLE_RELEASE): Ditto. * config/i386/i386.h (ix86_generate_hle_prefix): Ditto. * config/i386/i386.opt (mhle): Ditto. * config/i386/sync.md(atomic_compare_and_swap<mode>): Pass success model to instruction emitter. (atomic_fetch_add<mode>): Ditto. (atomic_exchange<mode>): Ditto. (atomic_add<mode>): Ditto. (atomic_sub<mode>): Ditto. (atomic_<code><mode>): Ditto. (*atomic_compare_and_swap_doubledi_pic): Ditto. (atomic_compare_and_swap_single<mode>): Define and use argument for success model. (atomic_compare_and_swap_double<mode>): Ditto. * configure.ac: Check if assembler support HLE prefixes. * configure: Regenerate. * config.in: Ditto. r187084: 2012-05-03 Jakub Jelinek <ja...@redhat.com> PR target/53194 * config/i386/i386-c.c (ix86_target_macros_internal): Don't define __ATOMIC_HLE_* macros here. (ix86_target_macros): But here, using cpp_define_formatted. testsuite/ChangeLog.google-4_7: 2012-08-13 Easwaran Raman <era...@google.com> Backport the following patches from trunk to add support for Intel Transactional Memory Instructions support (Google ref b/6496405): r185218, r185223, r187051, r187089, r187094. r85218,r185223: 2012-03-12 Kirill Yukhin <kirill.yuk...@intel.com> * gcc.target/i386/rtm-xabort-1.c: New. * gcc.target/i386/rtm-xbegin-1.c: Ditto. * gcc.target/i386/rtm-xend-1.c: Ditto. * gcc.target/i386/rtm-xtest-1.c: Ditto. * gcc.target/i386/sse-12.c: Test RTM intrinsics. * gcc.target/i386/sse-13.c: Ditto. * gcc.target/i386/sse-14.c: Ditto. * gcc.target/i386/sse-22.c: Ditto. * gcc.target/i386/sse-23.c: Ditto. * g++.dg/other/i386-2.C: Ditto. * g++.dg/other/i386-3.C: Ditto. r187051: 2012-05-02 Kirill Yukhin <kirill.yuk...@intel.com> * gcc.target/i386/hle-cmpxchg-acq-1.c: New. * gcc.target/i386/hle-cmpxchg-rel-1.c: Ditto. * gcc.target/i386/hle-add-acq-1.c: Ditto. * gcc.target/i386/hle-add-rel-1.c: Ditto. * gcc.target/i386/hle-and-acq-1.c: Ditto. * gcc.target/i386/hle-and-rel-1.c: Ditto. * gcc.target/i386/hle-or-acq-1.c: Ditto. * gcc.target/i386/hle-or-rel-1.c: Ditto. * gcc.target/i386/hle-sub-acq-1.c: Ditto. * gcc.target/i386/hle-sub-rel-1.c: Ditto. * gcc.target/i386/hle-xadd-acq-1.c: Ditto. * gcc.target/i386/hle-xadd-rel-1.c: Ditto. * gcc.target/i386/hle-xchg-acq-1.c: Ditto. * gcc.target/i386/hle-xchg-rel-1.c: Ditto. * gcc.target/i386/hle-xor-acq-1.c: Ditto. * gcc.target/i386/hle-xor-rel-1.c: Ditto. r187089: 2012-05-03 Jakub Jelinek <ja...@redhat.com> * gcc.target/i386/hle-xadd-rel-1.c: Match .byte 0xf3 instead of .byte 0xf2. * gcc.target/i386/hle-sub-rel-1.c: Likewise. * gcc.target/i386/hle-xchg-rel-1.c: Likewise. * gcc.target/i386/hle-add-rel-1.c: Likewise. r187094: 2012-05-03 Uros Bizjak <ubiz...@gmail.com> * gcc.target/i386/hle-cmpxchg-acq-1.c (dg-options): Add -march=x86-64. * gcc.target/i386/hle-xadd-acq-1.c (dg-options): Ditto. * gcc.target/i386/hle-cmpxchg-rel-1.c (dg-options): Ditto. * gcc.target/i386/hle-xadd-rel-1.c (dg-options): Ditto. Added: branches/google/gcc-4_7/gcc/config/i386/rtmintrin.h - copied unchanged from r185223, trunk/gcc/config/i386/rtmintrin.h branches/google/gcc-4_7/gcc/config/i386/xtestintrin.h - copied unchanged from r185223, trunk/gcc/config/i386/xtestintrin.h branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-add-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-add-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-add-rel-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-add-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-and-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-and-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-and-rel-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-and-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-cmpxchg-acq-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-cmpxchg-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-cmpxchg-rel-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-cmpxchg-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-or-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-or-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-or-rel-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-or-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-sub-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-sub-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-sub-rel-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-sub-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xadd-acq-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xadd-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xadd-rel-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xadd-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xchg-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xchg-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xchg-rel-1.c - copied, changed from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xchg-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xor-acq-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xor-acq-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c - copied unchanged from r187051, trunk/gcc/testsuite/gcc.target/i386/hle-xor-rel-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-xabort-1.c - copied unchanged from r185223, trunk/gcc/testsuite/gcc.target/i386/rtm-xabort-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-xbegin-1.c - copied unchanged from r185223, trunk/gcc/testsuite/gcc.target/i386/rtm-xbegin-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-xend-1.c - copied unchanged from r185223, trunk/gcc/testsuite/gcc.target/i386/rtm-xend-1.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/rtm-xtest-1.c - copied unchanged from r185223, trunk/gcc/testsuite/gcc.target/i386/rtm-xtest-1.c Modified: branches/google/gcc-4_7/gcc/ChangeLog.google-4_7 branches/google/gcc-4_7/gcc/builtins.c branches/google/gcc-4_7/gcc/common/config/i386/i386-common.c branches/google/gcc-4_7/gcc/config.gcc branches/google/gcc-4_7/gcc/config.in branches/google/gcc-4_7/gcc/config/i386/cpuid.h branches/google/gcc-4_7/gcc/config/i386/driver-i386.c branches/google/gcc-4_7/gcc/config/i386/i386-builtin-types.def branches/google/gcc-4_7/gcc/config/i386/i386-c.c branches/google/gcc-4_7/gcc/config/i386/i386.c branches/google/gcc-4_7/gcc/config/i386/i386.h branches/google/gcc-4_7/gcc/config/i386/i386.md branches/google/gcc-4_7/gcc/config/i386/i386.opt branches/google/gcc-4_7/gcc/config/i386/immintrin.h branches/google/gcc-4_7/gcc/config/i386/sync.md branches/google/gcc-4_7/gcc/configure branches/google/gcc-4_7/gcc/configure.ac branches/google/gcc-4_7/gcc/coretypes.h branches/google/gcc-4_7/gcc/doc/extend.texi branches/google/gcc-4_7/gcc/doc/invoke.texi branches/google/gcc-4_7/gcc/doc/tm.texi branches/google/gcc-4_7/gcc/doc/tm.texi.in branches/google/gcc-4_7/gcc/target.def branches/google/gcc-4_7/gcc/testsuite/ChangeLog.google-4_7 branches/google/gcc-4_7/gcc/testsuite/g++.dg/other/i386-2.C branches/google/gcc-4_7/gcc/testsuite/g++.dg/other/i386-3.C branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/sse-12.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/sse-13.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/sse-14.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/sse-22.c branches/google/gcc-4_7/gcc/testsuite/gcc.target/i386/sse-23.c