5533365.C   [plain text]


/* APPLE LOCAL file 5533365 */
/* { dg-do compile { target i?86*-*-darwin* } } */
/* { dg-options "-O2" } */
typedef long long __m64 __attribute__ ((__vector_size__ (8)));
typedef float __m128 __attribute__ ((__vector_size__ (16)));
typedef double __v2df __attribute__ ((__vector_size__ (16)));
typedef long long __v2di __attribute__ ((__vector_size__ (16)));
typedef __v2di __m128i;
typedef __v2df __m128d;

static inline __m128d __attribute__ ((__always_inline__, __nodebug__))
_mm_min_pd (__m128d __A, __m128d __B)
{
  return (__m128d)__builtin_ia32_minpd ((__v2df)__A, (__v2df)__B);
}

static inline __m128d __attribute__ ((__always_inline__, __nodebug__))
_mm_move_sd (__m128d __A, __m128d __B)
{
  return (__m128d) __builtin_ia32_movsd ((__v2df)__A, (__v2df)__B);
}

static inline __m128i __attribute__ ((__always_inline__, __nodebug__))
_mm_cvtpd_epi32 (__m128d __A)
{
  return (__m128i)__builtin_ia32_cvtpd2dq ((__v2df) __A);
}

union __attribute__((aligned(16))) XMM128
{
    __m128d d;
    __m128i i;
};

__inline__ __m128i foo (const __m128d &srcLo, const __m128i &src)
{
  const static __m128d max_val = {(double)0x7FFFFFFF, (double)0x7FFFFFFF};
  __m128d lo = _mm_min_pd(srcLo, max_val);
  XMM128 Lo,s1;
  Lo.i= _mm_cvtpd_epi32(lo);
  s1.i = src;
  Lo.d = _mm_move_sd(s1.d,Lo.d);
  return Lo.i;
}

int main()
{
  XMM128 tmp, tmp1, tmp2;
  tmp.i = foo (tmp1.d, tmp2.i);
  return 0;
}