summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/i386')
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512-check.h113
-rw-r--r--gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512bw-check.h50
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512cd-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512dq-check.h50
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512er-check.h49
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-check.h49
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-helper.h64
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512f-pr71559.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512ifma-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vbmi-check.h46
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vl-check.h51
-rw-r--r--gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h47
-rw-r--r--gcc/testsuite/gcc.target/i386/funcspec-56.inc2
-rw-r--r--gcc/testsuite/gcc.target/i386/mpx/pr79987.c5
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-3.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/naked-4.c17
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79793-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79793-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81213.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81639.c12
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81641.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81644.c15
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81654.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-1.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-2.c14
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-3.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-4.c11
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-5.c20
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-6.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr81736-7.c13
-rw-r--r--gcc/testsuite/gcc.target/i386/stack-prot-guard.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/stack-prot-sym.c6
35 files changed, 337 insertions, 586 deletions
diff --git a/gcc/testsuite/gcc.target/i386/avx512-check.h b/gcc/testsuite/gcc.target/i386/avx512-check.h
new file mode 100644
index 00000000000..bfe14960100
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx512-check.h
@@ -0,0 +1,113 @@
+#include <stdlib.h>
+#include "cpuid.h"
+#include "m512-check.h"
+#include "avx512f-os-support.h"
+
+#ifndef DO_TEST
+#define DO_TEST do_test
+#ifdef AVX512VL
+static void test_256 (void);
+static void test_128 (void);
+#else
+static void test_512 (void);
+#endif
+
+__attribute__ ((noinline))
+static void
+do_test (void)
+{
+#ifdef AVX512VL
+ test_256 ();
+ test_128 ();
+#else
+ test_512 ();
+#endif
+}
+#endif
+
+int
+main ()
+{
+ unsigned int eax, ebx, ecx, edx;
+
+ if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
+ goto skipped;
+
+ /* Run AVX512F test only if host has AVX512F support. */
+ if (!(ecx & bit_OSXSAVE))
+ goto skipped;
+
+ if (__get_cpuid_max (0, NULL) < 7)
+ goto skipped;
+
+ __cpuid_count (7, 0, eax, ebx, ecx, edx);
+
+ if (!(ebx & bit_AVX512F))
+ goto skipped;
+
+#ifdef AVX512VL
+ if (!(ebx & bit_AVX512VL))
+ goto skipped;
+#endif
+
+#ifdef AVX512ER
+ if (!(ebx & bit_AVX512ER))
+ goto skipped;
+#endif
+
+#ifdef AVX512CD
+ if (!(ebx & bit_AVX512CD))
+ goto skipped;
+#endif
+
+#ifdef AVX512DQ
+ if (!(ebx & bit_AVX512DQ))
+ goto skipped;
+#endif
+
+#ifdef AVX512BW
+ if (!(ebx & bit_AVX512BW))
+ goto skipped;
+#endif
+
+#ifdef AVX512IFMA
+ if (!(ebx & bit_AVX512IFMA))
+ goto skipped;
+#endif
+
+#ifdef AVX512VBMI
+ if (!(ecx & bit_AVX512VBMI))
+ goto skipped;
+#endif
+
+#ifdef AVX5124FMAPS
+ if (!(edx & bit_AVX5124FMAPS))
+ goto skipped;
+#endif
+
+#ifdef AVX5124VNNIW
+ if (!(edx & bit_AVX5124VNNIW))
+ goto skipped;
+#endif
+
+#ifdef AVX512VPOPCNTDQ
+ if (!(ecx & bit_AVX512VPOPCNTDQ))
+ goto skipped;
+#endif
+
+ if (!avx512f_os_support ())
+ goto skipped;
+
+ DO_TEST ();
+
+#ifdef DEBUG
+ printf ("PASSED\n");
+#endif
+ return 0;
+
+skipped:
+#ifdef DEBUG
+ printf ("SKIPPED\n");
+#endif
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h b/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h
deleted file mode 100644
index 13ea70b0a8d..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx5124fmaps-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx5124fmaps_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx5124fmaps_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_4FMAPS test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((edx & bit_AVX5124FMAPS) == bit_AVX5124FMAPS))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h b/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h
deleted file mode 100644
index 27d35a57490..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx5124vnniw-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx5124vnniw_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx5124vnniw_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_4VNNIW test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((edx & bit_AVX5124VNNIW) == bit_AVX5124VNNIW))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512bw-check.h b/gcc/testsuite/gcc.target/i386/avx512bw-check.h
index d5288aaabd4..899a006363e 100644
--- a/gcc/testsuite/gcc.target/i386/avx512bw-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512bw-check.h
@@ -1,47 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512bw_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512bw_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512BW test only if host has AVX512BW support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512BW) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512BW
+#define avx512bw_test test_512
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512cd-check.h b/gcc/testsuite/gcc.target/i386/avx512cd-check.h
deleted file mode 100644
index fd0b9eb05d6..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512cd-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512cd_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512cd_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512CD) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512dq-check.h b/gcc/testsuite/gcc.target/i386/avx512dq-check.h
index 7955f48e912..1b728836731 100644
--- a/gcc/testsuite/gcc.target/i386/avx512dq-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512dq-check.h
@@ -1,47 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512dq_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512dq_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512DQ test only if host has AVX512DQ support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512DQ) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512DQ
+#define avx512dq_test test_512
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512er-check.h b/gcc/testsuite/gcc.target/i386/avx512er-check.h
index 06fc18a098b..eb44c2f7ade 100644
--- a/gcc/testsuite/gcc.target/i386/avx512er-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512er-check.h
@@ -1,46 +1,3 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512er_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512er_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512ER) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512ER
+#define avx512er_test test_512
+#include "avx512f-helper.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-check.h b/gcc/testsuite/gcc.target/i386/avx512f-check.h
index 811184b2fd7..b3bdd9a05c4 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512f-check.h
@@ -1,47 +1,2 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512f_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512f_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512F test only if host has AVX512F support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512F) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define avx512f_test test_512
+#include "avx512f-helper.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-helper.h b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
index ef4661a3453..72982f95aed 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-helper.h
+++ b/gcc/testsuite/gcc.target/i386/avx512f-helper.h
@@ -8,29 +8,7 @@
#ifndef AVX512F_HELPER_INCLUDED
#define AVX512F_HELPER_INCLUDED
-#if defined (AVX512F) && !defined (AVX512VL)
-#include "avx512f-check.h"
-#elif defined (AVX512ER) && !defined (AVX512VL)
-#include "avx512er-check.h"
-#elif defined (AVX512CD) && !defined (AVX512VL)
-#include "avx512cd-check.h"
-#elif defined (AVX512DQ) && !defined (AVX512VL)
-#include "avx512dq-check.h"
-#elif defined (AVX512BW) && !defined (AVX512VL)
-#include "avx512bw-check.h"
-#elif defined (AVX512IFMA) && !defined (AVX512VL)
-#include "avx512ifma-check.h"
-#elif defined (AVX512VBMI) && !defined (AVX512VL)
-#include "avx512vbmi-check.h"
-#elif defined (AVX5124FMAPS) && !defined (AVX512VL)
-#include "avx5124fmaps-check.h"
-#elif defined (AVX5124VNNIW) && !defined (AVX512VL)
-#include "avx5124vnniw-check.h"
-#elif defined (AVX512VPOPCNTDQ) && !defined (AVX512VL)
-#include "avx512vpopcntdq-check.h"
-#elif defined (AVX512VL)
-#include "avx512vl-check.h"
-#endif
+#include "avx512-check.h"
/* Macros expansion. */
#define CONCAT(a,b,c) a ## b ## c
@@ -112,46 +90,6 @@ MAKE_MASK_ZERO(i_uq, unsigned long long)
#ifndef AVX512VL
#define AVX512F_LEN 512
#define AVX512F_LEN_HALF 256
-void test_512 ();
-#endif
-
-void test_512 ();
-void test_256 ();
-void test_128 ();
-
-#if defined (AVX512F) && !defined (AVX512VL)
-void
-avx512f_test (void) { test_512 (); }
-#elif defined (AVX512CD) && !defined (AVX512VL)
-void
-avx512cd_test (void) { test_512 (); }
-#elif defined (AVX512ER) && !defined (AVX512VL)
-void
-avx512er_test (void) { test_512 (); }
-#elif defined (AVX512DQ) && !defined (AVX512VL)
-void
-avx512dq_test (void) { test_512 (); }
-#elif defined (AVX512BW) && !defined (AVX512VL)
-void
-avx512bw_test (void) { test_512 (); }
-#elif defined (AVX512IFMA) && !defined (AVX512VL)
-void
-avx512ifma_test (void) { test_512 (); }
-#elif defined (AVX512VBMI) && !defined (AVX512VL)
-void
-avx512vbmi_test (void) { test_512 (); }
-#elif defined (AVX5124FMAPS) && !defined (AVX512VL)
-void
-avx5124fmaps_test (void) { test_512 (); }
-#elif defined (AVX5124VNNIW) && !defined (AVX512VL)
-void
-avx5124vnniw_test (void) { test_512 (); }
-#elif defined (AVX512VPOPCNTDQ) && !defined (AVX512VL)
-void
-avx512vpopcntdq_test (void) { test_512 (); }
-#elif defined (AVX512VL)
-void
-avx512vl_test (void) { test_256 (); test_128 (); }
#endif
#endif /* AVX512F_HELPER_INCLUDED */
diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c b/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
index d78d86ac2f8..43dc236c410 100644
--- a/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
+++ b/gcc/testsuite/gcc.target/i386/avx512f-pr71559.c
@@ -3,6 +3,7 @@
/* { dg-options "-O2 -ftree-vectorize -mavx512f" } */
#include "avx512f-check.h"
+#undef TEST
#define PR71559_TEST avx512f_test
#include "sse2-pr71559.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx512ifma-check.h b/gcc/testsuite/gcc.target/i386/avx512ifma-check.h
deleted file mode 100644
index b90a4d55103..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512ifma-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512ifma_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512ifma_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512IFMA) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h b/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h
deleted file mode 100644
index 2c1f6259401..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512vbmi-check.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vbmi_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vbmi_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ecx & bit_AVX512VBMI) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/avx512vl-check.h b/gcc/testsuite/gcc.target/i386/avx512vl-check.h
index 29d984d03dd..9d02cc82c46 100644
--- a/gcc/testsuite/gcc.target/i386/avx512vl-check.h
+++ b/gcc/testsuite/gcc.target/i386/avx512vl-check.h
@@ -1,47 +1,4 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vl_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vl_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run avx512vl test only if host has avx512vl support. */
- if (ecx & bit_OSXSAVE)
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((ebx & bit_AVX512VL) && avx512f_os_support ())
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
+#define AVX512VL
+#define DO_TEST avx512vl_test
+static void DO_TEST (void);
+#include "avx512-check.h"
diff --git a/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h b/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h
deleted file mode 100644
index 179548bf8cb..00000000000
--- a/gcc/testsuite/gcc.target/i386/avx512vpopcntdq-check.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#include <stdlib.h>
-#include "cpuid.h"
-#include "m512-check.h"
-#include "avx512f-os-support.h"
-
-static void avx512vpopcntdq_test (void);
-
-static void __attribute__ ((noinline)) do_test (void)
-{
- avx512vpopcntdq_test ();
-}
-
-int
-main ()
-{
- unsigned int eax, ebx, ecx, edx;
-
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
-
- /* Run AVX512_VPOPCNTDQ test only if host has the support. */
- if ((ecx & bit_OSXSAVE) == (bit_OSXSAVE))
- {
- if (__get_cpuid_max (0, NULL) < 7)
- return 0;
-
- __cpuid_count (7, 0, eax, ebx, ecx, edx);
-
- if ((avx512f_os_support ()) && ((ecx & bit_AVX512VPOPCNTDQ) == bit_AVX512VPOPCNTDQ))
- {
- do_test ();
-#ifdef DEBUG
- printf ("PASSED\n");
-#endif
- return 0;
- }
-#ifdef DEBUG
- printf ("SKIPPED\n");
-#endif
- }
-#ifdef DEBUG
- else
- printf ("SKIPPED\n");
-#endif
-
- return 0;
-}
diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
index 14abf42b887..746c9cfc4e1 100644
--- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc
+++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc
@@ -99,7 +99,7 @@ extern void test_no_sha (void) __attribute__((__target__("no-sha")));
extern void test_no_pclmul (void) __attribute__((__target__("no-pclmul")));
extern void test_no_sse2 (void) __attribute__((__target__("no-sse2")));
extern void test_no_sse (void) __attribute__((__target__("no-sse")));
-extern void test_no_3dnowa (void) __attribute__((__target__("3dnowa")));
+extern void test_no_3dnowa (void) __attribute__((__target__("no-3dnowa")));
extern void test_no_3dnow (void) __attribute__((__target__("no-3dnow")));
extern void test_no_mmx (void) __attribute__((__target__("no-mmx")));
extern void test_no_rtm (void) __attribute__((__target__("no-rtm")));
diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr79987.c b/gcc/testsuite/gcc.target/i386/mpx/pr79987.c
new file mode 100644
index 00000000000..b3ebda95694
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/mpx/pr79987.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-fcheck-pointer-bounds -mmpx" } */
+
+extern void foo;
+void *bar = &foo; /* { dg-warning "taking address of expression of type .void." } */
diff --git a/gcc/testsuite/gcc.target/i386/naked-1.c b/gcc/testsuite/gcc.target/i386/naked-1.c
index 440dbe9ee7a..cf62bb1114f 100644
--- a/gcc/testsuite/gcc.target/i386/naked-1.c
+++ b/gcc/testsuite/gcc.target/i386/naked-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O0" } */
+/* { dg-options "-O0 -fno-pic" } */
/* Verify that __attribute__((naked)) produces a naked function
that does not use ret to return but traps at the end. */
diff --git a/gcc/testsuite/gcc.target/i386/naked-3.c b/gcc/testsuite/gcc.target/i386/naked-3.c
index 845300d6e4a..b3a17f635ee 100644
--- a/gcc/testsuite/gcc.target/i386/naked-3.c
+++ b/gcc/testsuite/gcc.target/i386/naked-3.c
@@ -1,17 +1,18 @@
/* { dg-do run { target *-*-linux* *-*-gnu* } } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O0" } */
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
-int data;
-
/* Verify that naked function traps at the end. */
void
__attribute__((naked, noinline, noclone))
-naked (void)
+#ifdef __i386__
+__attribute__((regparm(1)))
+#endif
+naked (int data)
{
if (data == 0x12345678)
return;
@@ -32,8 +33,7 @@ int main ()
s.sa_flags = 0;
sigaction (SIGILL, &s, NULL);
- data = 0x12345678;
- naked ();
+ naked (0x12345678);
abort ();
}
diff --git a/gcc/testsuite/gcc.target/i386/naked-4.c b/gcc/testsuite/gcc.target/i386/naked-4.c
new file mode 100644
index 00000000000..07b32424f5f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/naked-4.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O0" } */
+/* { dg-additional-options "-mregparm=3" { target ia32 } } */
+
+/* Verify that __attribute__((naked)) produces a naked function
+ that does not allocate stack slots for args. */
+extern void bar (int);
+
+int
+__attribute__((naked))
+foo (int a, int b, int c)
+{
+ bar (c);
+ asm volatile ("ret" :: "a" (b));
+}
+
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr79793-1.c b/gcc/testsuite/gcc.target/i386/pr79793-1.c
index a382fe9c5e2..1cc67a83ba3 100644
--- a/gcc/testsuite/gcc.target/i386/pr79793-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr79793-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
-/* { dg-options "-O2 -mgeneral-regs-only" } */
+/* { dg-options "-O2 -mgeneral-regs-only -mtune=generic" } */
void
__attribute__ ((interrupt))
diff --git a/gcc/testsuite/gcc.target/i386/pr79793-2.c b/gcc/testsuite/gcc.target/i386/pr79793-2.c
index f6ae5aed33a..e1e6463e120 100644
--- a/gcc/testsuite/gcc.target/i386/pr79793-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr79793-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
-/* { dg-options "-O2 -mgeneral-regs-only" } */
+/* { dg-options "-O2 -mgeneral-regs-only -mtune=generic" } */
typedef unsigned int uword_t __attribute__ ((mode (__word__)));
diff --git a/gcc/testsuite/gcc.target/i386/pr81213.c b/gcc/testsuite/gcc.target/i386/pr81213.c
new file mode 100644
index 00000000000..13e15d5fef0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81213.c
@@ -0,0 +1,19 @@
+/* PR ipa/81214. */
+/* { dg-do compile } */
+/* { dg-require-ifunc "" } */
+
+__attribute__((target_clones("avx","arch=slm","arch=core-avx2","default")))
+static int
+foo ()
+{
+ return -2;
+}
+
+int main()
+{
+ return foo();
+}
+
+/* { dg-final { scan-assembler "\t.globl\tfoo\\..*\\.ifunc" } } */
+/* { dg-final { scan-assembler "foo.resolver:" } } */
+/* { dg-final { scan-assembler "foo\\..*\\.ifunc, @gnu_indirect_function" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81639.c b/gcc/testsuite/gcc.target/i386/pr81639.c
new file mode 100644
index 00000000000..da2211532eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81639.c
@@ -0,0 +1,12 @@
+/* PR target/81639 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void b (void);
+
+void
+__attribute__ ((naked))
+a (void)
+{
+ b ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81641.c b/gcc/testsuite/gcc.target/i386/pr81641.c
new file mode 100644
index 00000000000..15da9ac26ef
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81641.c
@@ -0,0 +1,11 @@
+/* PR target/81641 */
+/* { dg-do assemble } */
+/* { dg-options "-O -masm=intel" } */
+/* { dg-require-effective-target masm_intel } */
+
+int test(void)
+{
+ int __seg_fs *f = (int __seg_fs *)16;
+ int __seg_gs *g = (int __seg_gs *)16;
+ return *f + *g;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81644.c b/gcc/testsuite/gcc.target/i386/pr81644.c
new file mode 100644
index 00000000000..61f94a409ff
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81644.c
@@ -0,0 +1,15 @@
+/* PR target/81644 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-additional-options "-mregparm=1" { target ia32 } } */
+
+void b (void);
+
+void
+__attribute__ ((naked))
+a (int z)
+{
+ if (z)
+ return;
+ b ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81654.c b/gcc/testsuite/gcc.target/i386/pr81654.c
new file mode 100644
index 00000000000..2a1a4b72f1e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81654.c
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mgeneral-regs-only" } */
+
+__attribute__((interrupt, naked))
+void
+fn (void *frame) /* { dg-error "not compatible" } */
+{
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-1.c b/gcc/testsuite/gcc.target/i386/pr81736-1.c
new file mode 100644
index 00000000000..92c7bc97a0d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+extern int i;
+
+int
+foo (void)
+{
+ return i;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-2.c b/gcc/testsuite/gcc.target/i386/pr81736-2.c
new file mode 100644
index 00000000000..a3720879937
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+int
+#ifndef __x86_64__
+__attribute__((regparm(3)))
+#endif
+foo (int i)
+{
+ return i;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-3.c b/gcc/testsuite/gcc.target/i386/pr81736-3.c
new file mode 100644
index 00000000000..c3bde7dd933
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-3.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+void
+foo (void)
+{
+ asm ("# " : : : "ebx");
+}
+
+/* Need to use a frame pointer. */
+/* { dg-final { scan-assembler "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-4.c b/gcc/testsuite/gcc.target/i386/pr81736-4.c
new file mode 100644
index 00000000000..25f50016a64
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-4.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+int
+foo (int i1, int i2, int i3, int i4, int i5, int i6, int i7)
+{
+ return i7;
+}
+
+/* Need to use a frame pointer. */
+/* { dg-final { scan-assembler "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-5.c b/gcc/testsuite/gcc.target/i386/pr81736-5.c
new file mode 100644
index 00000000000..e1602cf25ba
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-5.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer -mavx" } */
+
+typedef int v8si __attribute__ ((vector_size (32)));
+
+void
+#ifndef __x86_64__
+__attribute__((regparm(3)))
+#endif
+foo (v8si *out_start, v8si *out_end, v8si *regions)
+{
+ v8si base = regions[3];
+ *out_start = base;
+ *out_end = base;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
+/* Verify no dynamic realignment is performed. */
+/* { dg-final { scan-assembler-not "and\[^\n\r]*sp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-6.c b/gcc/testsuite/gcc.target/i386/pr81736-6.c
new file mode 100644
index 00000000000..6198574c8cc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-6.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+struct foo
+{
+ int head;
+} a;
+
+int
+bar (void)
+{
+ return a.head != 0;
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr81736-7.c b/gcc/testsuite/gcc.target/i386/pr81736-7.c
new file mode 100644
index 00000000000..f947886e642
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr81736-7.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-omit-frame-pointer" } */
+
+extern int foo (void);
+
+int
+bar (void)
+{
+ return foo ();
+}
+
+/* No need to use a frame pointer. */
+/* { dg-final { scan-assembler-not "%\[re\]bp" } } */
diff --git a/gcc/testsuite/gcc.target/i386/stack-prot-guard.c b/gcc/testsuite/gcc.target/i386/stack-prot-guard.c
new file mode 100644
index 00000000000..120ef3cf5c1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/stack-prot-guard.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-protector-all -mstack-protector-guard=tls -mstack-protector-guard-reg=gs -mstack-protector-guard-offset=0x3038" } */
+
+void f(void) { }
+
+/* { dg-final { scan-assembler "gs:12344" } } */
diff --git a/gcc/testsuite/gcc.target/i386/stack-prot-sym.c b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c
new file mode 100644
index 00000000000..7f63424c55f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/stack-prot-sym.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-protector-all -mstack-protector-guard=tls -mstack-protector-guard-reg=gs -mstack-protector-guard-symbol=my_guard" } */
+
+void f(void) { }
+
+/* { dg-final { scan-assembler "gs:my_guard" } } */