(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
sse2-pinsrw.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */
       3  /* { dg-require-effective-target p8vector_hw } */
       4  
       5  #ifndef CHECK_H
       6  #define CHECK_H "sse2-check.h"
       7  #endif
       8  
       9  #include CHECK_H
      10  
      11  #ifndef TEST
      12  #define TEST sse2_test_pinsrw_1
      13  #endif
      14  
      15  #include <emmintrin.h>
      16  #include <string.h>
      17  
      18  #define msk0 0x00
      19  #define msk1 0x01
      20  #define msk2 0x02
      21  #define msk3 0x03
      22  #define msk4 0x04
      23  #define msk5 0x05
      24  #define msk6 0x06
      25  #define msk7 0x07
      26  
      27  static void
      28  TEST (void)
      29  {
      30    union
      31      {
      32        __m128i x;
      33        unsigned int i[4];
      34        unsigned short s[8];
      35      } res [8], val, tmp;
      36    int masks[8];
      37    unsigned short ins[4] = { 3, 4, 5, 6 };
      38    int i;
      39  
      40    val.i[0] = 0x35251505;
      41    val.i[1] = 0x75655545;
      42    val.i[2] = 0xB5A59585;
      43    val.i[3] = 0xF5E5D5C5;
      44  
      45    /* Check pinsrw imm8, r32, xmm.  */
      46    res[0].x = _mm_insert_epi16 (val.x, ins[0], msk0);
      47    res[1].x = _mm_insert_epi16 (val.x, ins[0], msk1);
      48    res[2].x = _mm_insert_epi16 (val.x, ins[0], msk2);
      49    res[3].x = _mm_insert_epi16 (val.x, ins[0], msk3);
      50    res[4].x = _mm_insert_epi16 (val.x, ins[0], msk4);
      51    res[5].x = _mm_insert_epi16 (val.x, ins[0], msk5);
      52    res[6].x = _mm_insert_epi16 (val.x, ins[0], msk6);
      53    res[7].x = _mm_insert_epi16 (val.x, ins[0], msk7);
      54  
      55    masks[0] = msk0;
      56    masks[1] = msk1;
      57    masks[2] = msk2;
      58    masks[3] = msk3;
      59    masks[4] = msk4;
      60    masks[5] = msk5;
      61    masks[6] = msk6;
      62    masks[7] = msk7;
      63  
      64    for (i = 0; i < 8; i++)
      65      {
      66        tmp.x = val.x;
      67        tmp.s[masks[i]] = ins[0];
      68        if (memcmp (&tmp, &res[i], sizeof (tmp)))
      69  	abort ();
      70      }
      71      
      72    /* Check pinsrw imm8, m16, xmm.  */
      73    for (i = 0; i < 8; i++)
      74      {
      75        res[i].x = _mm_insert_epi16 (val.x, ins[i % 2], msk0);
      76        masks[i] = msk0;
      77      }
      78  
      79    for (i = 0; i < 8; i++)
      80      {
      81        tmp.x = val.x;
      82        tmp.s[masks[i]] = ins[i % 2];
      83        if (memcmp (&tmp, &res[i], sizeof (tmp)))
      84  	abort ();
      85      }
      86  }