[Sync] Sync patch from openeuler/gcc
This commit is contained in:
parent
7971754262
commit
baeac561ff
277
0077-Initial-Granite-Rapids-Support.patch
Normal file
277
0077-Initial-Granite-Rapids-Support.patch
Normal file
@ -0,0 +1,277 @@
|
||||
From 7f0f8b585cf60b4c09bca42b5339995c2cc74633 Mon Sep 17 00:00:00 2001
|
||||
From: Haochen Jiang <haochen.jiang@intel.com>
|
||||
Date: Mon, 7 Nov 2022 11:04:57 +0800
|
||||
Subject: [PATCH 22/32] Initial Granite Rapids Support
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* common/config/i386/cpuinfo.h
|
||||
(get_intel_cpu): Handle Granite Rapids.
|
||||
* common/config/i386/i386-common.cc:
|
||||
(processor_names): Add graniterapids.
|
||||
(processor_alias_table): Ditto.
|
||||
* common/config/i386/i386-cpuinfo.h
|
||||
(enum processor_subtypes): Add INTEL_GRANTIERAPIDS.
|
||||
* config.gcc: Add -march=graniterapids.
|
||||
* config/i386/driver-i386.cc (host_detect_local_cpu):
|
||||
Handle graniterapids.
|
||||
* config/i386/i386-c.cc (ix86_target_macros_internal):
|
||||
Ditto.
|
||||
* config/i386/i386-options.cc (m_GRANITERAPIDS): New.
|
||||
(processor_cost_table): Add graniterapids.
|
||||
* config/i386/i386.h (enum processor_type):
|
||||
Add PROCESSOR_GRANITERAPIDS.
|
||||
(PTA_GRANITERAPIDS): Ditto.
|
||||
* doc/extend.texi: Add graniterapids.
|
||||
* doc/invoke.texi: Ditto.
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
|
||||
* g++.target/i386/mv16.C: Add graniterapids.
|
||||
* gcc.target/i386/funcspec-56.inc: Handle new march.
|
||||
|
||||
(cherry picked from commit 339ffc5a792dd66647392a235f2f7f6344c5359e)
|
||||
---
|
||||
gcc/common/config/i386/cpuinfo.h | 9 +++++++++
|
||||
gcc/common/config/i386/i386-common.cc | 3 +++
|
||||
gcc/common/config/i386/i386-cpuinfo.h | 1 +
|
||||
gcc/config.gcc | 2 +-
|
||||
gcc/config/i386/driver-i386.cc | 5 ++++-
|
||||
gcc/config/i386/i386-c.cc | 7 +++++++
|
||||
gcc/config/i386/i386-options.cc | 4 +++-
|
||||
gcc/config/i386/i386.h | 3 +++
|
||||
gcc/doc/extend.texi | 3 +++
|
||||
gcc/doc/invoke.texi | 11 +++++++++++
|
||||
gcc/testsuite/g++.target/i386/mv16.C | 6 ++++++
|
||||
gcc/testsuite/gcc.target/i386/funcspec-56.inc | 1 +
|
||||
12 files changed, 52 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h
|
||||
index f17e88144..1f75ff1ca 100644
|
||||
--- a/gcc/common/config/i386/cpuinfo.h
|
||||
+++ b/gcc/common/config/i386/cpuinfo.h
|
||||
@@ -528,6 +528,15 @@ get_intel_cpu (struct __processor_model *cpu_model,
|
||||
cpu_model->__cpu_type = INTEL_COREI7;
|
||||
cpu_model->__cpu_subtype = INTEL_COREI7_SAPPHIRERAPIDS;
|
||||
break;
|
||||
+ case 0xad:
|
||||
+ case 0xae:
|
||||
+ /* Granite Rapids. */
|
||||
+ cpu = "graniterapids";
|
||||
+ CHECK___builtin_cpu_is ("corei7");
|
||||
+ CHECK___builtin_cpu_is ("graniterapids");
|
||||
+ cpu_model->__cpu_type = INTEL_COREI7;
|
||||
+ cpu_model->__cpu_subtype = INTEL_COREI7_GRANITERAPIDS;
|
||||
+ break;
|
||||
case 0x17:
|
||||
case 0x1d:
|
||||
/* Penryn. */
|
||||
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
|
||||
index c8cf532cf..1aa163463 100644
|
||||
--- a/gcc/common/config/i386/i386-common.cc
|
||||
+++ b/gcc/common/config/i386/i386-common.cc
|
||||
@@ -1855,6 +1855,7 @@ const char *const processor_names[] =
|
||||
"sapphirerapids",
|
||||
"alderlake",
|
||||
"rocketlake",
|
||||
+ "graniterapids",
|
||||
"intel",
|
||||
"geode",
|
||||
"k6",
|
||||
@@ -1973,6 +1974,8 @@ const pta processor_alias_table[] =
|
||||
M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
|
||||
{"meteorlake", PROCESSOR_ALDERLAKE, CPU_HASWELL, PTA_ALDERLAKE,
|
||||
M_CPU_SUBTYPE (INTEL_COREI7_ALDERLAKE), P_PROC_AVX2},
|
||||
+ {"graniterapids", PROCESSOR_GRANITERAPIDS, CPU_HASWELL, PTA_GRANITERAPIDS,
|
||||
+ M_CPU_SUBTYPE (INTEL_COREI7_GRANITERAPIDS), P_PROC_AVX512F},
|
||||
{"bonnell", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
|
||||
M_CPU_TYPE (INTEL_BONNELL), P_PROC_SSSE3},
|
||||
{"atom", PROCESSOR_BONNELL, CPU_ATOM, PTA_BONNELL,
|
||||
diff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h
|
||||
index 95b078acf..7b2d4d242 100644
|
||||
--- a/gcc/common/config/i386/i386-cpuinfo.h
|
||||
+++ b/gcc/common/config/i386/i386-cpuinfo.h
|
||||
@@ -92,6 +92,7 @@ enum processor_subtypes
|
||||
AMDFAM19H_ZNVER3,
|
||||
INTEL_COREI7_ROCKETLAKE,
|
||||
AMDFAM19H_ZNVER4,
|
||||
+ INTEL_COREI7_GRANITERAPIDS,
|
||||
CPU_SUBTYPE_MAX
|
||||
};
|
||||
|
||||
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||
index 81012c651..9bad238e3 100644
|
||||
--- a/gcc/config.gcc
|
||||
+++ b/gcc/config.gcc
|
||||
@@ -670,7 +670,7 @@ slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \
|
||||
silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \
|
||||
skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \
|
||||
sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \
|
||||
-nano-x2 eden-x4 nano-x4 x86-64 x86-64-v2 x86-64-v3 x86-64-v4 native"
|
||||
+nano-x2 eden-x4 nano-x4 x86-64 x86-64-v2 x86-64-v3 x86-64-v4 graniterapids native"
|
||||
|
||||
# Additional x86 processors supported by --with-cpu=. Each processor
|
||||
# MUST be separated by exactly one space.
|
||||
diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc
|
||||
index 3b5161aed..ea8c3d8d1 100644
|
||||
--- a/gcc/config/i386/driver-i386.cc
|
||||
+++ b/gcc/config/i386/driver-i386.cc
|
||||
@@ -576,8 +576,11 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
||||
/* This is unknown family 0x6 CPU. */
|
||||
if (has_feature (FEATURE_AVX))
|
||||
{
|
||||
+ /* Assume Granite Rapids. */
|
||||
+ if (has_feature (FEATURE_AMX_FP16))
|
||||
+ cpu = "graniterapids";
|
||||
/* Assume Tiger Lake */
|
||||
- if (has_feature (FEATURE_AVX512VP2INTERSECT))
|
||||
+ else if (has_feature (FEATURE_AVX512VP2INTERSECT))
|
||||
cpu = "tigerlake";
|
||||
/* Assume Sapphire Rapids. */
|
||||
else if (has_feature (FEATURE_TSXLDTRK))
|
||||
diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc
|
||||
index 00880bd17..04f1dd682 100644
|
||||
--- a/gcc/config/i386/i386-c.cc
|
||||
+++ b/gcc/config/i386/i386-c.cc
|
||||
@@ -242,6 +242,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
||||
def_or_undef (parse_in, "__sapphirerapids");
|
||||
def_or_undef (parse_in, "__sapphirerapids__");
|
||||
break;
|
||||
+ case PROCESSOR_GRANITERAPIDS:
|
||||
+ def_or_undef (parse_in, "__graniterapids");
|
||||
+ def_or_undef (parse_in, "__graniterapids__");
|
||||
+ break;
|
||||
case PROCESSOR_ALDERLAKE:
|
||||
def_or_undef (parse_in, "__alderlake");
|
||||
def_or_undef (parse_in, "__alderlake__");
|
||||
@@ -419,6 +423,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
||||
case PROCESSOR_ROCKETLAKE:
|
||||
def_or_undef (parse_in, "__tune_rocketlake__");
|
||||
break;
|
||||
+ case PROCESSOR_GRANITERAPIDS:
|
||||
+ def_or_undef (parse_in, "__tune_graniterapids__");
|
||||
+ break;
|
||||
case PROCESSOR_INTEL:
|
||||
case PROCESSOR_GENERIC:
|
||||
break;
|
||||
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
|
||||
index 724375f02..6645e3259 100644
|
||||
--- a/gcc/config/i386/i386-options.cc
|
||||
+++ b/gcc/config/i386/i386-options.cc
|
||||
@@ -127,10 +127,11 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define m_SAPPHIRERAPIDS (HOST_WIDE_INT_1U<<PROCESSOR_SAPPHIRERAPIDS)
|
||||
#define m_ALDERLAKE (HOST_WIDE_INT_1U<<PROCESSOR_ALDERLAKE)
|
||||
#define m_ROCKETLAKE (HOST_WIDE_INT_1U<<PROCESSOR_ROCKETLAKE)
|
||||
+#define m_GRANITERAPIDS (HOST_WIDE_INT_1U<<PROCESSOR_GRANITERAPIDS)
|
||||
#define m_CORE_AVX512 (m_SKYLAKE_AVX512 | m_CANNONLAKE \
|
||||
| m_ICELAKE_CLIENT | m_ICELAKE_SERVER | m_CASCADELAKE \
|
||||
| m_TIGERLAKE | m_COOPERLAKE | m_SAPPHIRERAPIDS \
|
||||
- | m_ROCKETLAKE)
|
||||
+ | m_ROCKETLAKE | m_GRANITERAPIDS)
|
||||
#define m_CORE_AVX2 (m_HASWELL | m_SKYLAKE | m_CORE_AVX512)
|
||||
#define m_CORE_ALL (m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_CORE_AVX2)
|
||||
#define m_GOLDMONT (HOST_WIDE_INT_1U<<PROCESSOR_GOLDMONT)
|
||||
@@ -761,6 +762,7 @@ static const struct processor_costs *processor_cost_table[] =
|
||||
&icelake_cost,
|
||||
&alderlake_cost,
|
||||
&icelake_cost,
|
||||
+ &icelake_cost,
|
||||
&intel_cost,
|
||||
&geode_cost,
|
||||
&k6_cost,
|
||||
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
|
||||
index aaa136ba0..75953defc 100644
|
||||
--- a/gcc/config/i386/i386.h
|
||||
+++ b/gcc/config/i386/i386.h
|
||||
@@ -2250,6 +2250,7 @@ enum processor_type
|
||||
PROCESSOR_SAPPHIRERAPIDS,
|
||||
PROCESSOR_ALDERLAKE,
|
||||
PROCESSOR_ROCKETLAKE,
|
||||
+ PROCESSOR_GRANITERAPIDS,
|
||||
PROCESSOR_INTEL,
|
||||
PROCESSOR_GEODE,
|
||||
PROCESSOR_K6,
|
||||
@@ -2356,6 +2357,8 @@ constexpr wide_int_bitmask PTA_ALDERLAKE = PTA_TREMONT | PTA_ADX | PTA_AVX
|
||||
| PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_LZCNT
|
||||
| PTA_PCONFIG | PTA_PKU | PTA_VAES | PTA_VPCLMULQDQ | PTA_SERIALIZE
|
||||
| PTA_HRESET | PTA_KL | PTA_WIDEKL | PTA_AVXVNNI;
|
||||
+constexpr wide_int_bitmask PTA_GRANITERAPIDS = PTA_SAPPHIRERAPIDS | PTA_AMX_FP16
|
||||
+ | PTA_PREFETCHI;
|
||||
constexpr wide_int_bitmask PTA_KNM = PTA_KNL | PTA_AVX5124VNNIW
|
||||
| PTA_AVX5124FMAPS | PTA_AVX512VPOPCNTDQ;
|
||||
constexpr wide_int_bitmask PTA_ZNVER1 = PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2
|
||||
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
|
||||
index cb987f469..ba9faf4b2 100644
|
||||
--- a/gcc/doc/extend.texi
|
||||
+++ b/gcc/doc/extend.texi
|
||||
@@ -21829,6 +21829,9 @@ Intel Core i7 Alderlake CPU.
|
||||
@item rocketlake
|
||||
Intel Core i7 Rocketlake CPU.
|
||||
|
||||
+@item graniterapids
|
||||
+Intel Core i7 graniterapids CPU.
|
||||
+
|
||||
@item bonnell
|
||||
Intel Atom Bonnell CPU.
|
||||
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 211b970c0..8ca831dc1 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -31615,6 +31615,17 @@ CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD
|
||||
PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
|
||||
VPCLMULQDQ, AVX512BITALG, RDPID and AVX512VPOPCNTDQ instruction set support.
|
||||
|
||||
+@item graniterapids
|
||||
+Intel graniterapids CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3,
|
||||
+SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE,
|
||||
+RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW,
|
||||
+AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
|
||||
+AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2,
|
||||
+VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB,
|
||||
+MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG,
|
||||
+SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16,
|
||||
+AVX512BF16, AMX-FP16 and PREFETCHI instruction set support.
|
||||
+
|
||||
@item k6
|
||||
AMD K6 CPU with MMX instruction set support.
|
||||
|
||||
diff --git a/gcc/testsuite/g++.target/i386/mv16.C b/gcc/testsuite/g++.target/i386/mv16.C
|
||||
index 683928729..65cc24f32 100644
|
||||
--- a/gcc/testsuite/g++.target/i386/mv16.C
|
||||
+++ b/gcc/testsuite/g++.target/i386/mv16.C
|
||||
@@ -92,6 +92,10 @@ int __attribute__ ((target("arch=rocketlake"))) foo () {
|
||||
return 24;
|
||||
}
|
||||
|
||||
+int __attribute__ ((target("arch=graniterapids"))) foo () {
|
||||
+ return 26;
|
||||
+}
|
||||
+
|
||||
int main ()
|
||||
{
|
||||
int val = foo ();
|
||||
@@ -130,6 +134,8 @@ int main ()
|
||||
assert (val == 23);
|
||||
else if (__builtin_cpu_is ("rocketlake"))
|
||||
assert (val == 24);
|
||||
+ else if (__builtin_cpu_is ("graniterapids"))
|
||||
+ assert (val == 25);
|
||||
else
|
||||
assert (val == 0);
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
index 9f073f78c..bdcfdbc88 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
@@ -188,6 +188,7 @@ extern void test_arch_cooperlake (void) __attribute__((__target__("arch=
|
||||
extern void test_arch_sapphirerapids (void) __attribute__((__target__("arch=sapphirerapids")));
|
||||
extern void test_arch_alderlake (void) __attribute__((__target__("arch=alderlake")));
|
||||
extern void test_arch_rocketlake (void) __attribute__((__target__("arch=rocketlake")));
|
||||
+extern void test_arch_graniterapids (void) __attribute__((__target__("arch=graniterapids")));
|
||||
extern void test_arch_k8 (void) __attribute__((__target__("arch=k8")));
|
||||
extern void test_arch_k8_sse3 (void) __attribute__((__target__("arch=k8-sse3")));
|
||||
extern void test_arch_opteron (void) __attribute__((__target__("arch=opteron")));
|
||||
--
|
||||
2.28.0.windows.1
|
||||
|
||||
722
0078-Support-Intel-AMX-COMPLEX.patch
Normal file
722
0078-Support-Intel-AMX-COMPLEX.patch
Normal file
@ -0,0 +1,722 @@
|
||||
From 4f1aff10d93cabe8dfbaf076b6d826a142efb6e1 Mon Sep 17 00:00:00 2001
|
||||
From: Haochen Jiang <haochen.jiang@intel.com>
|
||||
Date: Wed, 31 May 2023 10:45:00 +0800
|
||||
Subject: [PATCH 23/32] Support Intel AMX-COMPLEX
|
||||
|
||||
gcc/ChangeLog:
|
||||
|
||||
* common/config/i386/cpuinfo.h (get_available_features):
|
||||
Detect AMX-COMPLEX.
|
||||
* common/config/i386/i386-common.cc
|
||||
(OPTION_MASK_ISA2_AMX_COMPLEX_SET,
|
||||
OPTION_MASK_ISA2_AMX_COMPLEX_UNSET): New.
|
||||
(ix86_handle_option): Handle -mamx-complex.
|
||||
* common/config/i386/i386-cpuinfo.h (enum processor_features):
|
||||
Add FEATURE_AMX_COMPLEX.
|
||||
* common/config/i386/i386-isas.h: Add ISA_NAME_TABLE_ENTRY for
|
||||
amx-complex.
|
||||
* config.gcc: Add amxcomplexintrin.h.
|
||||
* config/i386/cpuid.h (bit_AMX_COMPLEX): New.
|
||||
* config/i386/i386-c.cc (ix86_target_macros_internal): Define
|
||||
__AMX_COMPLEX__.
|
||||
* config/i386/i386-isa.def (AMX_COMPLEX): Add DEF_PTA(AMX_COMPLEX).
|
||||
* config/i386/i386-options.cc (ix86_valid_target_attribute_inner_p):
|
||||
Handle amx-complex.
|
||||
* config/i386/i386.opt: Add option -mamx-complex.
|
||||
* config/i386/immintrin.h: Include amxcomplexintrin.h.
|
||||
* doc/extend.texi: Document amx-complex.
|
||||
* doc/invoke.texi: Document -mamx-complex.
|
||||
* doc/sourcebuild.texi: Document target amx-complex.
|
||||
* config/i386/amxcomplexintrin.h: New file.
|
||||
|
||||
gcc/testsuite/ChangeLog:
|
||||
|
||||
* g++.dg/other/i386-2.C: Add -mamx-complex.
|
||||
* g++.dg/other/i386-3.C: Ditto.
|
||||
* gcc.target/i386/amx-check.h: Add cpu check for AMX-COMPLEX.
|
||||
* gcc.target/i386/amx-helper.h: Add amx-complex support.
|
||||
* gcc.target/i386/funcspec-56.inc: Add new target attribute.
|
||||
* gcc.target/i386/sse-12.c: Add -mamx-complex.
|
||||
* gcc.target/i386/sse-13.c: Ditto.
|
||||
* gcc.target/i386/sse-14.c: Ditto.
|
||||
* gcc.target/i386/sse-22.c: Add amx-complex.
|
||||
* gcc.target/i386/sse-23.c: Ditto.
|
||||
* lib/target-supports.exp (check_effective_target_amx_complex): New.
|
||||
* gcc.target/i386/amxcomplex-asmatt-1.c: New test.
|
||||
* gcc.target/i386/amxcomplex-asmintel-1.c: Ditto.
|
||||
* gcc.target/i386/amxcomplex-cmmimfp16ps-2.c: Ditto.
|
||||
* gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c: Ditto.
|
||||
---
|
||||
gcc/common/config/i386/cpuinfo.h | 2 +
|
||||
gcc/common/config/i386/i386-common.cc | 19 +++++-
|
||||
gcc/common/config/i386/i386-cpuinfo.h | 1 +
|
||||
gcc/common/config/i386/i386-isas.h | 2 +
|
||||
gcc/config.gcc | 2 +-
|
||||
gcc/config/i386/amxcomplexintrin.h | 59 +++++++++++++++++++
|
||||
gcc/config/i386/cpuid.h | 1 +
|
||||
gcc/config/i386/i386-c.cc | 2 +
|
||||
gcc/config/i386/i386-isa.def | 1 +
|
||||
gcc/config/i386/i386-options.cc | 4 +-
|
||||
gcc/config/i386/i386.opt | 4 ++
|
||||
gcc/config/i386/immintrin.h | 2 +
|
||||
gcc/doc/extend.texi | 5 ++
|
||||
gcc/doc/invoke.texi | 7 ++-
|
||||
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/amx-check.h | 3 +
|
||||
gcc/testsuite/gcc.target/i386/amx-helper.h | 4 +-
|
||||
.../gcc.target/i386/amxcomplex-asmatt-1.c | 15 +++++
|
||||
.../gcc.target/i386/amxcomplex-asmintel-1.c | 12 ++++
|
||||
.../i386/amxcomplex-cmmimfp16ps-2.c | 53 +++++++++++++++++
|
||||
.../i386/amxcomplex-cmmrlfp16ps-2.c | 53 +++++++++++++++++
|
||||
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 | 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 +-
|
||||
gcc/testsuite/lib/target-supports.exp | 11 ++++
|
||||
30 files changed, 268 insertions(+), 15 deletions(-)
|
||||
create mode 100644 gcc/config/i386/amxcomplexintrin.h
|
||||
create mode 100644 gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c
|
||||
create mode 100644 gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c
|
||||
|
||||
diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h
|
||||
index 1f75ff1ca..39d3351db 100644
|
||||
--- a/gcc/common/config/i386/cpuinfo.h
|
||||
+++ b/gcc/common/config/i386/cpuinfo.h
|
||||
@@ -798,6 +798,8 @@ get_available_features (struct __processor_model *cpu_model,
|
||||
{
|
||||
if (eax & bit_AMX_FP16)
|
||||
set_feature (FEATURE_AMX_FP16);
|
||||
+ if (edx & bit_AMX_COMPLEX)
|
||||
+ set_feature (FEATURE_AMX_COMPLEX);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc
|
||||
index 1aa163463..87e8afe9b 100644
|
||||
--- a/gcc/common/config/i386/i386-common.cc
|
||||
+++ b/gcc/common/config/i386/i386-common.cc
|
||||
@@ -109,6 +109,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define OPTION_MASK_ISA2_AMX_BF16_SET OPTION_MASK_ISA2_AMX_BF16
|
||||
#define OPTION_MASK_ISA2_AMX_FP16_SET OPTION_MASK_ISA2_AMX_FP16
|
||||
#define OPTION_MASK_ISA2_PREFETCHI_SET OPTION_MASK_ISA2_PREFETCHI
|
||||
+#define OPTION_MASK_ISA2_AMX_COMPLEX_SET \
|
||||
+ (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_COMPLEX)
|
||||
|
||||
/* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
|
||||
as -msse4.2. */
|
||||
@@ -269,7 +271,8 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define OPTION_MASK_ISA2_SERIALIZE_UNSET OPTION_MASK_ISA2_SERIALIZE
|
||||
#define OPTION_MASK_ISA2_AVX512VP2INTERSECT_UNSET OPTION_MASK_ISA2_AVX512VP2INTERSECT
|
||||
#define OPTION_MASK_ISA2_TSXLDTRK_UNSET OPTION_MASK_ISA2_TSXLDTRK
|
||||
-#define OPTION_MASK_ISA2_AMX_TILE_UNSET OPTION_MASK_ISA2_AMX_TILE
|
||||
+#define OPTION_MASK_ISA2_AMX_TILE_UNSET \
|
||||
+ (OPTION_MASK_ISA2_AMX_TILE | OPTION_MASK_ISA2_AMX_COMPLEX_UNSET)
|
||||
#define OPTION_MASK_ISA2_AMX_INT8_UNSET OPTION_MASK_ISA2_AMX_INT8
|
||||
#define OPTION_MASK_ISA2_AMX_BF16_UNSET OPTION_MASK_ISA2_AMX_BF16
|
||||
#define OPTION_MASK_ISA2_UINTR_UNSET OPTION_MASK_ISA2_UINTR
|
||||
@@ -279,6 +282,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#define OPTION_MASK_ISA2_WIDEKL_UNSET OPTION_MASK_ISA2_WIDEKL
|
||||
#define OPTION_MASK_ISA2_AMX_FP16_UNSET OPTION_MASK_ISA2_AMX_FP16
|
||||
#define OPTION_MASK_ISA2_PREFETCHI_UNSET OPTION_MASK_ISA2_PREFETCHI
|
||||
+#define OPTION_MASK_ISA2_AMX_COMPLEX_UNSET OPTION_MASK_ISA2_AMX_COMPLEX
|
||||
|
||||
/* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
|
||||
as -mno-sse4.1. */
|
||||
@@ -1155,6 +1159,19 @@ ix86_handle_option (struct gcc_options *opts,
|
||||
}
|
||||
return true;
|
||||
|
||||
+ case OPT_mamx_complex:
|
||||
+ if (value)
|
||||
+ {
|
||||
+ opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA2_AMX_COMPLEX_SET;
|
||||
+ opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_COMPLEX_SET;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ opts->x_ix86_isa_flags2 &= ~OPTION_MASK_ISA2_AMX_COMPLEX_UNSET;
|
||||
+ opts->x_ix86_isa_flags2_explicit |= OPTION_MASK_ISA2_AMX_COMPLEX_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 7b2d4d242..56020faac 100644
|
||||
--- a/gcc/common/config/i386/i386-cpuinfo.h
|
||||
+++ b/gcc/common/config/i386/i386-cpuinfo.h
|
||||
@@ -243,6 +243,7 @@ enum processor_features
|
||||
FEATURE_X86_64_V4,
|
||||
FEATURE_AMX_FP16,
|
||||
FEATURE_PREFETCHI,
|
||||
+ FEATURE_AMX_COMPLEX,
|
||||
CPU_FEATURE_MAX
|
||||
};
|
||||
|
||||
diff --git a/gcc/common/config/i386/i386-isas.h b/gcc/common/config/i386/i386-isas.h
|
||||
index 6caf06249..cbef68479 100644
|
||||
--- a/gcc/common/config/i386/i386-isas.h
|
||||
+++ b/gcc/common/config/i386/i386-isas.h
|
||||
@@ -177,4 +177,6 @@ ISA_NAMES_TABLE_START
|
||||
ISA_NAMES_TABLE_ENTRY("x86-64-v4", FEATURE_X86_64_V4, P_X86_64_V4, NULL)
|
||||
ISA_NAMES_TABLE_ENTRY("amx-fp16", FEATURE_AMX_FP16, P_NONE, "-mamx-fp16")
|
||||
ISA_NAMES_TABLE_ENTRY("prefetchi", FEATURE_PREFETCHI, P_NONE, "-mprefetchi")
|
||||
+ ISA_NAMES_TABLE_ENTRY("amx-complex", FEATURE_AMX_COMPLEX,
|
||||
+ P_NONE, "-mamx-complex")
|
||||
ISA_NAMES_TABLE_END
|
||||
diff --git a/gcc/config.gcc b/gcc/config.gcc
|
||||
index 9bad238e3..ca5c8f8a0 100644
|
||||
--- a/gcc/config.gcc
|
||||
+++ b/gcc/config.gcc
|
||||
@@ -424,7 +424,7 @@ i[34567]86-*-* | x86_64-*-*)
|
||||
amxbf16intrin.h x86gprintrin.h uintrintrin.h
|
||||
hresetintrin.h keylockerintrin.h avxvnniintrin.h
|
||||
mwaitintrin.h avx512fp16intrin.h avx512fp16vlintrin.h
|
||||
- amxfp16intrin.h prfchiintrin.h"
|
||||
+ amxfp16intrin.h prfchiintrin.h amxcomplexintrin.h"
|
||||
;;
|
||||
ia64-*-*)
|
||||
extra_headers=ia64intrin.h
|
||||
diff --git a/gcc/config/i386/amxcomplexintrin.h b/gcc/config/i386/amxcomplexintrin.h
|
||||
new file mode 100644
|
||||
index 000000000..6ea1eca04
|
||||
--- /dev/null
|
||||
+++ b/gcc/config/i386/amxcomplexintrin.h
|
||||
@@ -0,0 +1,59 @@
|
||||
+/* Copyright (C) 2023 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 <amxcomplexintrin.h> directly; include <immintrin.h> instead."
|
||||
+#endif
|
||||
+
|
||||
+#ifndef _AMXCOMPLEXINTRIN_H_INCLUDED
|
||||
+#define _AMXCOMPLEXINTRIN_H_INCLUDED
|
||||
+
|
||||
+#if !defined(__AMX_COMPLEX__)
|
||||
+#pragma GCC push_options
|
||||
+#pragma GCC target("amx-complex")
|
||||
+#define __DISABLE_AMX_COMPLEX__
|
||||
+#endif /* __AMX_COMPLEX__ */
|
||||
+
|
||||
+#if defined(__x86_64__)
|
||||
+#define _tile_cmmimfp16ps_internal(src1_dst,src2,src3) \
|
||||
+ __asm__ volatile\
|
||||
+ ("{tcmmimfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmimfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
|
||||
+
|
||||
+#define _tile_cmmrlfp16ps_internal(src1_dst,src2,src3) \
|
||||
+ __asm__ volatile\
|
||||
+ ("{tcmmrlfp16ps\t%%tmm"#src3", %%tmm"#src2", %%tmm"#src1_dst"|tcmmrlfp16ps\t%%tmm"#src1_dst", %%tmm"#src2", %%tmm"#src3"}" ::)
|
||||
+
|
||||
+#define _tile_cmmimfp16ps(src1_dst,src2,src3) \
|
||||
+ _tile_cmmimfp16ps_internal (src1_dst, src2, src3)
|
||||
+
|
||||
+#define _tile_cmmrlfp16ps(src1_dst,src2,src3) \
|
||||
+ _tile_cmmrlfp16ps_internal (src1_dst, src2, src3)
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __DISABLE_AMX_COMPLEX__
|
||||
+#undef __DISABLE_AMX_COMPLEX__
|
||||
+#pragma GCC pop_options
|
||||
+#endif /* __DISABLE_AMX_COMPLEX__ */
|
||||
+
|
||||
+#endif /* _AMXCOMPLEXINTRIN_H_INCLUDED */
|
||||
diff --git a/gcc/config/i386/cpuid.h b/gcc/config/i386/cpuid.h
|
||||
index 21100149a..530a45fad 100644
|
||||
--- a/gcc/config/i386/cpuid.h
|
||||
+++ b/gcc/config/i386/cpuid.h
|
||||
@@ -136,6 +136,7 @@
|
||||
#define bit_AMX_BF16 (1 << 22)
|
||||
#define bit_AMX_TILE (1 << 24)
|
||||
#define bit_AMX_INT8 (1 << 25)
|
||||
+#define bit_AMX_COMPLEX (1 << 8)
|
||||
|
||||
/* Extended State Enumeration Sub-leaf (%eax == 0xd, %ecx == 1) */
|
||||
#define bit_XSAVEOPT (1 << 0)
|
||||
diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc
|
||||
index 04f1dd682..5e0ac278c 100644
|
||||
--- a/gcc/config/i386/i386-c.cc
|
||||
+++ b/gcc/config/i386/i386-c.cc
|
||||
@@ -644,6 +644,8 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag,
|
||||
def_or_undef (parse_in, "__AMX_FP16__");
|
||||
if (isa_flag2 & OPTION_MASK_ISA2_PREFETCHI)
|
||||
def_or_undef (parse_in, "__PREFETCHI__");
|
||||
+ if (isa_flag2 & OPTION_MASK_ISA2_AMX_COMPLEX)
|
||||
+ def_or_undef (parse_in, "__AMX_COMPLEX__");
|
||||
if (TARGET_IAMCU)
|
||||
{
|
||||
def_or_undef (parse_in, "__iamcu");
|
||||
diff --git a/gcc/config/i386/i386-isa.def b/gcc/config/i386/i386-isa.def
|
||||
index 744a7df85..7445b1bf7 100644
|
||||
--- a/gcc/config/i386/i386-isa.def
|
||||
+++ b/gcc/config/i386/i386-isa.def
|
||||
@@ -111,3 +111,4 @@ DEF_PTA(AVXVNNI)
|
||||
DEF_PTA(AVX512FP16)
|
||||
DEF_PTA(AMX_FP16)
|
||||
DEF_PTA(PREFETCHI)
|
||||
+DEF_PTA(AMX_COMPLEX)
|
||||
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
|
||||
index 6645e3259..7efd25084 100644
|
||||
--- a/gcc/config/i386/i386-options.cc
|
||||
+++ b/gcc/config/i386/i386-options.cc
|
||||
@@ -233,7 +233,8 @@ static struct ix86_target_opts isa2_opts[] =
|
||||
{ "-mavxvnni", OPTION_MASK_ISA2_AVXVNNI },
|
||||
{ "-mavx512fp16", OPTION_MASK_ISA2_AVX512FP16 },
|
||||
{ "-mamx-fp16", OPTION_MASK_ISA2_AMX_FP16 },
|
||||
- { "-mprefetchi", OPTION_MASK_ISA2_PREFETCHI }
|
||||
+ { "-mprefetchi", OPTION_MASK_ISA2_PREFETCHI },
|
||||
+ { "-mamx-complex", OPTION_MASK_ISA2_AMX_COMPLEX }
|
||||
};
|
||||
static struct ix86_target_opts isa_opts[] =
|
||||
{
|
||||
@@ -1080,6 +1081,7 @@ ix86_valid_target_attribute_inner_p (tree fndecl, tree args, char *p_strings[],
|
||||
IX86_ATTR_ISA ("avx512fp16", OPT_mavx512fp16),
|
||||
IX86_ATTR_ISA ("amx-fp16", OPT_mamx_fp16),
|
||||
IX86_ATTR_ISA ("prefetchi", OPT_mprefetchi),
|
||||
+ IX86_ATTR_ISA ("amx-complex", OPT_mamx_complex),
|
||||
|
||||
/* enum options */
|
||||
IX86_ATTR_ENUM ("fpmath=", OPT_mfpmath_),
|
||||
diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
|
||||
index 50cd114f6..fba94f3f6 100644
|
||||
--- a/gcc/config/i386/i386.opt
|
||||
+++ b/gcc/config/i386/i386.opt
|
||||
@@ -1234,3 +1234,7 @@ Support AMX-FP16 built-in functions and code generation.
|
||||
mprefetchi
|
||||
Target Mask(ISA2_PREFETCHI) Var(ix86_isa_flags2) Save
|
||||
Support PREFETCHI built-in functions and code generation.
|
||||
+
|
||||
+mamx-complex
|
||||
+Target Mask(ISA2_AMX_COMPLEX) Var(ix86_isa_flags2) Save
|
||||
+Support AMX-COMPLEX built-in functions and code generation.
|
||||
diff --git a/gcc/config/i386/immintrin.h b/gcc/config/i386/immintrin.h
|
||||
index 0447ca4b2..bd819c7f4 100644
|
||||
--- a/gcc/config/i386/immintrin.h
|
||||
+++ b/gcc/config/i386/immintrin.h
|
||||
@@ -124,6 +124,8 @@
|
||||
|
||||
#include <amxbf16intrin.h>
|
||||
|
||||
+#include <amxcomplexintrin.h>
|
||||
+
|
||||
#include <prfchwintrin.h>
|
||||
|
||||
#include <keylockerintrin.h>
|
||||
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
|
||||
index ba9faf4b2..d7b0bc802 100644
|
||||
--- a/gcc/doc/extend.texi
|
||||
+++ b/gcc/doc/extend.texi
|
||||
@@ -7048,6 +7048,11 @@ Enable/disable the generation of the AMX-FP16 instructions.
|
||||
@cindex @code{target("prefetchi")} function attribute, x86
|
||||
Enable/disable the generation of the PREFETCHI instructions.
|
||||
|
||||
+@cindex @code{target("amx-complex")} function attribute, x86
|
||||
+@item amx-complex
|
||||
+@itemx no-amx-complex
|
||||
+Enable/disable the generation of the AMX-COMPLEX instructions.
|
||||
+
|
||||
@item cld
|
||||
@itemx no-cld
|
||||
@cindex @code{target("cld")} function attribute, x86
|
||||
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
|
||||
index 8ca831dc1..186b33481 100644
|
||||
--- a/gcc/doc/invoke.texi
|
||||
+++ b/gcc/doc/invoke.texi
|
||||
@@ -1428,7 +1428,7 @@ See RS/6000 and PowerPC Options.
|
||||
-mavx5124fmaps -mavx512vnni -mavx5124vnniw -mprfchw -mrdpid @gol
|
||||
-mrdseed -msgx -mavx512vp2intersect -mserialize -mtsxldtrk@gol
|
||||
-mamx-tile -mamx-int8 -mamx-bf16 -muintr -mhreset -mavxvnni@gol
|
||||
--mavx512fp16 -mamx-fp16 -mprefetchi @gol
|
||||
+-mavx512fp16 -mamx-fp16 -mprefetchi -mamx-complex @gol
|
||||
-mcldemote -mms-bitfields -mno-align-stringops -minline-all-stringops @gol
|
||||
-minline-stringops-dynamically -mstringop-strategy=@var{alg} @gol
|
||||
-mkl -mwidekl @gol
|
||||
@@ -32459,6 +32459,9 @@ preferred alignment to @option{-mpreferred-stack-boundary=2}.
|
||||
@need 200
|
||||
@itemx -mprefetchi
|
||||
@opindex mprefetchi
|
||||
+@need 200
|
||||
+@opindex mamx-complex
|
||||
+@itemx -mamx-complex
|
||||
These switches enable the use of instructions in the MMX, SSE,
|
||||
SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F, AVX512PF,
|
||||
AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
|
||||
@@ -32469,7 +32472,7 @@ XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
|
||||
GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B, AVX512BF16,
|
||||
ENQCMD, AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW, SERIALIZE,
|
||||
UINTR, HRESET, AMXTILE, AMXINT8, AMXBF16, KL, WIDEKL, AVXVNNI, AVX512-FP16,
|
||||
-AMX-FP16, PREFETCHI or CLDEMOTE extended instruction sets. Each has a corresponding
|
||||
+AMX-FP16, PREFETCHI, AMX-COMPLEX or CLDEMOTE extended instruction sets. Each has a corresponding
|
||||
@option{-mno-} option to disable use of these instructions.
|
||||
|
||||
These extensions are also available as built-in functions: see
|
||||
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
|
||||
index c68e492dc..454fae11a 100644
|
||||
--- a/gcc/doc/sourcebuild.texi
|
||||
+++ b/gcc/doc/sourcebuild.texi
|
||||
@@ -2472,6 +2472,9 @@ Target supports the execution of @code{amx-int8} instructions.
|
||||
@item amx_bf16
|
||||
Target supports the execution of @code{amx-bf16} instructions.
|
||||
|
||||
+@item amx_complex
|
||||
+Target supports the execution of @code{amx-complex} instructions.
|
||||
+
|
||||
@item amx_fp16
|
||||
Target supports the execution of @code{amx-fp16} instructions.
|
||||
|
||||
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C b/gcc/testsuite/g++.dg/other/i386-2.C
|
||||
index 72ed5fed0..ae1b8f632 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi" } */
|
||||
+/* { 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi -mamx-complex" } */
|
||||
|
||||
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
|
||||
xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
|
||||
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C b/gcc/testsuite/g++.dg/other/i386-3.C
|
||||
index 9dd53653f..783e35774 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi" } */
|
||||
+/* { 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi -mamx-complex" } */
|
||||
|
||||
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, mm3dnow.h, fma4intrin.h,
|
||||
xopintrin.h, abmintrin.h, bmiintrin.h, tbmintrin.h, lwpintrin.h,
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amx-check.h b/gcc/testsuite/gcc.target/i386/amx-check.h
|
||||
index 27dd37bf9..f1a04cf1f 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/amx-check.h
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amx-check.h
|
||||
@@ -216,6 +216,9 @@ main ()
|
||||
#ifdef AMX_FP16
|
||||
&& __builtin_cpu_supports ("amx-fp16")
|
||||
#endif
|
||||
+#ifdef AMX_COMPLEX
|
||||
+ && __builtin_cpu_supports ("amx-complex")
|
||||
+#endif
|
||||
#ifdef __linux__
|
||||
&& request_perm_xtile_data ()
|
||||
#endif
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amx-helper.h b/gcc/testsuite/gcc.target/i386/amx-helper.h
|
||||
index fe24d7067..6ed9f5eb3 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/amx-helper.h
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amx-helper.h
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef AMX_HELPER_H_INCLUDED
|
||||
#define AMX_HELPER_H_INCLUDED
|
||||
-#if defined(AMX_FP16)
|
||||
+#if defined(AMX_FP16) || defined(AMX_COMPLEX)
|
||||
#include <immintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
@@ -12,7 +12,7 @@ typedef union
|
||||
uint16_t u;
|
||||
} union16f_uw;
|
||||
|
||||
-#if defined(AMX_FP16)
|
||||
+#if defined(AMX_FP16) || defined(AMX_COMPLEX)
|
||||
/* Transformation functions between fp16/float */
|
||||
static uint16_t make_f32_fp16 (float f)
|
||||
{
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c b/gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c
|
||||
new file mode 100644
|
||||
index 000000000..b6745e34b
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amxcomplex-asmatt-1.c
|
||||
@@ -0,0 +1,15 @@
|
||||
+/* { dg-do compile { target { ! ia32 } } } */
|
||||
+/* { dg-options "-O2 -mamx-complex" } */
|
||||
+/* { dg-final { scan-assembler "tcmmimfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
|
||||
+/* { dg-final { scan-assembler "tcmmrlfp16ps\[ \\t]+\[^\n\]*%tmm3+\[^\n\]*%tmm2+\[^\n\]*%tmm1" } } */
|
||||
+#include <immintrin.h>
|
||||
+
|
||||
+#define TMM1 1
|
||||
+#define TMM2 2
|
||||
+#define TMM3 3
|
||||
+
|
||||
+void TEST()
|
||||
+{
|
||||
+ _tile_cmmimfp16ps (TMM1, TMM2, TMM3);
|
||||
+ _tile_cmmrlfp16ps (TMM1, TMM2, TMM3);
|
||||
+}
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c b/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
|
||||
new file mode 100644
|
||||
index 000000000..305465e88
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amxcomplex-asmintel-1.c
|
||||
@@ -0,0 +1,12 @@
|
||||
+/* { dg-do compile { target { ! ia32 } } } */
|
||||
+/* { dg-require-effective-target masm_intel } */
|
||||
+/* { dg-options "-O2 -mamx-complex -masm=intel" } */
|
||||
+/* { dg-final { scan-assembler "tcmmimfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
|
||||
+/* { dg-final { scan-assembler "tcmmrlfp16ps\[ \\t]+\[^\n\]*%tmm1+\[^\n\]*%tmm2+\[^\n\]*%tmm3" } } */
|
||||
+#include <immintrin.h>
|
||||
+
|
||||
+void TEST()
|
||||
+{
|
||||
+ _tile_cmmimfp16ps (1, 2, 3);
|
||||
+ _tile_cmmrlfp16ps (1, 2, 3);
|
||||
+}
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c
|
||||
new file mode 100644
|
||||
index 000000000..6e3762c9f
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amxcomplex-cmmimfp16ps-2.c
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* { dg-do run { target { ! ia32 } } } */
|
||||
+/* { dg-require-effective-target amx_complex } */
|
||||
+/* { dg-require-effective-target avx512fp16 } */
|
||||
+/* { dg-options "-O2 -mamx-complex -mavx512fp16" } */
|
||||
+#define AMX_COMPLEX
|
||||
+#define DO_TEST test_amx_complex_cmmimfp16ps
|
||||
+void test_amx_complex_cmmimfp16ps ();
|
||||
+#include "amx-helper.h"
|
||||
+
|
||||
+void calc_matrix_cmmimfp16ps (__tile *dst, __tile *src1, __tile *src2)
|
||||
+{
|
||||
+ uint16_t *src1_buf = (uint16_t *) src1->buf;
|
||||
+ uint16_t *src2_buf = (uint16_t *) src2->buf;
|
||||
+ float *dst_buf = (float *) dst->buf;
|
||||
+
|
||||
+ int M = src1->rows;
|
||||
+ int N = src1->colsb / 4;
|
||||
+ int K = src2->colsb / 4;
|
||||
+ int i, j, k, t;
|
||||
+
|
||||
+ for (i = 0; i < M; i++)
|
||||
+ for (j = 0; j < N; j++)
|
||||
+ for (k = 0; k < K; k++)
|
||||
+ for (t = 0; t < 2; t+=2)
|
||||
+ dst_buf[i * N + k] +=
|
||||
+ (make_fp16_f32(src1_buf[i * 2 * N + 2 * j + t]) *
|
||||
+ make_fp16_f32(src2_buf[j * 2 * K + 2 * k + t + 1])) +
|
||||
+ (make_fp16_f32(src1_buf[i * 2 * N + 2 * j + t + 1]) *
|
||||
+ make_fp16_f32(src2_buf[j * 2 * K + 2 * k + t]));
|
||||
+}
|
||||
+
|
||||
+void test_amx_complex_cmmimfp16ps ()
|
||||
+{
|
||||
+ __tilecfg_u cfg;
|
||||
+ __tile dst, dst_ref, src1, src2;
|
||||
+ uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
|
||||
+
|
||||
+ init_fp16_max_tile_buffer (tmp_dst_buf);
|
||||
+ init_fp16_max_tile_zero_buffer (tmp_dst_zero_buf);
|
||||
+
|
||||
+ init_tile_config (&cfg);
|
||||
+ init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
|
||||
+ init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
|
||||
+ init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
|
||||
+
|
||||
+ calc_matrix_cmmimfp16ps (&dst, &src1, &src2);
|
||||
+
|
||||
+ _tile_cmmimfp16ps (1, 2, 3);
|
||||
+ _tile_stored (1, dst_ref.buf, _STRIDE);
|
||||
+
|
||||
+ if (!check_tile_register (&dst_ref, &dst))
|
||||
+ abort ();
|
||||
+}
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c b/gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c
|
||||
new file mode 100644
|
||||
index 000000000..15940708a
|
||||
--- /dev/null
|
||||
+++ b/gcc/testsuite/gcc.target/i386/amxcomplex-cmmrlfp16ps-2.c
|
||||
@@ -0,0 +1,53 @@
|
||||
+/* { dg-do run { target { ! ia32 } } } */
|
||||
+/* { dg-require-effective-target amx_complex } */
|
||||
+/* { dg-require-effective-target avx512fp16 } */
|
||||
+/* { dg-options "-O2 -mamx-complex -mavx512fp16" } */
|
||||
+#define AMX_COMPLEX
|
||||
+#define DO_TEST test_amx_complex_cmmrlfp16ps
|
||||
+void test_amx_complex_cmmrlfp16ps();
|
||||
+#include "amx-helper.h"
|
||||
+
|
||||
+void calc_matrix_cmmrlfp16ps (__tile *dst, __tile *src1, __tile *src2)
|
||||
+{
|
||||
+ uint16_t *src1_buf = (uint16_t *) src1->buf;
|
||||
+ uint16_t *src2_buf = (uint16_t *) src2->buf;
|
||||
+ float *dst_buf = (float *) dst->buf;
|
||||
+
|
||||
+ int M = src1->rows;
|
||||
+ int N = src1->colsb / 4;
|
||||
+ int K = src2->colsb / 4;
|
||||
+ int i, j, k, t;
|
||||
+
|
||||
+ for (i = 0; i < M; i++)
|
||||
+ for (j = 0; j < N; j++)
|
||||
+ for (k = 0; k < K; k++)
|
||||
+ for (t = 0; t < 2; t+=2)
|
||||
+ dst_buf[i * N + k] +=
|
||||
+ (make_fp16_f32 (src1_buf[i * 2 * N + 2 * j + t]) *
|
||||
+ make_fp16_f32 (src2_buf[j * 2 * K + 2 * k + t])) -
|
||||
+ (make_fp16_f32 (src1_buf[i * 2 * N + 2 * j + t + 1]) *
|
||||
+ make_fp16_f32 (src2_buf[j * 2 * K + 2 * k + t + 1]));
|
||||
+}
|
||||
+
|
||||
+void test_amx_complex_cmmrlfp16ps ()
|
||||
+{
|
||||
+ __tilecfg_u cfg;
|
||||
+ __tile dst, dst_ref, src1, src2;
|
||||
+ uint8_t tmp_dst_buf[1024], tmp_dst_zero_buf[1024];
|
||||
+
|
||||
+ init_fp16_max_tile_buffer (tmp_dst_buf);
|
||||
+ init_fp16_max_tile_zero_buffer (tmp_dst_zero_buf);
|
||||
+
|
||||
+ init_tile_config (&cfg);
|
||||
+ init_tile_reg_and_src_with_buffer (1, dst, tmp_dst_zero_buf);
|
||||
+ init_tile_reg_and_src_with_buffer (2, src1, tmp_dst_buf);
|
||||
+ init_tile_reg_and_src_with_buffer (3, src2, tmp_dst_buf);
|
||||
+
|
||||
+ calc_matrix_cmmrlfp16ps (&dst, &src1, &src2);
|
||||
+
|
||||
+ _tile_cmmrlfp16ps (1, 2, 3);
|
||||
+ _tile_stored (1, dst_ref.buf, _STRIDE);
|
||||
+
|
||||
+ if (!check_tile_register (&dst_ref, &dst))
|
||||
+ abort ();
|
||||
+}
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
index bdcfdbc88..1a2f3b83d 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
|
||||
@@ -82,6 +82,7 @@ extern void test_avxvnni (void) __attribute__((__target__("avxvnni")));
|
||||
extern void test_avx512fp16 (void) __attribute__((__target__("avx512fp16")));
|
||||
extern void test_amx_fp16 (void) __attribute__((__target__("amx-fp16")));
|
||||
extern void test_prefetchi (void) __attribute__((__target__("prefetchi")));
|
||||
+extern void test_amx_complex (void) __attribute__((__target__("amx-complex")));
|
||||
|
||||
extern void test_no_sgx (void) __attribute__((__target__("no-sgx")));
|
||||
extern void test_no_avx5124fmaps(void) __attribute__((__target__("no-avx5124fmaps")));
|
||||
@@ -165,6 +166,7 @@ extern void test_no_avxvnni (void) __attribute__((__target__("no-avxvnni")));
|
||||
extern void test_no_avx512fp16 (void) __attribute__((__target__("no-avx512fp16")));
|
||||
extern void test_no_amx_fp16 (void) __attribute__((__target__("no-amx-fp16")));
|
||||
extern void test_no_prefetchi (void) __attribute__((__target__("no-prefetchi")));
|
||||
+extern void test_no_amx_complex (void) __attribute__((__target__("no-amx-complex")));
|
||||
|
||||
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 9ab4a7e0c..d2aadd506 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512bw -mavx512dq -mavx512vl -mavx512vbmi -mavx512vbmi2 -mavx512ifma -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mamx-fp16" } */
|
||||
+/* { 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512bw -mavx512dq -mavx512vl -mavx512vbmi -mavx512vbmi2 -mavx512ifma -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mamx-fp16 -mamx-complex" } */
|
||||
|
||||
#include <x86intrin.h>
|
||||
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c b/gcc/testsuite/gcc.target/i386/sse-13.c
|
||||
index db7c0fc7a..c39382836 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vbmi2 -mavx512ifma -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi" } */
|
||||
+/* { 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vbmi2 -mavx512ifma -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mavx512vp2intersect -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mavx512bitalg -mpconfig -mwbnoinvd -mavx512bf16 -menqcmd -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mprefetchi -mamx-complex" } */
|
||||
/* { dg-add-options bind_pic_locally } */
|
||||
|
||||
#include <mm_malloc.h>
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c b/gcc/testsuite/gcc.target/i386/sse-14.c
|
||||
index eaa1a8d81..c34ac1aec 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -mavx512vl -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16" } */
|
||||
+/* { 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 -mavx512f -mavx512er -mavx512cd -mavx512pf -msha -mprefetchwt1 -mxsavec -mxsaves -mclflushopt -mavx512dq -mavx512bw -mavx512vl -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx5124fmaps -mavx5124vnniw -mavx512vpopcntdq -mclwb -mmwaitx -mclzero -mpku -msgx -mrdpid -mgfni -mpconfig -mwbnoinvd -mavx512vl -mavx512bf16 -menqcmd -mavx512vp2intersect -mserialize -mtsxldtrk -mamx-tile -mamx-int8 -mamx-bf16 -mkl -mwidekl -mavxvnni -mavx512fp16 -mamx-fp16 -mamx-complex" } */
|
||||
/* { dg-add-options bind_pic_locally } */
|
||||
|
||||
#include <mm_malloc.h>
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c b/gcc/testsuite/gcc.target/i386/sse-22.c
|
||||
index 19afe639d..c3667b829 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/sse-22.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/sse-22.c
|
||||
@@ -103,7 +103,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,avx512f,avx512er,avx512cd,avx512pf,sha,prefetchwt1,avx512vl,avx512bw,avx512dq,avx512vbmi,avx512vbmi2,avx512ifma,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,gfni,avx512bitalg,avx512bf16,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16")
|
||||
+#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,avx512f,avx512er,avx512cd,avx512pf,sha,prefetchwt1,avx512vl,avx512bw,avx512dq,avx512vbmi,avx512vbmi2,avx512ifma,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,gfni,avx512bitalg,avx512bf16,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16,amx-complex")
|
||||
#endif
|
||||
|
||||
/* Following intrinsics require immediate arguments. They
|
||||
@@ -220,7 +220,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,avx512f,avx512er,avx512cd,avx512pf,sha,avx512vl,avx512bw,avx512dq,avx512ifma,avx512vbmi,avx512vbmi2,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,gfni,avx512bitalg,avx512bf16,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16")
|
||||
+#pragma GCC target ("avx,avx2,rdrnd,fsgsbase,f16c,rtm,avx512f,avx512er,avx512cd,avx512pf,sha,avx512vl,avx512bw,avx512dq,avx512ifma,avx512vbmi,avx512vbmi2,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,gfni,avx512bitalg,avx512bf16,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16,amx-complex")
|
||||
#endif
|
||||
#include <immintrin.h>
|
||||
test_1 (_cvtss_sh, unsigned short, float, 1)
|
||||
diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c b/gcc/testsuite/gcc.target/i386/sse-23.c
|
||||
index 741694e87..756b6eb9c 100644
|
||||
--- a/gcc/testsuite/gcc.target/i386/sse-23.c
|
||||
+++ b/gcc/testsuite/gcc.target/i386/sse-23.c
|
||||
@@ -843,6 +843,6 @@
|
||||
#define __builtin_ia32_vpclmulqdq_v2di(A, B, C) __builtin_ia32_vpclmulqdq_v2di(A, B, 1)
|
||||
#define __builtin_ia32_vpclmulqdq_v8di(A, B, C) __builtin_ia32_vpclmulqdq_v8di(A, B, 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,avx512f,avx512er,avx512cd,avx512pf,sha,prefetchwt1,xsavec,xsaves,clflushopt,avx512bw,avx512dq,avx512vl,avx512vbmi,avx512ifma,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,avx512vbmi2,vpclmulqdq,avx512bitalg,pconfig,wbnoinvd,avx512bf16,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16,prefetchi")
|
||||
+#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,avx512f,avx512er,avx512cd,avx512pf,sha,prefetchwt1,xsavec,xsaves,clflushopt,avx512bw,avx512dq,avx512vl,avx512vbmi,avx512ifma,avx5124fmaps,avx5124vnniw,avx512vpopcntdq,clwb,mwaitx,clzero,pku,sgx,rdpid,gfni,avx512vbmi2,vpclmulqdq,avx512bitalg,pconfig,wbnoinvd,avx512bf16,enqcmd,avx512vp2intersect,serialize,tsxldtrk,amx-tile,amx-int8,amx-bf16,kl,widekl,avxvnni,avx512fp16,amx-fp16,prefetchi,amx-complex")
|
||||
|
||||
#include <x86intrin.h>
|
||||
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
|
||||
index 0d83c780c..d404058fd 100644
|
||||
--- a/gcc/testsuite/lib/target-supports.exp
|
||||
+++ b/gcc/testsuite/lib/target-supports.exp
|
||||
@@ -9421,6 +9421,17 @@ proc check_effective_target_avxvnni { } {
|
||||
} "-mavxvnni" ]
|
||||
}
|
||||
|
||||
+# Return 1 if amx-complex instructions can be compiled.
|
||||
+proc check_effective_target_amx_complex { } {
|
||||
+ return [check_no_compiler_messages amx_complex object {
|
||||
+ void
|
||||
+ foo ()
|
||||
+ {
|
||||
+ __asm__ volatile ("tcmmimfp16ps\t%%tmm1, %%tmm2, %%tmm3" ::);
|
||||
+ }
|
||||
+ } "-mamx-complex" ]
|
||||
+}
|
||||
+
|
||||
# Return 1 if sse instructions can be compiled.
|
||||
proc check_effective_target_sse { } {
|
||||
return [check_no_compiler_messages sse object {
|
||||
--
|
||||
2.28.0.windows.1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user