gcc/ChangeLog:
* common/config/i386/cpuinfo.h
(get_available_features): Add AVX10VPMLDSABFLYDQ.
* common/config/i386/i386-common.cc
(OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_SET): New.
(OPTION_MASK_ISA2_AVX10_2_UNSET): Add AVX10VPMLDSABFLYDQ.
(OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_UNSET): New.
(ix86_handle_option): Handle avx10vpmldsabflydq.
* common/config/i386/i386-cpuinfo.h
(enum processor_features): Add FEATURE_AVX10VPMLDSABFLYDQ.
* common/config/i386/i386-isas.h: Ditto.
* config.gcc: Include avx10vpmldsabflydqintrin.h.
* config/i386/cpuid.h (bit_AVX10VPMLDSABFLYDQ): New.
* config/i386/i386-builtin-types.def: Define
V8SI_FTYPE_V8SI_V8SI_V8SI_INT and
V16SI_FTYPE_V16SI_V16SI_V16SI_INT.
* config/i386/i386-builtin.def
(BDESC): Handle AVX10VPMLDSABFLYDQ builtins.
* config/i386/i386-c.cc
(ix86_target_macros_internal): Handle AVX10VPMLDSABFLYDQ.
* config/i386/i386-expand.cc
(ix86_expand_args_builtin):
Handle V8SI_FTYPE_V8SI_V8SI_V8SI_INT and
V16SI_FTYPE_V16SI_V16SI_V16SI_INT.
* config/i386/i386-isa.def (AVX10VPMLDSABFLYDQ): New.
* config/i386/i386-options.cc (isa2_opts): Handle mavx10vpmldsabflydq.
(ix86_valid_target_attribute_inner_p): Ditto.
* config/i386/i386.opt: Add AVX10VPMLDSABFLYDQ.
* config/i386/i386.opt.urls: Ditto.
* config/i386/immintrin.h: Include avx10vpmldsabflydqintrin.h
* config/i386/sse.md (UNSPEC_VPMLDSABFLYDQ): New.
(avx10_2_vpmldsabflydq<mode>): Ditto.
* doc/extend.texi: Add avx10vpmldsabflydq documentation.
* doc/invoke.texi: Ditto.
* doc/sourcebuild.texi: Ditto.
* config/i386/avx10vpmldsabflydqintrin.h: New file.
gcc/testsuite/ChangeLog:
* g++.dg/other/i386-2.C: Add avx10vpmldsabflydq test.
* g++.dg/other/i386-3.C: Ditto.
* gcc.target/i386/avx-1.c: Ditto.
* gcc.target/i386/sse-12.c: Ditto.
* 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.target/i386/avx10-check.h: Ditto.
* gcc.target/i386/funcspec-56.inc: Ditto.
* lib/target-supports.exp
(check_effective_target_avx10vpmldsabflydq): New.
* gcc.target/i386/avx10vpmldsabflydq-1.c: New test.
* gcc.target/i386/avx10vpmldsabflydq-2.c: Ditto.
* gcc.target/i386/avx10vpmldsabflydq-2.h: Ditto.
* gcc.target/i386/avx10vpmldsabflydq-helper.h: Ditto.
---
gcc/common/config/i386/cpuinfo.h | 2 +
gcc/common/config/i386/i386-common.cc | 25 ++-
gcc/common/config/i386/i386-cpuinfo.h | 1 +
gcc/common/config/i386/i386-isas.h | 2 +
gcc/config.gcc | 3 +-
gcc/config/i386/avx10vpmldsabflydqintrin.h | 93 ++++++++
gcc/config/i386/cpuid.h | 1 +
gcc/config/i386/i386-builtin-types.def | 4 +
gcc/config/i386/i386-builtin.def | 5 +
gcc/config/i386/i386-c.cc | 2 +
gcc/config/i386/i386-expand.cc | 2 +
gcc/config/i386/i386-isa.def | 1 +
gcc/config/i386/i386-options.cc | 4 +-
gcc/config/i386/i386.opt | 5 +
gcc/config/i386/i386.opt.urls | 3 +
gcc/config/i386/immintrin.h | 2 +
gcc/config/i386/sse.md | 16 ++
gcc/doc/extend.texi | 5 +
gcc/doc/invoke.texi | 8 +-
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 | 7 +-
gcc/testsuite/gcc.target/i386/avx10-check.h | 3 +
.../gcc.target/i386/avx10vpmldsabflydq-1.c | 19 ++
.../gcc.target/i386/avx10vpmldsabflydq-2.c | 54 +++++
.../gcc.target/i386/avx10vpmldsabflydq-2.h | 198 ++++++++++++++++++
gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 +
gcc/testsuite/gcc.target/i386/sse-12.c | 2 +-
gcc/testsuite/gcc.target/i386/sse-13.c | 7 +-
gcc/testsuite/gcc.target/i386/sse-14.c | 7 +-
gcc/testsuite/gcc.target/i386/sse-22.c | 9 +-
gcc/testsuite/gcc.target/i386/sse-23.c | 7 +-
gcc/testsuite/lib/target-supports.exp | 17 ++
34 files changed, 510 insertions(+), 13 deletions(-)
create mode 100644 gcc/config/i386/avx10vpmldsabflydqintrin.h
create mode 100644 gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-1.c
create mode 100644 gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.c
create mode 100644 gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.h
diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h
index 0622f64ef31..3346d191cf3 100644
--- a/gcc/common/config/i386/cpuinfo.h
+++ b/gcc/common/config/i386/cpuinfo.h
@@ -1076,6 +1076,8 @@ get_available_features (struct __processor_model
*cpu_model,
if (ace_usable)
if (ecx & bit_ACE)
ace_set = 1;
+ if (ecx & bit_AVX10VPMLDSABFLYDQ)
+ set_feature (FEATURE_AVX10VPMLDSABFLYDQ);
}
if (amx_usable)
{
diff --git a/gcc/common/config/i386/i386-common.cc
b/gcc/common/config/i386/i386-common.cc
index c28535a341f..a0bab45900b 100644
--- a/gcc/common/config/i386/i386-common.cc
+++ b/gcc/common/config/i386/i386-common.cc
@@ -160,6 +160,8 @@ along with GCC; see the file COPYING3. If not see
(OPTION_MASK_ISA2_ACEV1_SET | OPTION_MASK_ISA2_ACEOPFP32)
#define OPTION_MASK_ISA2_ACEOPFP64_SET \
(OPTION_MASK_ISA2_ACEV1_SET | OPTION_MASK_ISA2_ACEOPFP64)
+#define OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_SET \
+ (OPTION_MASK_ISA2_AVX10_1_SET | OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ)
/* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
as -msse4.2. */
@@ -349,7 +351,8 @@ along with GCC; see the file COPYING3. If not see
#define OPTION_MASK_ISA2_AVX10_1_UNSET \
(OPTION_MASK_ISA2_AVX10_1 | OPTION_MASK_ISA2_AVX10_2_UNSET \
| OPTION_MASK_ISA2_AVX10V2AUX_UNSET | OPTION_MASK_ISA2_AVX10V1AUX_UNSET \
- | OPTION_MASK_ISA2_AVX10BMM_UNSET)
+ | OPTION_MASK_ISA2_AVX10BMM_UNSET \
+ | OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_UNSET)
#define OPTION_MASK_ISA2_AVX10_2_UNSET \
(OPTION_MASK_ISA2_AVX10_2 | OPTION_MASK_ISA2_AVX10_3_UNSET)
#define OPTION_MASK_ISA2_AMX_AVX512_UNSET OPTION_MASK_ISA2_AMX_AVX512
@@ -374,6 +377,8 @@ along with GCC; see the file COPYING3. If not see
#define OPTION_MASK_ISA2_ACEOPFP16_UNSET OPTION_MASK_ISA2_ACEOPFP16
#define OPTION_MASK_ISA2_ACEOPFP32_UNSET OPTION_MASK_ISA2_ACEOPFP32
#define OPTION_MASK_ISA2_ACEOPFP64_UNSET OPTION_MASK_ISA2_ACEOPFP64
+#define OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_UNSET \
+ OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ
/* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
as -mno-sse4.1. */
@@ -1651,6 +1656,24 @@ ix86_handle_option (struct gcc_options *opts,
}
return true;
+ case OPT_mavx10vpmldsabflydq:
+ if (value)
+ {
+ opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_SET;
+ opts->x_ix86_isa_flags2_explicit |=
+ OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_SET;
+ opts->x_ix86_isa_flags |= OPTION_MASK_ISA_AVX10_1_SET;
+ opts->x_ix86_isa_flags_explicit |= OPTION_MASK_ISA_AVX10_1_SET;
+ }
+ else
+ {
+ opts->x_ix86_isa_flags2 &=
+ ~OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_UNSET;
+ opts->x_ix86_isa_flags2_explicit |=
+ OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ_UNSET;
+ }
+ return true;
+
case OPT_mfma:
if (value)
{
diff --git a/gcc/common/config/i386/i386-cpuinfo.h
b/gcc/common/config/i386/i386-cpuinfo.h
index 4e36284242a..79815bd7e51 100644
--- a/gcc/common/config/i386/i386-cpuinfo.h
+++ b/gcc/common/config/i386/i386-cpuinfo.h
@@ -294,6 +294,7 @@ enum processor_features
FEATURE_ACEOPFP16,
FEATURE_ACEOPFP32,
FEATURE_ACEOPFP64,
+ FEATURE_AVX10VPMLDSABFLYDQ,
CPU_FEATURE_MAX
};
diff --git a/gcc/common/config/i386/i386-isas.h
b/gcc/common/config/i386/i386-isas.h
index c3b8e9ee649..127f81d4223 100644
--- a/gcc/common/config/i386/i386-isas.h
+++ b/gcc/common/config/i386/i386-isas.h
@@ -202,4 +202,6 @@ ISA_NAMES_TABLE_START
ISA_NAMES_TABLE_ENTRY("aceopfp16", FEATURE_ACEOPFP16, P_NONE, "-maceopfp16")
ISA_NAMES_TABLE_ENTRY("aceopfp32", FEATURE_ACEOPFP32, P_NONE, "-maceopfp32")
ISA_NAMES_TABLE_ENTRY("aceopfp64", FEATURE_ACEOPFP64, P_NONE, "-maceopfp64")
+ ISA_NAMES_TABLE_ENTRY("avx10vpmldsabflydq", FEATURE_AVX10VPMLDSABFLYDQ,
+ P_NONE, "-mavx10vpmldsabflydq")
ISA_NAMES_TABLE_END
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 5b5559e7ac9..1466a37c50e 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -492,7 +492,8 @@ i[34567]86-*-* | x86_64-*-*)
avx10v2auxintrin.h avx10v1auxintrin.h acev1intrin.h
avx10_3int4fp4intrin.h avx10_3cvtbf16intrin.h
avx10_3vpinterleaveintrin.h acev2intrin.h
- aceopfp16intrin.h aceopfp32intrin.h aceopfp64intrin.h"
+ aceopfp16intrin.h aceopfp32intrin.h aceopfp64intrin.h
+ avx10vpmldsabflydqintrin.h"
;;
ia64-*-*)
extra_headers=ia64intrin.h
diff --git a/gcc/config/i386/avx10vpmldsabflydqintrin.h
b/gcc/config/i386/avx10vpmldsabflydqintrin.h
new file mode 100644
index 00000000000..d063df3c5c7
--- /dev/null
+++ b/gcc/config/i386/avx10vpmldsabflydqintrin.h
@@ -0,0 +1,93 @@
+/* Copyright (C) 2026 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ GCC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#if !defined _IMMINTRIN_H_INCLUDED
+#error "Never use <avx10vpmldsabflydqintrin.h> directly; include <immintrin.h>
instead."
+#endif
+
+#ifndef _AVX10VPMLDSABFLYDQINTRIN_H_INCLUDED
+#define _AVX10VPMLDSABFLYDQINTRIN_H_INCLUDED
+
+#if !defined(__AVX10VPMLDSABFLYDQ__)
+#pragma GCC push_options
+#pragma GCC target("avx10vpmldsabflydq")
+#define __DISABLE_AVX10VPMLDSABFLYDQ__
+#endif /* __AVX10VPMLDSABFLYDQ__ */
+
+#ifdef __OPTIMIZE__
+extern __inline __m128i
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm_mldsabflydq_epi32 (__m128i __A, __m128i __B, __m128i __C, const int __M)
+{
+ return (__m128i) __builtin_ia32_mldsabflydq128 ((__v4si) __A,
+ (__v4si) __B,
+ (__v4si) __C,
+ __M);
+}
+
+extern __inline __m256i
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm256_mldsabflydq_epi32 (__m256i __A, __m256i __B, __m256i __C, const int __M)
+{
+ return (__m256i) __builtin_ia32_mldsabflydq256 ((__v8si) __A,
+ (__v8si) __B,
+ (__v8si) __C,
+ __M);
+}
+
+extern __inline __m512i
+__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
+_mm512_mldsabflydq_epi32 (__m512i __A, __m512i __B, __m512i __C, const int __M)
+{
+ return (__m512i) __builtin_ia32_mldsabflydq512 ((__v16si) __A,
+ (__v16si) __B,
+ (__v16si) __C,
+ __M);
+}
+
+#else
+#define _mm_mldsabflydq_epi32(A, B, C, M) \
+ (__m128i) __builtin_ia32_mldsabflydq128 ((__v4si)(__m128i)(A), \
+ (__v4si)(__m128i)(B), \
+ (__v4si)(__m128i)(C), \
+ (int)(M))
+
+#define _mm256_mldsabflydq_epi32(A, B, C, M) \
+ (__m256i) __builtin_ia32_mldsabflydq256 ((__v8si)(__m256i)(A), \
+ (__v8si)(__m256i)(B), \
+ (__v8si)(__m256i)(C), \
+ (int)(M))
+
+#define _mm512_mldsabflydq_epi32(A, B, C, M) \
+ (__m512i) __builtin_ia32_mldsabflydq512 ((__v16si)(__m512i)(A), \
+ (__v16si)(__m512i)(B), \
+ (__v16si)(__m512i)(C), \
+ (int)(M))
+#endif
+
+#ifdef __DISABLE_AVX10VPMLDSABFLYDQ__
+#undef __DISABLE_AVX10VPMLDSABFLYDQ__
+#pragma GCC pop_options
+#endif /* __DISABLE_AVX10VPMLDSABFLYDQ__ */
+
+#endif /* __AVX10VPMLDSABFLYDQINTRIN_H_INCLUDED */
diff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h
index a73d4ba4395..81547b4bc71 100644
--- a/gcc/config/i386/cpuid.h
+++ b/gcc/config/i386/cpuid.h
@@ -146,6 +146,7 @@
#define bit_MOVRS (1 << 31)
/* %ecx */
+#define bit_AVX10VPMLDSABFLYDQ (1 << 7)
#define bit_ACE (1 << 11)
/* %edx */
diff --git a/gcc/config/i386/i386-builtin-types.def
b/gcc/config/i386/i386-builtin-types.def
index a923df99000..ea03eaa1f73 100644
--- a/gcc/config/i386/i386-builtin-types.def
+++ b/gcc/config/i386/i386-builtin-types.def
@@ -1553,3 +1553,7 @@ DEF_FUNCTION_TYPE (VOID, UQI, V16SF, V16SF, INT)
# ACEOPFP64 builtins
DEF_FUNCTION_TYPE (VOID, UQI, V8DF, V8DF, V8DF, INT)
+
+# AVX10VPMLDSABFLYDQ builtins
+DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, V8SI, INT)
+DEF_FUNCTION_TYPE (V16SI, V16SI, V16SI, V16SI, INT)
diff --git a/gcc/config/i386/i386-builtin.def b/gcc/config/i386/i386-builtin.def
index 7e58284c4bc..802ebf30a0d 100644
--- a/gcc/config/i386/i386-builtin.def
+++ b/gcc/config/i386/i386-builtin.def
@@ -3545,6 +3545,11 @@ BDESC (0, OPTION_MASK_ISA2_AVX10_3,
CODE_FOR_vec_interleave_highv32hi_mask, "__b
BDESC (0, OPTION_MASK_ISA2_AVX10_3,
CODE_FOR_avx10_3_vec_interleave_lowv16hi_mask,
"__builtin_ia32_vpinterleavelw256_mask", IX86_BUILTIN_VPINTERLEAVELW256_MASK,
UNKNOWN, (int) V16HI_FTYPE_V16HI_V16HI_V16HI_UHI)
BDESC (0, OPTION_MASK_ISA2_AVX10_3, CODE_FOR_vec_interleave_lowv32hi_mask,
"__builtin_ia32_vpinterleavelw512_mask", IX86_BUILTIN_VPINTERLEAVELW512_MASK,
UNKNOWN, (int) V32HI_FTYPE_V32HI_V32HI_V32HI_USI)
+/* AVX10VPMLDSABFLYDQ. */
+BDESC (0, OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ,
CODE_FOR_avx10_vpmldsabflydqv4si, "__builtin_ia32_mldsabflydq128",
IX86_BUILTIN_MLDSABFLYDQV4SI, UNKNOWN, (int) V4SI_FTYPE_V4SI_V4SI_V4SI_INT)
+BDESC (0, OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ,
CODE_FOR_avx10_vpmldsabflydqv8si, "__builtin_ia32_mldsabflydq256",
IX86_BUILTIN_MLDSABFLYDQV8SI, UNKNOWN, (int) V8SI_FTYPE_V8SI_V8SI_V8SI_INT)
+BDESC (0, OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ,
CODE_FOR_avx10_vpmldsabflydqv16si, "__builtin_ia32_mldsabflydq512",
IX86_BUILTIN_MLDSABFLYDQV16SI, UNKNOWN, (int) V16SI_FTYPE_V16SI_V16SI_V16SI_INT)
+
/* Builtins with rounding support. */
BDESC_END (ARGS, ROUND_ARGS)
diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc
index 7aa15c3cb71..15a5e67836b 100644
--- a/gcc/config/i386/i386-c.cc
+++ b/gcc/config/i386/i386-c.cc
@@ -808,6 +808,8 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
def_or_undef (parse_in, "__ACEOPFP32__");
if (isa_flag2 & OPTION_MASK_ISA2_ACEOPFP64)
def_or_undef (parse_in, "__ACEOPFP64__");
+ if (isa_flag2 & OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ)
+ def_or_undef (parse_in, "__AVX10VPMLDSABFLYDQ__");
if (TARGET_IAMCU)
{
def_or_undef (parse_in, "__iamcu");
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
index 02c03905906..830b8dc35e8 100644
--- a/gcc/config/i386/i386-expand.cc
+++ b/gcc/config/i386/i386-expand.cc
@@ -13324,6 +13324,8 @@ ix86_expand_args_builtin (const struct
builtin_description *d,
case V8SF_FTYPE_V8SF_V8SF_V8SI_INT:
case V16SF_FTYPE_V16SF_V16SF_V16SI_INT:
case V4SI_FTYPE_V4SI_V4SI_V4SI_INT:
+ case V8SI_FTYPE_V8SI_V8SI_V8SI_INT:
+ case V16SI_FTYPE_V16SI_V16SI_V16SI_INT:
nargs = 4;
nargs_constant = 1;
break;
diff --git a/gcc/config/i386/i386-isa.def b/gcc/config/i386/i386-isa.def
index 705cb3c9a3d..6bb9adca48f 100644
--- a/gcc/config/i386/i386-isa.def
+++ b/gcc/config/i386/i386-isa.def
@@ -134,3 +134,4 @@ DEF_PTA(ACEV2)
DEF_PTA(ACEOPFP16)
DEF_PTA(ACEOPFP32)
DEF_PTA(ACEOPFP64)
+DEF_PTA(AVX10VPMLDSABFLYDQ)
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
index d736a85c887..7b5d9f416f6 100644
--- a/gcc/config/i386/i386-options.cc
+++ b/gcc/config/i386/i386-options.cc
@@ -283,7 +283,8 @@ static struct ix86_target_opts isa2_opts[] =
{ "-macev2", OPTION_MASK_ISA2_ACEV2 },
{ "-maceopfp16", OPTION_MASK_ISA2_ACEOPFP16 },
{ "-maceopfp32", OPTION_MASK_ISA2_ACEOPFP32 },
- { "-maceopfp64", OPTION_MASK_ISA2_ACEOPFP64 }
+ { "-maceopfp64", OPTION_MASK_ISA2_ACEOPFP64 },
+ { "-mavx10vpmldsabflydq", OPTION_MASK_ISA2_AVX10VPMLDSABFLYDQ }
};
static struct ix86_target_opts isa_opts[] =
{
@@ -1157,6 +1158,7 @@ ix86_valid_target_attribute_inner_p (tree fndecl, tree
args, char *p_strings[],
IX86_ATTR_ISA ("aceopfp16", OPT_maceopfp16),
IX86_ATTR_ISA ("aceopfp32", OPT_maceopfp32),
IX86_ATTR_ISA ("aceopfp64", OPT_maceopfp64),
+ IX86_ATTR_ISA ("avx10vpmldsabflydq", OPT_mavx10vpmldsabflydq),
/* enum options */
IX86_ATTR_ENUM ("fpmath=", OPT_mfpmath_),
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
index bb4dd8d0b07..43bdc99686f 100644
--- a/gcc/config/i386/i386.opt
+++ b/gcc/config/i386/i386.opt
@@ -1437,3 +1437,8 @@ maceopfp64
Target Mask(ISA2_ACEOPFP64) Var(ix86_isa_flags2) Save
Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
AVX10.1, ACEv1 and ACEOPFP64 built-in functions and code generation.
+
+mavx10vpmldsabflydq
+Target Mask(ISA2_AVX10VPMLDSABFLYDQ) Var(ix86_isa_flags2) Save
+Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
+AVX10.1 and AVX10VPMLDSABFLYDQ built-in functions and code generation.
diff --git a/gcc/config/i386/i386.opt.urls b/gcc/config/i386/i386.opt.urls
index 96c8f1de0f2..57497e4039d 100644
--- a/gcc/config/i386/i386.opt.urls
+++ b/gcc/config/i386/i386.opt.urls
@@ -662,3 +662,6 @@ UrlSuffix(gcc/x86-Options.html#index-maceopfp32)
maceopfp64
UrlSuffix(gcc/x86-Options.html#index-maceopfp64)
+mavx10vpmldsabflydq
+UrlSuffix(gcc/x86-Options.html#index-mavx10vpmldsabflydq)
+
diff --git a/gcc/config/i386/immintrin.h b/gcc/config/i386/immintrin.h
index 1a7eecffba2..0933a03a550 100644
--- a/gcc/config/i386/immintrin.h
+++ b/gcc/config/i386/immintrin.h
@@ -182,4 +182,6 @@
#include <aceopfp64intrin.h>
+#include <avx10vpmldsabflydqintrin.h>
+
#endif /* _IMMINTRIN_H_INCLUDED */
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index b50981da6aa..aa4382a3cbc 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -323,6 +323,9 @@
UNSPEC_VCVTBF162UF8S
UNSPEC_VCVTHF82BF16
UNSPEC_VCVTBF82BF16
+
+ ;; For AVX10VPMLDSABFLYDQ suppport
+ UNSPEC_VPMLDSABFLYDQ
])
(define_c_enum "unspecv" [
@@ -35534,3 +35537,16 @@
"TARGET_ACEOPFP64"
"top1pd\t{<round_op3>%2, %g1, %%tmm%c0|tmm%c0, %g1, %2<round_op3>}"
[(set_attr "prefix" "evex")])
+
+(define_insn "avx10_vpmldsabflydq<mode>"
+ [(set (match_operand:VI4_AVX512F 0 "register_operand" "=v")
+ (unspec:VI4_AVX512F
+ [(match_operand:VI4_AVX512F 1 "register_operand" "0")
+ (match_operand:VI4_AVX512F 2 "register_operand" "v")
+ (match_operand:VI4_AVX512F 3 "register_operand" "v")
+ (match_operand:SI 4 "const_0_to_255_operand" "n")]
+ UNSPEC_VPMLDSABFLYDQ))]
+ "TARGET_AVX10VPMLDSABFLYDQ"
+ "vpmldsabflydq\t{%4, %3, %2, %0|%0, %2, %3, %4}"
+ [(set_attr "prefix" "evex")
+ (set_attr "mode" "<sseinsnmode>")])
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 1c37b8a3bbb..b7dfea3a14c 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -9610,6 +9610,11 @@ Enable/disable the generation of the ACEOPFP32
instructions.
@itemx no-aceopfp64
Enable/disable the generation of the ACEOPFP64 instructions.
+@cindex @code{target("avx10vpmldsabflydq")}, x86
+@item avx10vpmldsabflydq
+@itemx no-avx10vpmldsabflydq
+Enable/disable the generation of the AVX10VPMLDSABFLYDQ instructions.
+
@atindex @code{target("cld")}, x86
@item cld
@itemx no-cld
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index cbce8d0f91b..cc2a62b7304 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1556,7 +1556,7 @@ See RS/6000 and PowerPC Options.
-mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mapxf
-musermsr -mavx10.1 -mavx10.2 -mamx-avx512 -mmovrs -mamx-movrs
-mavx512bmm -mavx10v2aux -macev1 -mavx10v1aux -mavx10.3 -mavx10bmm
--macev2 -maceopfp16 -maceopfp32 -maceopfp64
+-macev2 -maceopfp16 -maceopfp32 -maceopfp64 -mavx10vpmldsabflydq
-mcldemote -mms-bitfields -mno-align-stringops -minline-all-stringops
-minline-stringops-dynamically -mstringop-strategy=@var{alg}
-mkl -mwidekl
@@ -36470,6 +36470,12 @@ AVX10.1, ACEv1 and ACEOPFP32 built-in functions and
code generation.
@item -maceopfp64
Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
AVX10.1, ACEv1 and ACEOPFP64 built-in functions and code generation.
+
+@opindex mavx10vpmldsabflydq
+@opindex mno-avx10vpmldsabflydq
+@item -mavx10vpmldsabflydq
+Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2,
+AVX10.1 and AVX10VPMLDSABFLYDQ built-in functions and code generation.
@end table
These additional options are available for the x86 processor family.
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index 1dbdd3c88bf..b9e26d0c77d 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2737,6 +2737,9 @@ Target supports the execution of @code{avx10v1aux}
instructions.
@item avx10v2aux
Target supports the execution of @code{avx10v2aux} instructions.
+@item avx10vpmldsabflydq
+Target supports the execution of @code{avx10vpmldsabflydq} instructions.
+
@item avx2
Target supports compiling @code{avx2} instructions.
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C
b/gcc/testsuite/g++.dg/other/i386-2.C
index 7a5ab46a6a5..35e7f0340a7 100644
--- a/gcc/testsuite/g++.dg/other/i386-2.C
+++ b/gcc/testsuite/g++.dg/other/i386-2.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2
-mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp
-mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt
-msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx
-mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize
-mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma
-mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint
-mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512
-mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3 -macev2
-maceopfp16 -maceopfp32 -maceopfp64" } */
+/* { dg-options "-O -pedantic-errors -march=k8 -msse4a -m3dnow -mavx -mavx2
-mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm -mlwp
-mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr -mxsaveopt
-msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku -msgx
-mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect -mserialize
-mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma
-mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi -mraoint
-mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512
-mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3 -macev2
-maceopfp16 -maceopfp32 -maceopfp64 -mavx10vpmldsabflydq" } */
/* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib }
} */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C
b/gcc/testsuite/g++.dg/other/i386-3.C
index f5d34e8999d..1a3b92379d5 100644
--- a/gcc/testsuite/g++.dg/other/i386-3.C
+++ b/gcc/testsuite/g++.dg/other/i386-3.C
@@ -1,5 +1,5 @@
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx
-mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm
-mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr
-mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku
-msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect
-mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni
-mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi
-mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2
-mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3
-macev2 -maceopfp16 -maceopfp32 -maceopfp64" } */
+/* { dg-options "-O -fkeep-inline-functions -march=k8 -msse4a -m3dnow -mavx
-mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm
-mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr
-mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku
-msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect
-mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni
-mavxifma -mavxvnniint8 -mavxneconvert -mcmpccxadd -mamx-fp16 -mprefetchi
-mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2
-mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3
-macev2 -maceopfp16 -maceopfp32 -maceopfp64 -mavx10vpmldsabflydq" } */
/* { dg-skip-if "requires hosted libstdc++ for cstdlib malloc" { ! hostedlib }
} */
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
diff --git a/gcc/testsuite/gcc.target/i386/avx-1.c
b/gcc/testsuite/gcc.target/i386/avx-1.c
index 0d26fad7bc4..8f0ce9e2248 100644
--- a/gcc/testsuite/gcc.target/i386/avx-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow
-mavx -mavx2 -maes -mpclmul -mgfni -mprefetchi -mavx10.2 -mmovrs -mavx10v2aux
-macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32 -maceopfp64" } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow
-mavx -mavx2 -maes -mpclmul -mgfni -mprefetchi -mavx10.2 -mmovrs -mavx10v2aux
-macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32 -maceopfp64
-mavx10vpmldsabflydq" } */
/* { dg-add-options bind_pic_locally } */
#include <mm_malloc.h>
@@ -968,6 +968,11 @@
#define __builtin_ia32_top1pd_round(W, A, B, C, D) __builtin_ia32_top1pd_round
(1, A, B, C, 4)
#endif
+/* avx10vpmldsabflydqintrin.h */
+#define __builtin_ia32_mldsabflydq128(A, B, C, M)
__builtin_ia32_mldsabflydq128 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq256(A, B, C, M)
__builtin_ia32_mldsabflydq256 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq512(A, B, C, M)
__builtin_ia32_mldsabflydq512 (A, B, C, 1)
+
#include <wmmintrin.h>
#include <immintrin.h>
#include <mm3dnow.h>
diff --git a/gcc/testsuite/gcc.target/i386/avx10-check.h
b/gcc/testsuite/gcc.target/i386/avx10-check.h
index bad43b9b38e..34a19e067c8 100644
--- a/gcc/testsuite/gcc.target/i386/avx10-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx10-check.h
@@ -42,6 +42,9 @@ main ()
#endif
#ifdef AVX10_3
&& __builtin_cpu_supports ("avx10.3")
+#endif
+#ifdef AVX10VPMLDSABFLYDQ
+ && __builtin_cpu_supports ("avx10vpmldsabflydq")
#endif
&& avx10_os_support ())
{
diff --git a/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-1.c
b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-1.c
new file mode 100644
index 00000000000..3026074104f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-1.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-march=x86-64-v3 -mavx10vpmldsabflydq -O2" } */
+/* { dg-final { scan-assembler-times "vpmldsabflydq\[
\\t\]+\[^\{\n\]*%xmm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+\[^\n\r]*%xmm\[0-9\]+(?:\n|\[
\\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "vpmldsabflydq\[
\\t\]+\[^\{\n\]*%ymm\[0-9\]+\[^\n\r]*%ymm\[0-9\]+\[^\n\r]*%ymm\[0-9\]+(?:\n|\[
\\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "vpmldsabflydq\[
\\t\]+\[^\{\n\]*%zmm\[0-9\]+\[^\n\r]*%zmm\[0-9\]+\[^\n\r]*%zmm\[0-9\]+(?:\n|\[
\\t\]+#)" 1 } } */
+
+#include <immintrin.h>
+
+volatile __m128i x1, x2, x3;
+volatile __m256i y, y2, y3;
+volatile __m512i z1, z2, z3;
+
+void extern
+avx10vpmldsabflydq_test (void)
+{
+ x1 = _mm_mldsabflydq_epi32 (x1, x2, x3, 1);
+ y = _mm256_mldsabflydq_epi32 (y, y2, y3, 1);
+ z1 = _mm512_mldsabflydq_epi32 (z1, z2, z3, 1);
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.c
b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.c
new file mode 100644
index 00000000000..520babcdb3e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.c
@@ -0,0 +1,54 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -march=x86-64-v3 -mavx10vpmldsabflydq" } */
+/* { dg-require-effective-target avx10vpmldsabflydq } */
+
+#define AVX10VPMLDSABFLYQ
+#define AVX10
+#include <stdlib.h>
+
+#define Q 8380417
+#define QINV 58728449
+
+static int
+montmulq (int a, int b)
+{
+ long long t1, t2, t3, c;
+ t1 = (long long) a * (long long) b;
+ t2 = (t1 & 0xffffffff) * QINV;
+ t3 = (t2 & 0xffffffff) * Q;
+ c = (t1 - t3) >> 32;
+ return (int) c;
+}
+
+static void
+ctbfly (int a, int b, int z, int* a1, int* b1)
+{
+ int m = montmulq (b, z);
+ *a1 = a + m;
+ *b1 = a - m;
+}
+
+static void
+gsbfly (int a, int b, int z, int *a1, int* b1)
+{
+ int m = montmulq (a - b, z);
+ *a1 = a + b;
+ *b1 = m;
+}
+
+#include "avx10vpmldsabflydq-2.h"
+
+#undef AVX512F_LEN
+#undef AVX512F_LEN_HALF
+
+#define AVX512VL
+#define AVX512F_LEN 256
+#define AVX512F_LEN_HALF 128
+#include "avx10vpmldsabflydq-2.h"
+
+#undef AVX512F_LEN
+#undef AVX512F_LEN_HALF
+
+#define AVX512F_LEN 128
+#define AVX512F_LEN_HALF 128
+#include "avx10vpmldsabflydq-2.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.h
b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.h
new file mode 100644
index 00000000000..0de1901a6b3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx10vpmldsabflydq-2.h
@@ -0,0 +1,198 @@
+#include "avx10-helper.h"
+#include <immintrin.h>
+
+#define SIZE (AVX512F_LEN / 32)
+
+static void
+CALC (int *res, int *src1, int *src2, int *src3, int imm)
+{
+ int j;
+ int i0, i1, i2;
+
+ i0 = imm & 0x03;
+ i1 = (imm & 0x0c) >> 2;
+ i2 = (imm & 0x10) >> 4;
+
+ for (j = 0; j < SIZE / 2; j++)
+ {
+ int a, b, z, a1, b1, resa_high, resb_high;
+ unsigned resa_low, resb_low;
+
+ if (i1 == 0)
+ {
+ a = src1[j * 2] & 0x1ffffff;
+ b = src2[j * 2] & 0x1ffffff;
+ }
+ else if (i1 == 1)
+ {
+ a = src1[j * 2 + 1] & 0x1ffffff;
+ b = src2[j * 2 + 1] & 0x1ffffff;
+ }
+ else if (i1 == 2)
+ {
+ a = src2[j * 2 - j % 2] & 0x1ffffff;
+ b = src2[j * 2 - j % 2 + 2] & 0x1ffffff;
+ }
+ else
+ {
+ a = src2[j * 2] & 0x1ffffff;
+ b = src2[j * 2 + 1] & 0x1ffffff;
+ }
+
+ if (i0 == 1)
+ z = src3[j / 2 * 4 + 2] & 0x1ffffff;
+ else if (i0 == 2)
+ z = src3[j * 2] & 0x1ffffff;
+ else
+ z = src3[j / 2 * 4] & 0x1ffffff;
+
+ if (i2 == 0)
+ ctbfly (a, b, z, &a1, &b1);
+ else
+ gsbfly (a, b, z, &a1, &b1);
+
+ resa_low = a1 & 0x7fffff;
+ resa_high = a1 >> 23;
+ resb_low = b1 & 0x7fffff;
+ resb_high = b1 >> 23;
+
+ res[j * 2] = resa_low + (resa_high << 13) - resa_high;
+ res[j * 2 + 1] = resb_low + (resb_high << 13) - resb_high;
+
+ }
+}
+
+static void
+TEST (void)
+{
+ UNION_TYPE (AVX512F_LEN, i_d) src1, src2, src3, res;
+ int res_ref[SIZE];
+ int i, j;
+
+ for (i = 0; i < SIZE; i++)
+ {
+ src1.a[i] = i;
+ src2.a[i] = (i << 10) + (i % 3) ;
+ src3.a[i] = (i << 20) + ((i % 5) << 10) + (i % 7);
+ }
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 0);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 0);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 1);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 1);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 2);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 2);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 4);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 4);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 5);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 5);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 6);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 6);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 8);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 8);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 9);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 9);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 10);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 10);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 12);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 12);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 13);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 13);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 14);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 14);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 16);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 16);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 17);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 17);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 18);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 18);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 20);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 20);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 21);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 21);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 22);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 22);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 24);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 24);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 25);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 25);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 26);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 26);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 28);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 28);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 29);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 29);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+
+ CALC (res_ref, src1.a, src2.a, src3.a, 30);
+ res.x = INTRINSIC (_mldsabflydq_epi32) (src1.x, src2.x, src3.x, 30);
+ if (UNION_CHECK (AVX512F_LEN, i_d) (res, res_ref))
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
index f734b9a6d2a..4f4fde0ed66 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
@@ -101,6 +101,7 @@ extern void test_acev2 (void)
__attribute__((__target__("acev2")));
extern void test_aceopfp16 (void)
__attribute__((__target__("aceopfp16")));
extern void test_aceopfp32 (void)
__attribute__((__target__("aceopfp32")));
extern void test_aceopfp64 (void)
__attribute__((__target__("aceopfp64")));
+extern void test_avx10vpmldsabflydq (void)
__attribute__((__target__("avx10vpmldsabflydq")));
extern void test_no_sgx (void)
__attribute__((__target__("no-sgx")));
extern void test_no_avx512vpopcntdq(void)
__attribute__((__target__("no-avx512vpopcntdq")));
@@ -203,6 +204,7 @@ extern void test_no_acev2 (void)
__attribute__((__target__("no-acev2")));
extern void test_no_aceopfp16 (void)
__attribute__((__target__("no-aceopfp16")));
extern void test_no_aceopfp32 (void)
__attribute__((__target__("no-aceopfp32")));
extern void test_no_aceopfp64 (void)
__attribute__((__target__("no-aceopfp64")));
+extern void test_no_avx10vpmldsabflydq (void)
__attribute__((__target__("no-avx10vpmldsabflydq")));
extern void test_arch_nocona (void)
__attribute__((__target__("arch=nocona")));
extern void test_arch_core2 (void)
__attribute__((__target__("arch=core2")));
diff --git a/gcc/testsuite/gcc.target/i386/sse-12.c
b/gcc/testsuite/gcc.target/i386/sse-12.c
index c3c32a43b51..152783da99e 100644
--- a/gcc/testsuite/gcc.target/i386/sse-12.c
+++ b/gcc/testsuite/gcc.target/i386/sse-12.c
@@ -3,7 +3,7 @@
popcntintrin.h gfniintrin.h and mm_malloc.h are usable
with -O -std=c89 -pedantic-errors. */
/* { dg-do compile } */
-/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx
-mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm
-mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr
-mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku
-msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect
-mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni
-mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex
-mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs
-mamx-movrs -mavx10v2aux -macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32
-maceopfp64" } */
+/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -msse4a -m3dnow -mavx
-mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi -mbmi2 -mtbm
-mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw -madx -mfxsr
-mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx -mclzero -mpku
-msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd -mavx512vp2intersect
-mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni
-mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16 -mraoint -mamx-complex
-mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs
-mamx-movrs -mavx10v2aux -macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32
-maceopfp64 -mavx10vpmldsabflydq" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c
b/gcc/testsuite/gcc.target/i386/sse-13.c
index 4d9b7e15ce3..7bc8fa5c3c2 100644
--- a/gcc/testsuite/gcc.target/i386/sse-13.c
+++ b/gcc/testsuite/gcc.target/i386/sse-13.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a
-m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi
-mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw
-madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt
-mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni
-mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8
-mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert
-mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3
-msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs
-mavx10v2aux -macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32 -maceopfp64" } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -msse4a
-m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi
-mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw
-madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt
-mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni
-mpconfig -mwbnoinvd -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8
-mamx-bf16 -mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert
-mcmpccxadd -mamx-fp16 -mprefetchi -mraoint -mamx-complex -mavxvnniint16 -msm3
-msha512 -msm4 -mavx10.2 -mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs
-mavx10v2aux -macev1 -mavx10.3 -macev2 -maceopfp16 -maceopfp32 -maceopfp64
-mavx10vpmldsabflydq" } */
/* { dg-add-options bind_pic_locally } */
#include <mm_malloc.h>
@@ -975,4 +975,9 @@
#define __builtin_ia32_top1pd_round(W, A, B, C, D) __builtin_ia32_top1pd_round
(1, A, B, C, 4)
#endif
+/* avx10vpmldsabflydqintrin.h */
+#define __builtin_ia32_mldsabflydq128(A, B, C, M)
__builtin_ia32_mldsabflydq128 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq256(A, B, C, M)
__builtin_ia32_mldsabflydq256 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq512(A, B, C, M)
__builtin_ia32_mldsabflydq512 (A, B, C, 1)
+
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c
b/gcc/testsuite/gcc.target/i386/sse-14.c
index 8a35441d817..2cdba15b174 100644
--- a/gcc/testsuite/gcc.target/i386/sse-14.c
+++ b/gcc/testsuite/gcc.target/i386/sse-14.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a
-m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi
-mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw
-madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx
-mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd
-mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16
-mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16
-mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2
-mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3
-macev2 -maceopfp16 -maceopfp32 -maceopfp64" } */
+/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -msse4a
-m3dnow -mavx -mavx2 -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlzcnt -mbmi
-mbmi2 -mtbm -mlwp -mfsgsbase -mrdrnd -mf16c -mfma -mrtm -mrdseed -mprfchw
-madx -mfxsr -mxsaveopt -msha -mxsavec -mxsaves -mclflushopt -mclwb -mmwaitx
-mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -menqcmd
-mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16
-mkl -mwidekl -mavxvnni -mavxifma -mavxvnniint8 -mavxneconvert -mamx-fp16
-mraoint -mamx-complex -mavxvnniint16 -msm3 -msha512 -msm4 -mavx10.2
-mamx-avx512 -mamx-fp8 -mmovrs -mamx-movrs -mavx10v2aux -macev1 -mavx10.3
-macev2 -maceopfp16 -maceopfp32 -maceopfp64 -mavx10vpmldsabflydq" } */
/* { dg-add-options bind_pic_locally } */
#include <mm_malloc.h>
@@ -1280,3 +1280,8 @@ test_2vxt (_tile_op1_round_ps, 1, __m512, __m512, 4)
test_3vt (_tile_op1pd, 1, __m512d, __m512d, __m512d)
test_3vxt (_tile_op1_round_pd, 1, __m512d, __m512d, __m512d, 4)
#endif
+
+/* avx10vpmldsabflydqintrin.h */
+test_3 (_mm_mldsabflydq_epi32, __m128i, __m128i, __m128i, __m128i, 1)
+test_3 (_mm256_mldsabflydq_epi32, __m256i, __m256i, __m256i, __m256i, 1)
+test_3 (_mm512_mldsabflydq_epi32, __m512i, __m512i, __m512i, __m512i, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c
b/gcc/testsuite/gcc.target/i386/sse-22.c
index 9c554bd2436..f4238408988 100644
--- a/gcc/testsuite/gcc.target/i386/sse-22.c
+++ b/gcc/testsuite/gcc.target/i386/sse-22.c
@@ -128,7 +128,7 @@
#ifndef DIFFERENT_PRAGMAS
-#pragma GCC target
("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64")
+#pragma GCC target
("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64,avx10vpmldsabflydq")
#endif
/* Following intrinsics require immediate arguments. They
@@ -245,7 +245,7 @@ test_4 (_mm_cmpestrz, int, __m128i, int, __m128i, int, 1)
/* immintrin.h (AVX/AVX2/RDRND/FSGSBASE/F16C/RTM/AVX512F/SHA) */
#ifdef DIFFERENT_PRAGMAS
-#pragma GCC target
("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64")
+#pragma GCC target
("avx,avx2,rdrnd,fsgsbase,f16c,rtm,sha,gfni,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,amx-fp16,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64,avx10vpmldsabflydq")
#endif
#include <immintrin.h>
test_1 (_cvtss_sh, unsigned short, float, 1)
@@ -1321,3 +1321,8 @@ test_2vxt (_tile_op1_round_ps, 1, __m512, __m512, 4)
test_3vt (_tile_op1pd, 1, __m512d, __m512d, __m512d)
test_3vxt (_tile_op1_round_pd, 1, __m512d, __m512d, __m512d, 4)
#endif
+
+/* avx10vpmldsabflydqintrin.h */
+test_3 (_mm_mldsabflydq_epi32, __m128i, __m128i, __m128i, __m128i, 1)
+test_3 (_mm256_mldsabflydq_epi32, __m256i, __m256i, __m256i, __m256i, 1)
+test_3 (_mm512_mldsabflydq_epi32, __m512i, __m512i, __m512i, __m512i, 1)
diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c
b/gcc/testsuite/gcc.target/i386/sse-23.c
index 9552dafc2e0..ea0d14c8b75 100644
--- a/gcc/testsuite/gcc.target/i386/sse-23.c
+++ b/gcc/testsuite/gcc.target/i386/sse-23.c
@@ -950,6 +950,11 @@
#define __builtin_ia32_top1pd_round(W, A, B, C, D) __builtin_ia32_top1pd_round
(1, A, B, C, 4)
#endif
-#pragma GCC target
("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64")
+/* avx10vpmldsabflydqintrin.h */
+#define __builtin_ia32_mldsabflydq128(A, B, C, M)
__builtin_ia32_mldsabflydq128 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq256(A, B, C, M)
__builtin_ia32_mldsabflydq256 (A, B, C, 1)
+#define __builtin_ia32_mldsabflydq512(A, B, C, M)
__builtin_ia32_mldsabflydq512 (A, B, C, 1)
+
+#pragma GCC target
("sse4a,3dnow,avx,avx2,fma4,xop,aes,pclmul,popcnt,abm,lzcnt,bmi,bmi2,tbm,lwp,fsgsbase,rdrnd,f16c,fma,rtm,rdseed,prfchw,adx,fxsr,xsaveopt,sha,xsavec,xsaves,clflushopt,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,vpclmulqdq,pconfig,wbnoinvd,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avxifma,avxvnniint8,avxneconvert,cmpccxadd,amx-fp16,prefetchi,raoint,amx-complex,avxvnniint16,sm3,sha512,sm4,avx10.2,amx-avx512,amx-fp8,movrs,amx-movrs,avx10v2aux,acev1,avx10.3,acev2,aceopfp16,aceopfp32,aceopfp64,avx10vpmldsabflydq")
#include <x86intrin.h>
diff --git a/gcc/testsuite/lib/target-supports.exp
b/gcc/testsuite/lib/target-supports.exp
index 520b9300081..c01b32c8240 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -12166,6 +12166,23 @@ proc check_effective_target_aceopfp64 { } {
} "-maceopfp64" ]
}
+# Return 1 if avx10vpmldsabflydq instructions can be compiled.
+proc check_effective_target_avx10vpmldsabflydq { } {
+ return [check_no_compiler_messages avx10vpmldsabflydq object {
+ typedef int __m128i __attribute__ ((__vector_size__ (16)));
+ typedef int __v4si __attribute__ ((__vector_size__ (16)));
+ __m128i
+ _mm_mldsabflydq_epi32 (__m128i __A, __m128i __B,
+ __m128i __C)
+ {
+ return (__m128i) __builtin_ia32_mldsabflydq128 ((__v4si) __A,
+ (__v4si) __B,
+ (__v4si) __C,
+ 1);
+ }
+ } "-mavx10vpmldsabflydq" ]
+}
+
# Return 1 if sse instructions can be compiled.
proc check_effective_target_sse { } {
return [check_no_compiler_messages sse object {
--
2.31.1