diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/i386')
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" } } */ |