[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / mmx-packuswb-1.c
blob54c63f01f2270b4c1ee3180ea2446c7b03eb7014
1 /* { dg-do run } */
2 /* { dg-options "-O3 -mvsx" } */
3 /* { dg-additional-options "-mdejagnu-cpu=power8" { target { ! has_arch_pwr8 } } } */
4 /* { dg-require-effective-target p8vector_hw } */
6 #define NO_WARN_X86_INTRINSICS 1
8 #ifndef CHECK_H
9 #define CHECK_H "mmx-check.h"
10 #endif
12 #ifndef TEST
13 #define TEST mmx_test
14 #endif
16 #include CHECK_H
18 #include <mmintrin.h>
19 #include <xmmintrin.h>
21 static __m64
22 __attribute__((noinline, unused))
23 test (__m64 s1, __m64 s2)
25 return _mm_packs_pu16 (s1, s2);
28 static unsigned char
29 saturate (signed short val)
31 if (val > 255)
32 return 255;
33 else if (val < 0)
34 return 0;
35 else
36 return val;
39 static void
40 TEST (void)
42 __m64_union s1, s2;
43 __m64_union u;
44 __m64_union e;
45 int i, tmp;
47 s1.as_m64 = _mm_set_pi16 (1, 2, 3, 4);
48 s2.as_m64 = _mm_set_pi16 (-9, -10, -11, -12);
49 u.as_m64 = test (s1.as_m64, s2.as_m64);
51 #ifdef __LITTLE_ENDIAN__
52 e.as_m64 = _mm_set_pi8 (saturate (_mm_extract_pi16 (s2.as_m64, 3)),
53 saturate (_mm_extract_pi16 (s2.as_m64, 2)),
54 saturate (_mm_extract_pi16 (s2.as_m64, 1)),
55 saturate (_mm_extract_pi16 (s2.as_m64, 0)),
56 saturate (_mm_extract_pi16 (s1.as_m64, 3)),
57 saturate (_mm_extract_pi16 (s1.as_m64, 2)),
58 saturate (_mm_extract_pi16 (s1.as_m64, 1)),
59 saturate (_mm_extract_pi16 (s1.as_m64, 0)));
60 #else
61 e.as_m64 = _mm_set_pi8 (saturate (_mm_extract_pi16 (s1.as_m64, 3)),
62 saturate (_mm_extract_pi16 (s1.as_m64, 2)),
63 saturate (_mm_extract_pi16 (s1.as_m64, 1)),
64 saturate (_mm_extract_pi16 (s1.as_m64, 0)),
65 saturate (_mm_extract_pi16 (s2.as_m64, 3)),
66 saturate (_mm_extract_pi16 (s2.as_m64, 2)),
67 saturate (_mm_extract_pi16 (s2.as_m64, 1)),
68 saturate (_mm_extract_pi16 (s2.as_m64, 0)));
69 #endif
71 if (u.as_m64 != e.as_m64)
72 abort ();