(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
sse2-mmx-pinsrw.c
       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_pinsrw  (__m64 *i, int val, unsigned int imm, int *r)
      11  {
      12    switch (imm)
      13      {
      14      case 0:
      15         *(__m64 *) r = _m_pinsrw  (*i, val, 0);
      16        break;
      17      case 1:
      18         *(__m64 *) r = _m_pinsrw  (*i, val, 1);
      19        break;
      20      case 2:
      21         *(__m64 *) r = _m_pinsrw  (*i, val, 2);
      22        break;
      23      case 3:
      24         *(__m64 *) r = _m_pinsrw  (*i, val, 3);
      25        break;
      26      default:
      27        break;
      28      }
      29  }
      30  
      31  /* Routine to manually compute the results */
      32  static void
      33  compute_correct_result (__m64 *src_p, int val, unsigned int imm,
      34  			int *res_p)
      35  {
      36    short *res = (short *) res_p;
      37    *(__m64 *) res_p = *src_p;
      38    if (imm < 4)
      39      res[imm] = val;
      40  }
      41  
      42  static void
      43  sse2_test (void)
      44  {
      45    int r[2], ck[2];
      46    int i;
      47    int failed = 0;
      48    __v4hi y = { 3320, -3339, 48, 4392 };
      49  
      50    /* Run the MMX tests */
      51    for (i = 0; i < 4; i++)
      52      {
      53        test_pinsrw  ((__m64 *) &y, 0x1234, i, r);
      54        compute_correct_result ((__m64 *) &y, 0x1234, i, ck);
      55        if (r[0] != ck[0] || r[1] != ck[1])
      56  	failed++;
      57      }
      58  
      59    if (failed)
      60      abort ();
      61  }