(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
sse4_1-ptest-1.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target p8vector_hw } */
       3  /* { dg-options "-O2 -mpower8-vector -Wno-psabi" } */
       4  
       5  #ifndef CHECK_H
       6  #define CHECK_H "sse4_1-check.h"
       7  #endif
       8  
       9  #ifndef TEST
      10  #define TEST sse4_1_test
      11  #endif
      12  
      13  #include CHECK_H
      14  
      15  #include <smmintrin.h>
      16  
      17  static int
      18  make_ptestz (__m128i m, __m128i v)
      19  {
      20    union
      21      {
      22        __m128i x;
      23        unsigned char c[16];
      24      } val, mask;
      25    int i, z;
      26  
      27    mask.x = m;
      28    val.x = v;
      29  
      30    z = 1;
      31    for (i = 0; i < 16; i++)
      32      if ((mask.c[i] & val.c[i]))
      33        {
      34  	z = 0;
      35  	break;
      36        }
      37    return z;
      38  }
      39  
      40  static int
      41  make_ptestc (__m128i m, __m128i v)
      42  {
      43    union
      44      {
      45        __m128i x;
      46        unsigned char c[16];
      47      } val, mask;
      48    int i, c;
      49  
      50    mask.x = m;
      51    val.x = v;
      52  
      53    c = 1;
      54    for (i = 0; i < 16; i++)
      55      if ((val.c[i] & ~mask.c[i]))
      56        {
      57  	c = 0;
      58  	break;
      59        }
      60    return c;
      61  }
      62  
      63  static void
      64  TEST (void)
      65  {
      66    union
      67      {
      68        __m128i x;
      69        unsigned int i[4];
      70      } val[4];
      71    int i, j, l;
      72    int res[32];
      73  
      74    val[0].i[0] = 0x11111111;
      75    val[0].i[1] = 0x00000000;
      76    val[0].i[2] = 0x00000000;
      77    val[0].i[3] = 0x11111111;
      78      
      79    val[1].i[0] = 0x00000000;
      80    val[1].i[1] = 0x11111111;
      81    val[1].i[2] = 0x11111111;
      82    val[1].i[3] = 0x00000000;
      83  
      84    val[2].i[0] = 0;
      85    val[2].i[1] = 0;
      86    val[2].i[2] = 0;
      87    val[2].i[3] = 0;
      88  
      89    val[3].i[0] = 0xffffffff;
      90    val[3].i[1] = 0xffffffff;
      91    val[3].i[2] = 0xffffffff;
      92    val[3].i[3] = 0xffffffff;
      93  
      94    l = 0;
      95    for(i = 0; i < 4; i++)
      96      for(j = 0; j < 4; j++)
      97        {
      98  	res[l++] = _mm_testz_si128 (val[j].x, val[i].x);
      99  	res[l++] = _mm_testc_si128 (val[j].x, val[i].x);
     100        }
     101  
     102    l = 0;
     103    for(i = 0; i < 4; i++)
     104      for(j = 0; j < 4; j++)
     105        {
     106  	if (res[l++] != make_ptestz (val[j].x, val[i].x))
     107  	  abort ();
     108  	if (res[l++] != make_ptestc (val[j].x, val[i].x))
     109  	  abort ();
     110        }
     111  
     112    if (res[2] != _mm_testz_si128 (val[1].x, val[0].x))
     113      abort ();
     114  
     115    if (res[3] != _mm_testc_si128 (val[1].x, val[0].x))
     116      abort ();
     117  }