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
9 #define CHECK_H "mmx-check.h"
19 #include <xmmintrin.h>
22 __attribute__((noinline
, unused
))
23 test (__m64 s1
, __m64 s2
)
25 return _mm_packs_pu16 (s1
, s2
);
29 saturate (signed short val
)
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)));
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)));
71 if (u
.as_m64
!= e
.as_m64
)