PR target/44159
* gcc.target/i386/abi-2.c: Check sysv abi here.
* gcc.target/i386/aes-avx-check.h: Call test in noinline
function to avoid failures by different ABIs.
* gcc.target/i386/aes-check.h: Likewise.
* gcc.target/i386/avx-check.h: Likewise.
* gcc.target/i386/fma4-check.h: Likewise.
* gcc.target/i386/mmx-3dnow-check.h: Likewise.
* gcc.target/i386/mmx-check.h: Likewise.
* gcc.target/i386/pclmul-avx-check.h: Likewise.
* gcc.target/i386/pclmul-check.h: Likewise.
* gcc.target/i386/sse-check.h: Likewise.
* gcc.target/i386/sse2-check.h: Likewise.
* gcc.target/i386/sse3-check.h: Likewise.
* gcc.target/i386/sse4_1-check.h: Likewise.
* gcc.target/i386/sse4_2-check.h: Likewise.
* gcc.target/i386/sse4a-check.h: Likewise.
* gcc.target/i386/ssse3-check.h: Likewise.
* gcc.target/i386/xop-check.h: Likewise.
* gcc.target/i386/pr27971.c: Fix for LLP64.
* gcc.target/i386/pr39139.c: Likewise.
* gcc.target/i386/pr39315-check.c: Likewise.
* gcc.target/i386/vararg-1.c: Likewise.
* gcc.target/i386/vararg-2.c: Likewise.
Additional add dg-compile to avoid failure due
missing foo symbol.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160363
138bc75d-0d04-0410-961f-
82ee72b054a4
2010-06-07 Kai Tietz <kai.tietz@onevision.com>
+ PR target/44159
+ * gcc.target/i386/abi-2.c: Check sysv abi here.
+ * gcc.target/i386/aes-avx-check.h: Call test in noinline
+ function to avoid failures by different ABIs.
+ * gcc.target/i386/aes-check.h: Likewise.
+ * gcc.target/i386/avx-check.h: Likewise.
+ * gcc.target/i386/fma4-check.h: Likewise.
+ * gcc.target/i386/mmx-3dnow-check.h: Likewise.
+ * gcc.target/i386/mmx-check.h: Likewise.
+ * gcc.target/i386/pclmul-avx-check.h: Likewise.
+ * gcc.target/i386/pclmul-check.h: Likewise.
+ * gcc.target/i386/sse-check.h: Likewise.
+ * gcc.target/i386/sse2-check.h: Likewise.
+ * gcc.target/i386/sse3-check.h: Likewise.
+ * gcc.target/i386/sse4_1-check.h: Likewise.
+ * gcc.target/i386/sse4_2-check.h: Likewise.
+ * gcc.target/i386/sse4a-check.h: Likewise.
+ * gcc.target/i386/ssse3-check.h: Likewise.
+ * gcc.target/i386/xop-check.h: Likewise.
+ * gcc.target/i386/pr27971.c: Fix for LLP64.
+ * gcc.target/i386/pr39139.c: Likewise.
+ * gcc.target/i386/pr39315-check.c: Likewise.
+ * gcc.target/i386/vararg-1.c: Likewise.
+ * gcc.target/i386/vararg-2.c: Likewise.
+ Additional add dg-compile to avoid failure due
+ missing foo symbol.
+
* gcc.dg/compound-literal-1.c: Fix for llp64.
* gcc.dg/pr32370.c: Likewise.
* gcc.dg/pr37561.c: Likewise.
/* Make certain that we pass __m256i in the correct register for AVX. */
/* { dg-do compile } */
/* { dg-options "-O1 -mavx" } */
+/* { dg-options "-mabi=sysv -O1 -mavx" { target x86_64-*-mingw* } } */
typedef long long __m256i __attribute__ ((__vector_size__ (32)));
__m256i foo (void) { return (__m256i){ 1, 2, 3, 4 }; }
static void aes_avx_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ aes_avx_test ();
+}
+
int
main ()
{
/* Run AES + AVX test only if host has AES + AVX support. */
if ((ecx & (bit_AVX | bit_AES)) == (bit_AVX | bit_AES))
{
- aes_avx_test ();
+ do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
static void aes_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ aes_test ();
+}
+
int
main ()
{
/* Run AES test only if host has AES support. */
if (ecx & bit_AES)
{
- aes_test ();
+ do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
static void avx_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ avx_test ();
+}
+
int
main ()
{
/* Run AVX test only if host has AVX support. */
if (ecx & bit_AVX)
{
- avx_test ();
+ do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
static void fma4_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ fma4_test ();
+}
+
int
main ()
{
/* Run FMA4 test only if host has FMA4 support. */
if (ecx & bit_FMA4)
- fma4_test ();
+ do_test ();
exit (0);
}
static void mmx_3dnow_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ mmx_3dnow_test ();
+}
+
int
main ()
{
/* Run 3DNow! test only if host has 3DNow! support. */
if (edx & bit_3DNOW)
- mmx_3dnow_test ();
+ do_test ();
return 0;
}
static void mmx_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ mmx_test ();
+}
+
int
main ()
{
/* Run MMX test only if host has MMX support. */
if (edx & bit_MMX)
- mmx_test ();
+ do_test ();
return 0;
}
static void pclmul_avx_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ pclmul_avx_test ();
+}
+
int
main ()
{
/* Run PCLMUL + AVX test only if host has PCLMUL + AVX support. */
if ((ecx & (bit_AVX | bit_PCLMUL)) == (bit_AVX | bit_PCLMUL))
{
- pclmul_avx_test ();
+ do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
static void pclmul_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ pclmul_test ();
+}
+
int
main ()
{
/* Run PCLMULQDQ test only if host has PCLMULQDQ support. */
if (ecx & bit_PCLMUL)
{
- pclmul_test ();
+ do_test ();
#ifdef DEBUG
printf ("PASSED\n");
#endif
unsigned array[4];
-unsigned foo(unsigned long x)
+#ifdef _WIN64
+__extension__ typedef unsigned long long TYPE;
+#else
+#define TYPE unsigned long
+#endif
+
+unsigned foo(TYPE x)
{
return array[(x>>2)&3ul];
}
# define SI_REG asm ("esi")
#endif
+__extension__ typedef __SIZE_TYPE__ size_t;
+
static inline int
foo (unsigned int x, void *y)
{
- register unsigned long r AX_REG;
- register unsigned long a1 DI_REG;
- register unsigned long a2 SI_REG;
- a1 = (unsigned long) x;
- a2 = (unsigned long) y;
+ register size_t r AX_REG;
+ register size_t a1 DI_REG;
+ register size_t a2 SI_REG;
+ a1 = (size_t) x;
+ a2 = (size_t) y;
asm volatile ("" : "=r" (r), "+r" (a1), "+r" (a2) : : "memory");
return (int) r;
}
-struct T { unsigned long t1, t2; unsigned int t3, t4, t5; };
+struct T { size_t t1, t2; unsigned int t3, t4, t5; };
int
-bar (unsigned long x, unsigned int y, unsigned long u, unsigned int v)
+bar (size_t x, unsigned int y, size_t u, unsigned int v)
{
long r;
struct T e = { .t1 = x, .t2 = u };
+/* { dg-compile } */
typedef float __m128 __attribute__ ((__vector_size__ (16)));
+__extension__ typedef __PTRDIFF_TYPE__ ptrdiff_t;
extern void foo (__m128 *);
extern void abort (void);
void
bar (__m128 *x, int align)
{
- if ((((__PTRDIFF_TYPE__) x) & (align - 1)) != 0)
+ if ((((ptrdiff_t) x) & (align - 1)) != 0)
abort ();
if (__builtin_memcmp (x, &y, sizeof (y)) != 0)
abort ();
static void sse_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse_test ();
+}
+
int
main ()
{
/* Run SSE test only if host has SSE support. */
if (edx & bit_SSE)
- sse_test ();
+ do_test ();
return 0;
}
static void sse2_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse2_test ();
+}
+
int
main ()
{
/* Run SSE2 test only if host has SSE2 support. */
if (edx & bit_SSE2)
- sse2_test ();
+ do_test ();
return 0;
}
static void sse3_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse3_test ();
+}
+
int
main ()
{
/* Run SSE3 test only if host has SSE3 support. */
if (ecx & bit_SSE3)
- sse3_test ();
+ do_test ();
return 0;
}
#define MASK 0x2
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse4_1_test ();
+}
+
int
main ()
{
/* Run SSE4.1 test only if host has SSE4.1 support. */
if (ecx & bit_SSE4_1)
- sse4_1_test ();
+ do_test ();
return 0;
}
static void sse4_2_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse4_2_test ();
+}
+
int
main ()
{
/* Run SSE4.2 test only if host has SSE4.2 support. */
if (ecx & bit_SSE4_2)
- sse4_2_test ();
+ do_test ();
return 0;
}
static void sse4a_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ sse4a_test ();
+}
+
int
main ()
{
/* Run SSE4a test only if host has SSE4a support. */
if (ecx & bit_SSE4a)
- sse4a_test ();
+ do_test ();
return 0;
}
static void ssse3_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ ssse3_test ();
+}
+
int
main ()
{
/* Run SSSE3 test only if host has SSSE3 support. */
if (ecx & bit_SSSE3)
- ssse3_test ();
+ do_test ();
return 0;
}
/* PR middle-end/36858 */
/* { dg-do run } */
/* { dg-options "-w" { target { lp64 } } } */
+/* { dg-options "-w" { target { llp64 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" { target { ilp32 } } } */
/* { dg-require-effective-target sse2 } */
/* PR middle-end/36859 */
/* { dg-do run } */
/* { dg-options "-w" { target { lp64 } } } */
+/* { dg-options "-w" { target { llp64 } } } */
/* { dg-options "-w -msse2 -mpreferred-stack-boundary=2" { target { ilp32 } } } */
/* { dg-require-effective-target sse2 } */
static void xop_test (void);
+static void
+__attribute__ ((noinline))
+do_test (void)
+{
+ xop_test ();
+}
+
int
main ()
{
/* Run XOP test only if host has XOP support. */
if (ecx & bit_XOP)
- xop_test ();
+ do_test ();
exit (0);
}