blob: be70ba2f24f91ba4d2b0ac4b108f27acb446996c [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -msse3 -fno-expensive-optimizations" } */
typedef double __m128d __attribute__ ((__vector_size__ (16)));
extern double p1[];
extern double p2[];
extern double ck[];
extern int n;
__attribute__((__noinline__, __noclone__)) int chk_pd (double *v1, double *v2)
{
return v2[n] != v1[n];
}
static inline void sse3_test_movddup_reg_subsume_ldsd (double *i1, double *r)
{
__m128d t1 = (__m128d){*i1, 0};
__m128d t2 = __builtin_ia32_shufpd (t1, t1, 0);
__builtin_ia32_storeupd (r, t2);
}
int sse3_test (void)
{
int i = 0;
int fail = 0;
for (; i < 80; i += 1)
{
ck[0] = p1[0];
fail += chk_pd (ck, p2);
sse3_test_movddup_reg_subsume_ldsd (p1, p2);
}
return fail;
}