1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-msse2" } */
3 /* { dg-require-effective-target sse2_runtime } */
5 typedef long long __m128i
__attribute__ ((__vector_size__ (16),
7 typedef int __v4si
__attribute__ ((__vector_size__ (16)));
8 typedef long long __v2di
__attribute__ ((__vector_size__ (16)));
9 typedef unsigned int uint32_t;
25 static inline a1xm128i
ssefunc( a1xm128i in
, a1xm128i k
)
28 ret
.m
= (__m128i
)__builtin_ia32_pxor128 ((__v2di
)in
.m
, (__v2di
)k
.m
);
32 static a4x32
caster( a4x32 c4x32
, a1xm128i k
)
35 if( sizeof(c4x32
) != sizeof(c1x128
) ) __builtin_abort();
36 __builtin_memcpy(&c1x128
, &c4x32
, sizeof(c1x128
));
37 c1x128
= ssefunc(c1x128
, k
);
38 __builtin_memcpy(&c4x32
, &c1x128
, sizeof(c4x32
));
52 e
->key
.m
= (__m128i
)(__v4si
){ 0, 0, 0, 0 };
59 uint32_t method( Engine
*e
)
63 e
->v
= caster(*incr(&e
->c
), e
->key
);
66 return e
->v
.v
[--e
->elem
];
73 if(method(&e4
)!=method(&e5
))