1  /* { dg-do run } */
       2  /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */
       3  /* { dg-additional-options "-mno-mmx" { target { ! ia32 } } } */
       4  
       5  #include <string.h>
       6  #include "sse2-check.h"
       7  
       8  __attribute__((noinline, noclone))
       9  static void
      10  test_cvtpi32_ps (__m128 *i1, __m64 *i2, __m128 *r)
      11  {
      12    *(__m128 *) r = _mm_cvtpi32_ps (*i1, *i2);
      13  }
      14  
      15  /* Routine to manually compute the results */
      16  static void
      17  compute_correct_result (__m128 *dst_p, __m64 *src_p, __m128 *res_p)
      18  {
      19    int *src = (int *) src_p;
      20    float *res = (float *) res_p;
      21    *res_p = *dst_p;
      22    int i;
      23    __m128 r;
      24    for (i = 0; i < 2; i++)
      25      {
      26        r = _mm_cvt_si2ss (*dst_p, src[i]);
      27        res[i] = ((__v4sf) r)[0];
      28      }
      29  }
      30  
      31  static void
      32  sse2_test (void)
      33  {
      34    __m128 r, ck;
      35    __v4sf x = { 1.99f, -3.9f, -4.9f, 3.8f };
      36    __v2si y = { 30, -39 };
      37  
      38    /* Run the MMX tests */
      39    test_cvtpi32_ps ((__m128 *) &x, (__m64 *) &y, &r);
      40    compute_correct_result ((__m128 *) &x, (__m64 *) &y, &ck);
      41    if (memcmp (&ck, &r, sizeof (r)))
      42      abort ();
      43  }