Re: [PATCH] Support Intel CMPccXADD
On Thu, Nov 3, 2022 at 7:29 AM Haochen Jiang wrote: > > Hi all, > > I just revised the patch according to review. The changes comparing to > previous version is mentioned below. > > Ok for trunk? > > BRs, > Haochen > > gcc/ChangeLog: > > * common/config/i386/cpuinfo.h (get_available_features): > Detect cmpccxadd. > * common/config/i386/i386-common.cc > (OPTION_MASK_ISA2_CMPCCXADD_SET, > OPTION_MASK_ISA2_CMPCCXADD_UNSET): New. > (ix86_handle_option): Handle -mcmpccxadd. > * common/config/i386/i386-cpuinfo.h (enum processor_features): > Add FEATURE_CMPCCXADD. > * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for > cmpccxadd. > * config.gcc: Add cmpccxaddintrin.h. > * config/i386/cpuid.h (bit_CMPCCXADD): New. > * config/i386/i386-builtin-types.def: > Add DEF_FUNCTION_TYPE(INT, PINT, INT, INT, INT) > and DEF_FUNCTION_TYPE(LONGLONG, PLONGLONG, LONGLONG, LONGLONG, INT). > * config/i386/i386-builtin.def (BDESC): Add new builtins. > * config/i386/i386-c.cc (ix86_target_macros_internal): Define > __CMPCCXADD__. > * config/i386/i386-expand.cc (ix86_expand_special_args_builtin): > Add new parameter to indicate constant position. > Handle INT_FTYPE_PINT_INT_INT_INT > and LONGLONG_FTYPE_PLONGLONG_LONGLONG_LONGLONG_INT. > * config/i386/i386-isa.def (CMPCCXADD): Add DEF_PTA(CMPCCXADD). > * config/i386/i386-options.cc (isa2_opts): Add -mcmpccxadd. > (ix86_valid_target_attribute_inner_p): Handle cmpccxadd. > * config/i386/i386.opt: Add option -mcmpccxadd. > * config/i386/sync.md (cmpccxadd_): New define insn. > * config/i386/x86gprintrin.h: Include cmpccxaddintrin.h. > * doc/extend.texi: Document cmpccxadd. > * doc/invoke.texi: Document -mcmpccxadd. > * doc/sourcebuild.texi: Document target cmpccxadd. > * config/i386/cmpccxaddintrin.h: New file. > > gcc/testsuite/ChangeLog: > > * g++.dg/other/i386-2.C: Add -mcmpccxadd. > * g++.dg/other/i386-3.C: Ditto. > * gcc.target/i386/avx-1.c: Ditto. > * gcc.target/i386/funcspec-56.inc: Add new target attribute. > * gcc.target/i386/sse-13.c: Add -mcmpccxadd. > * gcc.target/i386/sse-23.c: Ditto. > * gcc.target/i386/x86gprintrin-1.c: Ditto. > * gcc.target/i386/x86gprintrin-2.c: Ditto. > * gcc.target/i386/x86gprintrin-3.c: Ditto. > * gcc.target/i386/x86gprintrin-4.c: Ditto. > * gcc.target/i386/x86gprintrin-5.c: Ditto. > * gcc.target/i386/cmpccxadd-1.c: New test. > * gcc.target/i386/cmpccxadd-2.c: Ditto. LGTM, with a small pattern adjustment, see inline. Thanks, Uros. > --- > gcc/common/config/i386/cpuinfo.h | 2 + > gcc/common/config/i386/i386-common.cc | 15 ++ > gcc/common/config/i386/i386-cpuinfo.h | 1 + > gcc/common/config/i386/i386-isas.h| 1 + > gcc/config.gcc| 3 +- > gcc/config/i386/cmpccxaddintrin.h | 89 +++ > gcc/config/i386/cpuid.h | 1 + > gcc/config/i386/i386-builtin-types.def| 4 + > gcc/config/i386/i386-builtin.def | 4 + > gcc/config/i386/i386-c.cc | 2 + > gcc/config/i386/i386-expand.cc| 22 ++- > gcc/config/i386/i386-isa.def | 1 + > gcc/config/i386/i386-options.cc | 4 +- > gcc/config/i386/i386.opt | 5 + > gcc/config/i386/sync.md | 29 > gcc/config/i386/x86gprintrin.h| 2 + > gcc/doc/extend.texi | 5 + > gcc/doc/invoke.texi | 10 +- > gcc/doc/sourcebuild.texi | 3 + > gcc/testsuite/g++.dg/other/i386-2.C | 2 +- > gcc/testsuite/g++.dg/other/i386-3.C | 2 +- > gcc/testsuite/gcc.target/i386/avx-1.c | 4 + > gcc/testsuite/gcc.target/i386/cmpccxadd-1.c | 61 > gcc/testsuite/gcc.target/i386/cmpccxadd-2.c | 138 ++ > gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + > gcc/testsuite/gcc.target/i386/sse-13.c| 6 +- > gcc/testsuite/gcc.target/i386/sse-23.c| 6 +- > .../gcc.target/i386/x86gprintrin-1.c | 2 +- > .../gcc.target/i386/x86gprintrin-2.c | 6 +- > .../gcc.target/i386/x86gprintrin-3.c | 2 +- > .../gcc.target/i386/x86gprintrin-4.c | 2 +- > .../gcc.target/i386/x86gprintrin-5.c | 6 +- > gcc/testsuite/lib/target-supports.exp | 10 ++ > 33 files changed, 437 insertions(+), 15 deletions(-) > create mode 100644 gcc/config/i386/cmpccxaddintrin.h > create mode 100644 gcc/testsuite/gcc.target/i386/cmpccxadd-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/cmpccxadd-2.c > > diff
Re: [PATCH] Support Intel CMPccXADD
On Mon, Oct 24, 2022 at 11:01 AM Haochen Jiang wrote: > > Hi all, > > I just refined CMPccXADD patch to make the enum in order intrin file > aligned with how opcode does. > > Ok for trunk? > > BRs, > Haochen > > gcc/ChangeLog: > > * common/config/i386/cpuinfo.h (get_available_features): > Detect cmpccxadd. > * common/config/i386/i386-common.cc > (OPTION_MASK_ISA2_CMPCCXADD_SET, > OPTION_MASK_ISA2_CMPCCXADD_UNSET): New. > (ix86_handle_option): Handle -mcmpccxadd, unset cmpccxadd when avx2 > is disabled. > * common/config/i386/i386-cpuinfo.h (enum processor_features): > Add FEATURE_CMPCCXADD. > * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for > cmpccxadd. > * config.gcc: Add cmpccxaddintrin.h. > * config/i386/cpuid.h (bit_CMPCCXADD): New. > * config/i386/i386-builtin-types.def: > Add DEF_FUNCTION_TYPE(INT, PINT, INT, INT, INT) > and DEF_FUNCTION_TYPE(LONGLONG, PLONGLONG, LONGLONG, LONGLONG, INT). > * config/i386/i386-builtin.def (BDESC): Add new builtins. > * config/i386/i386-c.cc (ix86_target_macros_internal): Define > __CMPCCXADD__. > * config/i386/i386-expand.cc (ix86_expand_special_args_builtin): > Add new parameter to indicate constant position. > Handle INT_FTYPE_PINT_INT_INT_INT > and LONGLONG_FTYPE_PLONGLONG_LONGLONG_LONGLONG_INT. > * config/i386/i386-isa.def (CMPCCXADD): Add DEF_PTA(CMPCCXADD). > * config/i386/i386-options.cc (isa2_opts): Add -mcmpccxadd. > (ix86_valid_target_attribute_inner_p): Handle cmpccxadd. > * config/i386/i386.opt: Add option -mcmpccxadd. > * config/i386/sync.md (cmpccxadd_): New define insn. > * config/i386/x86gprintrin.h: Include cmpccxaddintrin.h. > * doc/extend.texi: Document cmpccxadd. > * doc/invoke.texi: Document -mcmpccxadd. > * doc/sourcebuild.texi: Document target cmpccxadd. > * config/i386/cmpccxaddintrin.h: New file. > > gcc/testsuite/ChangeLog: > > * g++.dg/other/i386-2.C: Add -mcmpccxadd. > * g++.dg/other/i386-3.C: Ditto. > * gcc.target/i386/avx-1.c: Add builtin define for enum. > * gcc.target/i386/funcspec-56.inc: Add new target attribute. > * gcc.target/i386/sse-13.c: Add builtin define for enum. > * gcc.target/i386/sse-23.c: Ditto. > * gcc.target/i386/x86gprintrin-1.c: Add -mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-2.c: Add -mcmpccxadd for 64 bit target. > Add builtin define for enum. > * gcc.target/i386/x86gprintrin-3.c: Add -mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-4.c: Add mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-5.c: Add mcpmccxadd for 64 bit target. > Add builtin define for enum. > * gcc.target/i386/cmpccxadd-1.c: New test. > * gcc.target/i386/cmpccxadd-2.c: New test. > --- > gcc/common/config/i386/cpuinfo.h | 2 + > gcc/common/config/i386/i386-common.cc | 15 ++ > gcc/common/config/i386/i386-cpuinfo.h | 1 + > gcc/common/config/i386/i386-isas.h| 1 + > gcc/config.gcc| 3 +- > gcc/config/i386/cmpccxaddintrin.h | 89 +++ > gcc/config/i386/cpuid.h | 1 + > gcc/config/i386/i386-builtin-types.def| 4 + > gcc/config/i386/i386-builtin.def | 4 + > gcc/config/i386/i386-c.cc | 2 + > gcc/config/i386/i386-expand.cc| 22 ++- > gcc/config/i386/i386-isa.def | 1 + > gcc/config/i386/i386-options.cc | 4 +- > gcc/config/i386/i386.opt | 5 + > gcc/config/i386/sync.md | 42 ++ > gcc/config/i386/x86gprintrin.h| 2 + > gcc/doc/extend.texi | 5 + > gcc/doc/invoke.texi | 10 +- > gcc/doc/sourcebuild.texi | 3 + > gcc/testsuite/g++.dg/other/i386-2.C | 2 +- > gcc/testsuite/g++.dg/other/i386-3.C | 2 +- > gcc/testsuite/gcc.target/i386/avx-1.c | 4 + > gcc/testsuite/gcc.target/i386/cmpccxadd-1.c | 61 > gcc/testsuite/gcc.target/i386/cmpccxadd-2.c | 138 ++ > gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + > gcc/testsuite/gcc.target/i386/sse-13.c| 6 +- > gcc/testsuite/gcc.target/i386/sse-23.c| 6 +- > .../gcc.target/i386/x86gprintrin-1.c | 2 +- > .../gcc.target/i386/x86gprintrin-2.c | 6 +- > .../gcc.target/i386/x86gprintrin-3.c | 2 +- > .../gcc.target/i386/x86gprintrin-4.c | 2 +- > .../gcc.target/i386/x86gprintrin-5.c | 6 +- > gcc/testsuite/lib/target-supports.exp | 10 ++ > 33 files changed, 450
RE: [PATCH] Support Intel CMPccXADD
> -Original Message- > From: Gcc-patches bounces+haochen.jiang=intel@gcc.gnu.org> On Behalf Of Haochen Jiang > via Gcc-patches > Sent: Monday, October 24, 2022 5:01 PM > To: gcc-patches@gcc.gnu.org > Cc: Liu, Hongtao > Subject: [PATCH] Support Intel CMPccXADD > > Hi all, > > I just refined CMPccXADD patch to make the enum in order intrin file aligned > with how opcode does. > I just found a testcase issue not fixed for the enum, will send the fixed patch soon. > Ok for trunk? > > BRs, > Haochen > > gcc/ChangeLog: > > * common/config/i386/cpuinfo.h (get_available_features): > Detect cmpccxadd. > * common/config/i386/i386-common.cc > (OPTION_MASK_ISA2_CMPCCXADD_SET, > OPTION_MASK_ISA2_CMPCCXADD_UNSET): New. > (ix86_handle_option): Handle -mcmpccxadd, unset cmpccxadd when > avx2 > is disabled. > * common/config/i386/i386-cpuinfo.h (enum processor_features): > Add FEATURE_CMPCCXADD. > * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for > cmpccxadd. > * config.gcc: Add cmpccxaddintrin.h. > * config/i386/cpuid.h (bit_CMPCCXADD): New. > * config/i386/i386-builtin-types.def: > Add DEF_FUNCTION_TYPE(INT, PINT, INT, INT, INT) > and DEF_FUNCTION_TYPE(LONGLONG, PLONGLONG, LONGLONG, > LONGLONG, INT). > * config/i386/i386-builtin.def (BDESC): Add new builtins. > * config/i386/i386-c.cc (ix86_target_macros_internal): Define > __CMPCCXADD__. > * config/i386/i386-expand.cc (ix86_expand_special_args_builtin): > Add new parameter to indicate constant position. > Handle INT_FTYPE_PINT_INT_INT_INT > and LONGLONG_FTYPE_PLONGLONG_LONGLONG_LONGLONG_INT. > * config/i386/i386-isa.def (CMPCCXADD): Add DEF_PTA(CMPCCXADD). > * config/i386/i386-options.cc (isa2_opts): Add -mcmpccxadd. > (ix86_valid_target_attribute_inner_p): Handle cmpccxadd. > * config/i386/i386.opt: Add option -mcmpccxadd. > * config/i386/sync.md (cmpccxadd_): New define insn. > * config/i386/x86gprintrin.h: Include cmpccxaddintrin.h. > * doc/extend.texi: Document cmpccxadd. > * doc/invoke.texi: Document -mcmpccxadd. > * doc/sourcebuild.texi: Document target cmpccxadd. > * config/i386/cmpccxaddintrin.h: New file. > > gcc/testsuite/ChangeLog: > > * g++.dg/other/i386-2.C: Add -mcmpccxadd. > * g++.dg/other/i386-3.C: Ditto. > * gcc.target/i386/avx-1.c: Add builtin define for enum. > * gcc.target/i386/funcspec-56.inc: Add new target attribute. > * gcc.target/i386/sse-13.c: Add builtin define for enum. > * gcc.target/i386/sse-23.c: Ditto. > * gcc.target/i386/x86gprintrin-1.c: Add -mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-2.c: Add -mcmpccxadd for 64 bit target. > Add builtin define for enum. > * gcc.target/i386/x86gprintrin-3.c: Add -mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-4.c: Add mcmpccxadd for 64 bit target. > * gcc.target/i386/x86gprintrin-5.c: Add mcpmccxadd for 64 bit target. > Add builtin define for enum. > * gcc.target/i386/cmpccxadd-1.c: New test. > * gcc.target/i386/cmpccxadd-2.c: New test. > --- > gcc/common/config/i386/cpuinfo.h | 2 + > gcc/common/config/i386/i386-common.cc | 15 ++ > gcc/common/config/i386/i386-cpuinfo.h | 1 + > gcc/common/config/i386/i386-isas.h| 1 + > gcc/config.gcc| 3 +- > gcc/config/i386/cmpccxaddintrin.h | 89 +++ > gcc/config/i386/cpuid.h | 1 + > gcc/config/i386/i386-builtin-types.def| 4 + > gcc/config/i386/i386-builtin.def | 4 + > gcc/config/i386/i386-c.cc | 2 + > gcc/config/i386/i386-expand.cc| 22 ++- > gcc/config/i386/i386-isa.def | 1 + > gcc/config/i386/i386-options.cc | 4 +- > gcc/config/i386/i386.opt | 5 + > gcc/config/i386/sync.md | 42 ++ > gcc/config/i386/x86gprintrin.h| 2 + > gcc/doc/extend.texi | 5 + > gcc/doc/invoke.texi | 10 +- > gcc/doc/sourcebuild.texi | 3 + > gcc/testsuite/g++.dg/other/i386-2.C | 2 +- > gcc/testsuite/g++.dg/other/i386-3.C | 2 +- > gcc/testsuite/gcc.target/i386/avx-1.c | 4 + > gcc/testsuite/gcc.target/i386/cmpccxadd-1.c | 61 > gcc/testsuite/gcc.target/i386/cmpccxadd-2.c | 138 ++ > gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + > gcc/testsuite/gcc.target/i386/sse-13.c| 6 +- > gcc/testsuite/gcc.target/i386/sse-23.c| 6 +- > .../gcc.target/i386/x86gprintrin-1.c | 2 +- > .../gcc.target/i386/x86gprintrin-2.c | 6 +- >