1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-require-effective-target sse4a } */
3 /* { dg-options "-O2 -msse4a" } */
6 #include "../../gcc.dg/i386-cpuid.h"
8 static void sse4a_test (void);
19 unsigned long cpu_facilities;
21 cpu_facilities = i386_extended_cpuid_ecx ();
23 /* Run SSE4a test only if host has SSE4a support. */
24 if ((cpu_facilities & bit_SSE4a))
31 sse4a_test_extrq (long long in)
34 long long index_length, pad;
36 index_length = 0x0000000000000810LL;
38 v1 = _mm_set_epi64x (pad, in);
39 v2 = _mm_set_epi64x (pad, index_length);
40 v_out.vec = _mm_extract_si64 (v1, v2);
45 sse4a_test_extrqi (long long in)
50 v1 = _mm_set_epi64x (pad, in);
51 v_out.vec = _mm_extracti_si64 (v1, (unsigned int) 0x10,(unsigned int) 0x08);
55 static chk (long long i1, long long i2)
63 long long vals_in[5] =
72 long long vals_out[5] =
88 for (i = 0; i < 5; i += 1)
90 out = sse4a_test_extrq (vals_in[i]);
91 fail += chk(out, vals_out[i]);
93 out = sse4a_test_extrqi (vals_in[i]);
94 fail += chk(out, vals_out[i]);