5919583.c   [plain text]


/* APPLE LOCAL file 5919583 */
/* { dg-do run { target i?86*-*-* } } */
/* { dg-options { -msse3 } } */
#include <stdio.h>
#include <emmintrin.h>

typedef union {
  char ary[16];
  __m128i vec;
} vectype;

vectype ref;

int __attribute__ ((__noinline__)) scare (vectype);
int __attribute__ ((__noinline__))
scare (vectype vec)
{
  int i;
  for (i=0; i<16; i++)
    if (vec.ary[i] != ref.ary[i])
      return -1;	/* fail */
  return 0;	/* pass */
}

int main( void )
{
  vectype v;

  ref.vec = (const __m128i) { 0x32100123456789ABULL, 0xFEDCBA987654ULL };
  v.vec = _mm_srli_si128( (const __m128i) { 0x0123456789ABCDEFULL, 0xFEDCBA9876543210ULL }, 2 );
  /*
  {
    int i;
    for( i = 0; i < 16; i++ )
      printf( "%2.2x", ((unsigned char*) &v)[i] );
  }
  printf ("scare = %d\n", scare(v));
  */

  return scare (v);
}