On Tue, Oct 22, 2024 at 8:31 AM Haochen Jiang <haochen.ji...@intel.com> wrote: > > From: "Hu, Lin1" <lin1...@intel.com> > > gcc/ChangeLog: > > * common/config/i386/cpuinfo.h (get_available_features): Detect movrs. > * common/config/i386/i386-common.cc > (OPTION_MASK_ISA2_MOVRS_SET): New. > (OPTION_MASK_ISA2_MOVRS_UNSET): Ditto. > (ix86_handle_option): Handle -mmovrs. > * common/config/i386/i386-cpuinfo.h > (enum processor_features): Add FEATURE_MOVRS. > * common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for movrs. > * config.gcc: Add movrsintrin.h > * config/i386/cpuid.h (bit_MOVRS): New. > * config/i386/i386-builtin-types.def: > Add DEF_FUNCTION_TYPE (CHAR, PCCHAR), (SHORT, PCSHORT), (INT, PCINT), > (INT64, PCINT64). > * config/i386/i386-builtin.def (BDESC): Add new builtins. > * config/i386/i386-c.cc (ix86_target_macros_internal): > * config/i386/i386-expand.cc (ix86_expand_special_args_builtin): > Define > __MOVRS__. > * config/i386/i386-isa.def (MOVRS): Add DEF_PTA(MOVRS) > * config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p): > Handle movrs. > * config/i386/i386.md (movrs<mode>): New. > * config/i386/i386.opt: Add option -mmovrs. > * config/i386/i386.opt.urls: Regenerated. > * config/i386/immintrin.h: Include movrsintrin.h > * config/i386/sse.md (unspecv): Add UNSPEC_VMOVRS. > (VI1248_AVX10_2): New. > (avx10_2_movrs_vmovrs<ssemodesuffix><mode><mask_name>): New > define_insn. > * doc/extend.texi: Document movrs. > * doc/invoke.texi: Document -mmovrs. > * doc/sourcebuild.texi: Document target movrs. > * config/i386/movrsintrin.h: New. > > gcc/testsuite/ChangeLog: > > * g++.dg/other/i386-2.C: Add -mmovrs. > * g++.dg/other/i386-3.C: Ditto. > * gcc.target/i386/avx-1.c: Ditto. > * gcc.target/i386/avx-2.c: Ditto. > * gcc.target/i386/funcspec-56.inc: Add new target attribute. > * gcc.target/i386/sse-12.c: Add -mmovrs. > * gcc.target/i386/sse-13.c: Ditto. > * gcc.target/i386/sse-14.c: Ditto. > * gcc.target/i386/sse-22.c: Add movrs. > * gcc.target/i386/sse-23.c: Ditto > * gcc.target/i386/avx10_2-512movrs-1.c: New test. > * gcc.target/i386/avx10_2-movrs-1.c: Ditto. > * gcc.target/i386/movrs-1.c: Ditto. > > Co-authored-by: Haochen Jiang <haochen.ji...@intel.com> > --- > gcc/builtins.cc | 4 +- > gcc/common/config/i386/cpuinfo.h | 2 + > gcc/common/config/i386/i386-common.cc | 16 + > gcc/common/config/i386/i386-cpuinfo.h | 1 + > gcc/common/config/i386/i386-isas.h | 1 + > gcc/config.gcc | 2 +- > gcc/config/i386/cpuid.h | 1 + > gcc/config/i386/i386-builtin-types.def | 6 + > gcc/config/i386/i386-builtin.def | 18 + > gcc/config/i386/i386-c.cc | 2 + > gcc/config/i386/i386-expand.cc | 4 + > gcc/config/i386/i386-isa.def | 1 + > gcc/config/i386/i386-options.cc | 4 +- > gcc/config/i386/i386.md | 49 +- > gcc/config/i386/i386.opt | 4 + > gcc/config/i386/i386.opt.urls | 3 + > gcc/config/i386/immintrin.h | 2 + > gcc/config/i386/movrsintrin.h | 453 ++++++++++++++++++ > gcc/config/i386/sse.md | 21 + > gcc/config/i386/xmmintrin.h | 5 +- > gcc/doc/extend.texi | 5 + > gcc/doc/invoke.texi | 7 +- > gcc/doc/rtl.texi | 9 +- > gcc/doc/sourcebuild.texi | 3 + > gcc/testsuite/g++.dg/other/i386-2.C | 2 +- > gcc/testsuite/g++.dg/other/i386-3.C | 2 +- > .../execute/builtin-prefetch-1.c | 3 +- > gcc/testsuite/gcc.dg/builtin-prefetch-1.c | 4 +- > gcc/testsuite/gcc.target/i386/avx-1.c | 2 +- > gcc/testsuite/gcc.target/i386/avx-2.c | 2 +- > .../gcc.target/i386/avx10_2-512-movrs-1.c | 40 ++ > .../gcc.target/i386/avx10_2-movrs-1.c | 67 +++ > gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + > gcc/testsuite/gcc.target/i386/movrs-1.c | 32 ++ > 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 | 4 +- > gcc/testsuite/gcc.target/i386/sse-23.c | 2 +- > 39 files changed, 762 insertions(+), 29 deletions(-) > create mode 100644 gcc/config/i386/movrsintrin.h > create mode 100644 gcc/testsuite/gcc.target/i386/avx10_2-512-movrs-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/avx10_2-movrs-1.c > create mode 100644 gcc/testsuite/gcc.target/i386/movrs-1.c > > diff --git a/gcc/builtins.cc b/gcc/builtins.cc > index 37c7c98e5c7..52520d54b84 100644 > --- a/gcc/builtins.cc > +++ b/gcc/builtins.cc > @@ -1296,8 +1296,8 @@ expand_builtin_prefetch (tree exp) > } > else > op1 = expand_normal (arg1); > - /* Argument 1 must be either zero or one. */ > - if (INTVAL (op1) != 0 && INTVAL (op1) != 1) > + /* Argument 1 must be 0, 1 or 2. */ > + if (INTVAL (op1) < 0 || INTVAL (op1) > 2)
You can use the IN_RANGE macro here: if (!IN_RANGE (INTVAL (op1), 0, 2)) This will call INTVAL only once. Uros.