diff options
Diffstat (limited to 'gcc-4.6/gcc/testsuite/gcc.target/i386')
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/aes-avx-check.h | 6 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h | 4 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/avx-os-support.h | 10 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/builtin_target.c | 61 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/movdi-rex64.c | 11 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h | 6 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr48721.c | 51 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr49866.c | 23 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr49920.c | 23 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr50202.c | 15 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr50712.c | 33 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr50788.c | 10 | ||||
-rw-r--r-- | gcc-4.6/gcc/testsuite/gcc.target/i386/pr51393.c | 22 |
13 files changed, 270 insertions, 5 deletions
diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/aes-avx-check.h b/gcc-4.6/gcc/testsuite/gcc.target/i386/aes-avx-check.h index 36a038e..f2a4ead 100644 --- a/gcc-4.6/gcc/testsuite/gcc.target/i386/aes-avx-check.h +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/aes-avx-check.h @@ -3,6 +3,7 @@ #endif #include <stdlib.h> #include "cpuid.h" +#include "avx-os-support.h" static void aes_avx_test (void); @@ -22,8 +23,9 @@ main () return 0; /* Run AES + AVX test only if host has AES + AVX support. */ - if ((ecx & (bit_AVX | bit_OSXSAVE | bit_AES)) - == (bit_AVX | bit_OSXSAVE | bit_AES)) + if (((ecx & (bit_AVX | bit_OSXSAVE | bit_AES)) + == (bit_AVX | bit_OSXSAVE | bit_AES)) + && avx_os_support ()) { do_test (); #ifdef DEBUG diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h b/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h index b15584a..7ddca9d 100644 --- a/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h @@ -1,6 +1,7 @@ #include <stdlib.h> #include "cpuid.h" #include "m256-check.h" +#include "avx-os-support.h" static void avx_test (void); @@ -20,7 +21,8 @@ main () return 0; /* Run AVX test only if host has AVX support. */ - if ((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE)) + if (((ecx & (bit_AVX | bit_OSXSAVE)) == (bit_AVX | bit_OSXSAVE)) + && avx_os_support ()) { do_test (); #ifdef DEBUG diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-os-support.h b/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-os-support.h new file mode 100644 index 0000000..21d332f --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/avx-os-support.h @@ -0,0 +1,10 @@ +/* Check if the OS supports executing AVX instructions. */ + +static int +avx_os_support (void) +{ + unsigned int eax, edx; + + __asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0)); + return (eax & 6) == 6; +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/builtin_target.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/builtin_target.c new file mode 100644 index 0000000..fc1014f --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/builtin_target.c @@ -0,0 +1,61 @@ +/* This test checks if the __builtin_cpu_* calls are recognized. */ + +/* { dg-do run } */ + +int +fn1 () +{ + if (__builtin_cpu_supports_cmov () < 0) + return -1; + if (__builtin_cpu_supports_mmx () < 0) + return -1; + if (__builtin_cpu_supports_popcount () < 0) + return -1; + if (__builtin_cpu_supports_sse () < 0) + return -1; + if (__builtin_cpu_supports_sse2 () < 0) + return -1; + if (__builtin_cpu_supports_sse3 () < 0) + return -1; + if (__builtin_cpu_supports_ssse3 () < 0) + return -1; + if (__builtin_cpu_supports_sse4_1 () < 0) + return -1; + if (__builtin_cpu_supports_sse4_2 () < 0) + return -1; + if (__builtin_cpu_is_amd () < 0) + return -1; + if (__builtin_cpu_is_intel () < 0) + return -1; + if (__builtin_cpu_is_intel_atom () < 0) + return -1; + if (__builtin_cpu_is_intel_core2 () < 0) + return -1; + if (__builtin_cpu_is_intel_corei7 () < 0) + return -1; + if (__builtin_cpu_is_intel_corei7_nehalem () < 0) + return -1; + if (__builtin_cpu_is_intel_corei7_westmere () < 0) + return -1; + if (__builtin_cpu_is_intel_corei7_sandybridge () < 0) + return -1; + if (__builtin_cpu_is_amdfam10 () < 0) + return -1; + if (__builtin_cpu_is_amdfam10_barcelona () < 0) + return -1; + if (__builtin_cpu_is_amdfam10_shanghai () < 0) + return -1; + if (__builtin_cpu_is_amdfam10_istanbul () < 0) + return -1; + if (__builtin_cpu_is_amdfam15_bdver1 () < 0) + return -1; + if (__builtin_cpu_is_amdfam15_bdver2 () < 0) + return -1; + + return 0; +} + +int main () +{ + return fn1 (); +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/movdi-rex64.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/movdi-rex64.c new file mode 100644 index 0000000..c910202 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/movdi-rex64.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-fPIE" } */ + +char *strcpy (char *dest, const char *src); + +static __thread char buffer[25]; +const char * error_message (void) +{ + strcpy (buffer, "Unknown code "); + return 0; +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h b/gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h index 750e25c..5eed2e2 100644 --- a/gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h @@ -3,6 +3,7 @@ #endif #include <stdlib.h> #include "cpuid.h" +#include "avx-os-support.h" static void pclmul_avx_test (void); @@ -22,8 +23,9 @@ main () return 0; /* Run PCLMUL + AVX test only if host has PCLMUL + AVX support. */ - if ((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL)) - == (bit_AVX | bit_OSXSAVE | bit_PCLMUL)) + if (((ecx & (bit_AVX | bit_OSXSAVE | bit_PCLMUL)) + == (bit_AVX | bit_OSXSAVE | bit_PCLMUL)) + && avx_os_support ()) { do_test (); #ifdef DEBUG diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr48721.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr48721.c new file mode 100644 index 0000000..f37a169 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr48721.c @@ -0,0 +1,51 @@ +/* PR rtl-optimization/48721 */ +/* { dg-do compile } */ +/* { dg-options "-O -foptimize-sibling-calls -fsched2-use-superblocks -fschedule-insns2 -mtune=core2" } */ + +extern unsigned char a[]; +extern int b[], d[], e[], f[], g[], *h[], m[], *n[], o[]; +extern char c[]; + +struct S +{ + unsigned char s1; + int s2, s3, s4, s5, s6, s7, s8; +}; + +__attribute__((noinline, noclone)) int +foo (int x) +{ + return 0; +} + +int +bar (int x, struct S *y) +{ + int z; + switch (x) + { + case 1: + case 2: + { + int t2, t4, t5, t6, t7, t8; + z = o[y->s8 * 6]; + t8 = *n[m[x] * 5]; + t4 = *h[y->s7]; + t7 = z; + z = g[f[x] + y->s6]; + t6 = e[y->s5]; + t5 = d[c[x] + y->s3 * 17]; + if (z) + t2 = b[z]; + if (a[z] != y->s1) + return foo (x); + y->s8 = t8; + y->s4 = t4; + y->s7 = t7; + y->s6 = t6; + y->s5 = t5; + y->s2 = t2; + } + } + return 0; +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49866.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49866.c new file mode 100644 index 0000000..823305d --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49866.c @@ -0,0 +1,23 @@ +/* PR target/49866 */ +/* { dg-do assemble } */ +/* { dg-options "-O2 -mcmodel=large" { target lp64 } } */ + +void fn (void *, int, int); +int fn2 (void); +void baz (int); + +static void +foo (void *x, int y) +{ + int i; + for (i = 0; i < y; i++) + fn (x, fn2 (), i); +} + +void +bar (int u, int v, int w, void *x) +{ + baz (u); + foo (x, w); + baz (u); +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49920.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49920.c new file mode 100644 index 0000000..416e7a4 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr49920.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-require-effective-target ilp32 } */ + +typedef __SIZE_TYPE__ size_t; +extern void *malloc (size_t); + +register unsigned int MR_mr0 asm ("esi"); +register unsigned int MR_mr1 asm ("edi"); + +void ml_backend__ml_closure_gen_module11 (void) +{ + unsigned int MR_tempr1, MR_tempr2, MR_tempr3; + + MR_tempr1 = (unsigned int)((char *) malloc (sizeof (unsigned int)) + 4); + MR_tempr3 = ((unsigned int *) MR_mr0)[0]; + + ((unsigned int *) (MR_tempr1 - 4))[0] = MR_tempr3; + + MR_tempr2 = (unsigned int)((char *) malloc (2 * sizeof (unsigned int))); + + ((unsigned int *) MR_tempr2)[1] = MR_tempr1; +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50202.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50202.c new file mode 100644 index 0000000..2023ec8 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50202.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-dse -fno-dce -msse4" } */ +/* { dg-require-effective-target sse4 } */ + +typedef char __v16qi __attribute__ ((__vector_size__ (16))); + +__v16qi v; +int i; + +void +foo (void) +{ + i = __builtin_ia32_pcmpistri128 (v, v, 255); + i = 255; +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50712.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50712.c new file mode 100644 index 0000000..f08a944 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50712.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O2" } */ + +typedef __builtin_va_list __va_list; +typedef __va_list __gnuc_va_list; +typedef __gnuc_va_list va_list; +struct MSVCRT__iobuf { }; +typedef struct MSVCRT__iobuf MSVCRT_FILE; +typedef union _printf_arg { } printf_arg; +MSVCRT_FILE MSVCRT__iob[20]; +int pf_print_a (va_list *); +int __attribute__((__cdecl__)) +MSVCRT_vfprintf_s(MSVCRT_FILE* file, const char *format, va_list valist) +{ + if(!((file != ((void *)0)) + || (MSVCRT__invalid_parameter(((void *)0), ((void *)0), + ((void *)0), 0, 0),0))) + return -1; + return pf_printf_a(&valist); +} +int __attribute__((__cdecl__)) +MSVCRT_vprintf_s(const char *format, va_list valist) +{ + return MSVCRT_vfprintf_s((MSVCRT__iob+1),format,valist); +} +int __attribute__((__cdecl__)) +MSVCRT_fprintf_s(MSVCRT_FILE* file, const char *format, ...) +{ + va_list valist; + va_start (valist, format); + return MSVCRT_vfprintf_s(file, format, valist); +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50788.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50788.c new file mode 100644 index 0000000..29a1963 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr50788.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mavx -fpeel-loops -fstack-protector-all" } */ + +typedef long long __m256i __attribute__ ((__vector_size__ (32))); +typedef double __m256d __attribute__ ((__vector_size__ (32))); + +__m256d foo (__m256d *__P, __m256i __M) +{ + return __builtin_ia32_maskloadpd256 ( __P, __M); +} diff --git a/gcc-4.6/gcc/testsuite/gcc.target/i386/pr51393.c b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr51393.c new file mode 100644 index 0000000..ac16739 --- /dev/null +++ b/gcc-4.6/gcc/testsuite/gcc.target/i386/pr51393.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-require-effective-target avx } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O -mavx" } */ + +#include "avx-check.h" +#include <immintrin.h> + +static void +__attribute__((noinline)) +avx_test (void) +{ + long long in = 0x800000000ll; + long long out; + + __m256i zero = _mm256_setzero_si256(); + __m256i tmp = _mm256_insert_epi64 (zero, in, 0); + out = _mm256_extract_epi64(tmp, 0); + + if (in != out) + abort (); +} |