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.

Reply via email to