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_insert (long long in1, long long in2)
34 long long index_length, pad;
36 index_length = 0x0000000000000810LL;
38 v1 = _mm_set_epi64x (pad, in1);
39 v2 = _mm_set_epi64x (index_length, in2);
40 v_out.vec = _mm_insert_si64 (v1, v2);
45 sse4a_test_inserti (long long in1, long long in2)
50 v1 = _mm_set_epi64x (pad, in1);
51 v2 = _mm_set_epi64x (pad, in2);
52 v_out.vec = _mm_inserti_si64 (v1, v2, (unsigned int) 0x10, (unsigned int) 0x08);
56 static chk (long long i1, long long i2)
64 long long vals_in1[5] =
73 long long vals_in2[5] =
82 long long vals_out[5] =
98 for (i = 0; i < 5; i += 1)
100 out = sse4a_test_insert (vals_in1[i], vals_in2[i]);
101 fail += chk(out, vals_out[i]);
103 out = sse4a_test_inserti (vals_in1[i], vals_in2[i]);
104 fail += chk(out, vals_out[i]);