aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.6/gcc/testsuite/gcc.target/i386
diff options
context:
space:
mode:
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.h6
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/avx-check.h4
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/avx-os-support.h10
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/builtin_target.c61
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/movdi-rex64.c11
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pclmul-avx-check.h6
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr48721.c51
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr49866.c23
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr49920.c23
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr50202.c15
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr50712.c33
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr50788.c10
-rw-r--r--gcc-4.6/gcc/testsuite/gcc.target/i386/pr51393.c22
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 ();
+}