91 lines
2.5 KiB
C
91 lines
2.5 KiB
C
/* { dg-do run } */
|
|
/* { dg-options "-O3 -mpower8-vector" } */
|
|
/* { dg-require-effective-target p8vector_hw } */
|
|
|
|
#define NO_WARN_X86_INTRINSICS 1
|
|
#include <mmintrin.h>
|
|
#include "mmx-check.h"
|
|
|
|
#ifndef TEST
|
|
#define TEST mmx_test
|
|
#endif
|
|
|
|
static void
|
|
__attribute__ ((noinline))
|
|
check_packs_pu16 (unsigned long long int src1, unsigned long long int src2,
|
|
unsigned long long int res_ref)
|
|
{
|
|
unsigned long long int res;
|
|
|
|
res = (unsigned long long int) _mm_packs_pu16 ((__m64 ) src1, (__m64 ) src2);
|
|
|
|
if (res != res_ref)
|
|
abort ();
|
|
}
|
|
|
|
static void
|
|
__attribute__ ((noinline))
|
|
check_packs_pi16 (unsigned long long int src1, unsigned long long int src2,
|
|
unsigned long long int res_ref)
|
|
{
|
|
unsigned long long int res;
|
|
|
|
res = (unsigned long long int) _mm_packs_pi16 ((__m64 ) src1, (__m64 ) src2);
|
|
|
|
|
|
if (res != res_ref)
|
|
abort ();
|
|
}
|
|
|
|
static void
|
|
__attribute__ ((noinline))
|
|
check_packs_pi32 (unsigned long long int src1, unsigned long long int src2,
|
|
unsigned long long int res_ref)
|
|
{
|
|
unsigned long long int res;
|
|
|
|
res = (unsigned long long int) _mm_packs_pi32 ((__m64 ) src1, (__m64 ) src2);
|
|
|
|
if (res != res_ref)
|
|
abort ();
|
|
}
|
|
|
|
static unsigned long long int src1[] =
|
|
{ 0xffff0000fffe0000UL, 0x0001000000020000UL, 0xfffffffffffffffeUL,
|
|
0x0000000100000002UL, 0x0001000200030004UL, 0xfffffffefffdfffcUL,
|
|
0x0100020003000400UL, 0xff00fe01fe02fe03UL };
|
|
|
|
static unsigned long long int src2[] =
|
|
{ 0xfffffffdfffffffcUL, 0x0000000200000003UL, 0xfffffffdfffffffcUL,
|
|
0x0000000300000004UL, 0x0005000600070008UL, 0xfffbfffafff9fff8UL,
|
|
0x0005000600070008UL, 0xfffbfffafff9fff8UL };
|
|
|
|
static unsigned long long int res_pi16[] =
|
|
{ 0xfffdfffcff00fe00UL, 0x0002000301000200UL, 0xfffdfffcfffffffeUL,
|
|
0x0003000400010002UL, 0x0506070801020304UL, 0xfbfaf9f8fffefdfcUL,
|
|
0x050607087f7f7f7fUL, 0xfbfaf9f880808080UL };
|
|
|
|
static unsigned long long int res_pi32[] =
|
|
{ 0xfffdfffc80008000UL, 0x000200037fff7fffUL, 0xfffdfffcfffffffeUL,
|
|
0x0003000400010002UL, 0x7fff7fff7fff7fffUL, 0x80008000fffe8000UL,
|
|
0x7fff7fff7fff7fffUL, 0x8000800080008000UL };
|
|
|
|
static unsigned long long int res_pu16[] =
|
|
{ 0x0000000000000000UL, 0x0002000301000200UL, 0x0000000000000000UL,
|
|
0x0003000400010002UL, 0x0506070801020304UL, 0x000000000000000UL,
|
|
0x5060708ffffffffUL, 0x0000000000000000UL };
|
|
|
|
static void
|
|
TEST ()
|
|
{
|
|
long i;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
check_packs_pu16 (src1[i], src2[i], res_pu16[i]);
|
|
check_packs_pi16 (src1[i], src2[i], res_pi16[i]);
|
|
check_packs_pi32 (src1[i], src2[i], res_pi32[i]);
|
|
}
|
|
}
|
|
|