Re: [PATCH 3/4][x86] Add clwb,pcommit,avx512avbmi,avx512ifma.
On 20 Nov 09:43, Uros Bizjak wrote: On Wed, Nov 19, 2014 at 6:32 PM, Ilya Tocar tocarip.in...@gmail.com wrote: Hi, New revision of Intel ISA reference [1] has new instructions: Clwb, pcommit and new flavors of AVX512. Patch bellow adds them. I understand that stage 1 is closed, however those changes shouldn't affect anything outside if i386 backend. And are extremely unlikely to break existing functionality, and I personally think it's desirable for newest GCC to support newest spec. Bootstrapped/regtestsed on x86_64-unknown-linux-gnu. Ok for trunk? Please split the patch into patch series, like it was done previously for AVX512F patches. Uros. Done. This part adds clwb. Bootstrapped/passes make-check. Ok for trunk? gcc/ * common/config/i386/i386-common.c (OPTION_MASK_ISA_CLWB_UNSET, OPTION_MASK_ISA_CLWB_SET): New. (ix86_handle_option): Handle OPT_mclwb. * config.gcc: Add clwbintrin.h. * config/i386/clwbintrin.h: New file. * config/i386/cpuid.h (bit_CLWB): Define. * config/i386/driver-i386.c (host_detect_local_cpu): Detect clwb. * config/i386/i386-c.c (ix86_target_macros_internal): Define __CLWB__. * config/i386/i386.c (ix86_target_string): Add -mclwb. (PTA_CLWB): Define. (ix86_option_override_internal): Handle new option. (ix86_valid_target_attribute_inner_p): Add clwb. (ix86_builtins): Add IX86_BUILTIN_CLWB. (ix86_init_mmx_sse_builtins): Add __builtin_ia32_clwb. (ix86_expand_builtin): Handle IX86_BUILTIN_CLWB. * config/i386/i386.h (TARGET_CLWB, TARGET_CLWB_P): Define. * config/i386/i386.md (unspecv): Add UNSPECV_CLWB. (clwb): New instruction. * config/i386/i386.opt: Add mclwb. * config/i386/x86intrin.h: Include clwbintrin.h. gcc/testsuite/ * g++.dg/other/i386-2.C: Add -mclwb. * g++.dg/other/i386-3.C: Ditto. * gcc.target/i386/clwb-1.c: New test. * gcc.target/i386/sse-12.c: Add new options. * 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. --- gcc/common/config/i386/i386-common.c | 15 +++ gcc/config.gcc | 4 +-- gcc/config/i386/clwbintrin.h | 49 ++ gcc/config/i386/cpuid.h| 1 + gcc/config/i386/driver-i386.c | 6 +++-- gcc/config/i386/i386-c.c | 2 ++ gcc/config/i386/i386.c | 23 gcc/config/i386/i386.h | 2 ++ gcc/config/i386/i386.md| 12 + gcc/config/i386/i386.opt | 4 +++ gcc/config/i386/x86intrin.h| 2 ++ gcc/testsuite/g++.dg/other/i386-2.C| 2 +- gcc/testsuite/g++.dg/other/i386-3.C| 2 +- gcc/testsuite/gcc.target/i386/clwb-1.c | 11 gcc/testsuite/gcc.target/i386/sse-12.c | 2 +- gcc/testsuite/gcc.target/i386/sse-13.c | 2 +- gcc/testsuite/gcc.target/i386/sse-14.c | 2 +- gcc/testsuite/gcc.target/i386/sse-22.c | 2 +- gcc/testsuite/gcc.target/i386/sse-23.c | 2 +- 19 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 gcc/config/i386/clwbintrin.h create mode 100644 gcc/testsuite/gcc.target/i386/clwb-1.c diff --git a/gcc/common/config/i386/i386-common.c b/gcc/common/config/i386/i386-common.c index 1c4f15e..bad0988 100644 --- a/gcc/common/config/i386/i386-common.c +++ b/gcc/common/config/i386/i386-common.c @@ -85,6 +85,7 @@ along with GCC; see the file COPYING3. If not see (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE) #define OPTION_MASK_ISA_XSAVEC_SET \ (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE) +#define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same as -msse4.2. */ @@ -181,6 +182,7 @@ along with GCC; see the file COPYING3. If not see #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES +#define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same as -mno-sse4.1. */ @@ -901,6 +903,19 @@ ix86_handle_option (struct gcc_options *opts, } return true; +case OPT_mclwb: + if (value) + { + opts-x_ix86_isa_flags |= OPTION_MASK_ISA_CLWB_SET; + opts-x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_SET; + } + else + { + opts-x_ix86_isa_flags = ~OPTION_MASK_ISA_CLWB_UNSET; + opts-x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_UNSET; + } + return true; + /* Comes from final.c -- no real reason to change it. */ #define MAX_CODE_ALIGN 16 diff --git a/gcc/config.gcc b/gcc/config.gcc index da2a723..766f13b 100644
Re: [PATCH 3/4][x86] Add clwb,pcommit,avx512avbmi,avx512ifma.
On Fri, Nov 21, 2014 at 12:45 PM, Ilya Tocar tocarip.in...@gmail.com wrote: On 20 Nov 09:43, Uros Bizjak wrote: On Wed, Nov 19, 2014 at 6:32 PM, Ilya Tocar tocarip.in...@gmail.com wrote: Hi, New revision of Intel ISA reference [1] has new instructions: Clwb, pcommit and new flavors of AVX512. Patch bellow adds them. I understand that stage 1 is closed, however those changes shouldn't affect anything outside if i386 backend. And are extremely unlikely to break existing functionality, and I personally think it's desirable for newest GCC to support newest spec. Bootstrapped/regtestsed on x86_64-unknown-linux-gnu. Ok for trunk? Please split the patch into patch series, like it was done previously for AVX512F patches. Uros. Done. This part adds clwb. Bootstrapped/passes make-check. Ok for trunk? gcc/ * common/config/i386/i386-common.c (OPTION_MASK_ISA_CLWB_UNSET, OPTION_MASK_ISA_CLWB_SET): New. (ix86_handle_option): Handle OPT_mclwb. * config.gcc: Add clwbintrin.h. * config/i386/clwbintrin.h: New file. * config/i386/cpuid.h (bit_CLWB): Define. * config/i386/driver-i386.c (host_detect_local_cpu): Detect clwb. * config/i386/i386-c.c (ix86_target_macros_internal): Define __CLWB__. * config/i386/i386.c (ix86_target_string): Add -mclwb. (PTA_CLWB): Define. (ix86_option_override_internal): Handle new option. (ix86_valid_target_attribute_inner_p): Add clwb. (ix86_builtins): Add IX86_BUILTIN_CLWB. (ix86_init_mmx_sse_builtins): Add __builtin_ia32_clwb. (ix86_expand_builtin): Handle IX86_BUILTIN_CLWB. * config/i386/i386.h (TARGET_CLWB, TARGET_CLWB_P): Define. * config/i386/i386.md (unspecv): Add UNSPECV_CLWB. (clwb): New instruction. * config/i386/i386.opt: Add mclwb. * config/i386/x86intrin.h: Include clwbintrin.h. gcc/testsuite/ * g++.dg/other/i386-2.C: Add -mclwb. * g++.dg/other/i386-3.C: Ditto. * gcc.target/i386/clwb-1.c: New test. * gcc.target/i386/sse-12.c: Add new options. * 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. OK. Thanks, Uros. --- gcc/common/config/i386/i386-common.c | 15 +++ gcc/config.gcc | 4 +-- gcc/config/i386/clwbintrin.h | 49 ++ gcc/config/i386/cpuid.h| 1 + gcc/config/i386/driver-i386.c | 6 +++-- gcc/config/i386/i386-c.c | 2 ++ gcc/config/i386/i386.c | 23 gcc/config/i386/i386.h | 2 ++ gcc/config/i386/i386.md| 12 + gcc/config/i386/i386.opt | 4 +++ gcc/config/i386/x86intrin.h| 2 ++ gcc/testsuite/g++.dg/other/i386-2.C| 2 +- gcc/testsuite/g++.dg/other/i386-3.C| 2 +- gcc/testsuite/gcc.target/i386/clwb-1.c | 11 gcc/testsuite/gcc.target/i386/sse-12.c | 2 +- gcc/testsuite/gcc.target/i386/sse-13.c | 2 +- gcc/testsuite/gcc.target/i386/sse-14.c | 2 +- gcc/testsuite/gcc.target/i386/sse-22.c | 2 +- gcc/testsuite/gcc.target/i386/sse-23.c | 2 +- 19 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 gcc/config/i386/clwbintrin.h create mode 100644 gcc/testsuite/gcc.target/i386/clwb-1.c diff --git a/gcc/common/config/i386/i386-common.c b/gcc/common/config/i386/i386-common.c index 1c4f15e..bad0988 100644 --- a/gcc/common/config/i386/i386-common.c +++ b/gcc/common/config/i386/i386-common.c @@ -85,6 +85,7 @@ along with GCC; see the file COPYING3. If not see (OPTION_MASK_ISA_XSAVES | OPTION_MASK_ISA_XSAVE) #define OPTION_MASK_ISA_XSAVEC_SET \ (OPTION_MASK_ISA_XSAVEC | OPTION_MASK_ISA_XSAVE) +#define OPTION_MASK_ISA_CLWB_SET OPTION_MASK_ISA_CLWB /* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same as -msse4.2. */ @@ -181,6 +182,7 @@ along with GCC; see the file COPYING3. If not see #define OPTION_MASK_ISA_CLFLUSHOPT_UNSET OPTION_MASK_ISA_CLFLUSHOPT #define OPTION_MASK_ISA_XSAVEC_UNSET OPTION_MASK_ISA_XSAVEC #define OPTION_MASK_ISA_XSAVES_UNSET OPTION_MASK_ISA_XSAVES +#define OPTION_MASK_ISA_CLWB_UNSET OPTION_MASK_ISA_CLWB /* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same as -mno-sse4.1. */ @@ -901,6 +903,19 @@ ix86_handle_option (struct gcc_options *opts, } return true; +case OPT_mclwb: + if (value) + { + opts-x_ix86_isa_flags |= OPTION_MASK_ISA_CLWB_SET; + opts-x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_SET; + } + else + { + opts-x_ix86_isa_flags = ~OPTION_MASK_ISA_CLWB_UNSET; + opts-x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_CLWB_UNSET; + } +