1 /* { dg-do run } */
2 /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */
3 /* { dg-additional-options "-mno-mmx" { target { ! ia32 } } } */
4
5 #include "sse2-check.h"
6
7 __attribute__((noinline, noclone))
8 static void
test_set(char i0,char i1,char i2,char i3,char i4,char i5,char i6,char i7,long long * r)9 test_set (char i0, char i1, char i2, char i3,
10 char i4, char i5, char i6, char i7, long long *r)
11 {
12 *(__m64 *) r = _mm_set_pi8 (i0, i1, i2, i3, i4, i5, i6, i7);
13 }
14
15 /* Routine to manually compute the results */
16 static void
compute_correct_result(char i0,char i1,char i2,char i3,char i4,char i5,char i6,char i7,long long * res_p)17 compute_correct_result (char i0, char i1, char i2, char i3,
18 char i4, char i5, char i6, char i7,
19 long long *res_p)
20 {
21 char *res = (char *) res_p;
22 res[0] = i7;
23 res[1] = i6;
24 res[2] = i5;
25 res[3] = i4;
26 res[4] = i3;
27 res[5] = i2;
28 res[6] = i1;
29 res[7] = i0;
30 }
31
32 static void
sse2_test(void)33 sse2_test (void)
34 {
35 char i0, i1, i2, i3, i4, i5, i6, i7;
36 long long r, ck;
37
38 /* Run the MMX tests */
39 i0 = 0x12;
40 i1 = 0x34;
41 i2 = 0x56;
42 i3 = 0x78;
43 i4 = 0x90;
44 i5 = 0xab;
45 i6 = 0xcd;
46 i7 = 0xef;
47 test_set (i0, i1, i2, i3, i4, i5, i6, i7, &r);
48 compute_correct_result (i0, i1, i2, i3, i4, i5, i6, i7, &ck);
49 if (ck != r)
50 abort ();
51 }
52