(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
sse2-cmppd-1.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_cmp_pd_1
      13  #endif
      14  
      15  #include <emmintrin.h>
      16  #include <math.h>
      17  
      18  double ps1[] = {2134.3343, 6678.346};
      19  double ps2[] = {41124.234, 6678.346};
      20  long long pdd[] =  {1, 2}, pd[2];
      21  union{long long l[2]; double d[2];} pe;
      22  
      23  void pd_check(char *id, __m128d dst)
      24  {
      25      __v2di dest = (__v2di)dst;
      26  
      27      if(checkVl(pd, pe.l, 2))
      28      {
      29          printf("mm_cmp%s_pd FAILED\n", id);
      30  	printf("dst [%lld, %lld], e.l[%lld, %lld]\n", 
      31  		dest[0], dest[1], pe.l[0], pe.l[1]);
      32      }
      33  }
      34  
      35  #define CMP(cmp, rel0, rel1)					\
      36      pe.l[0] = rel0 ? -1 : 0;	                        \
      37      pe.l[1] = rel1 ? -1 : 0;	                        \
      38      dest = _mm_loadu_pd((double*)pdd);	      		\
      39      source1 = _mm_loadu_pd(ps1);				\
      40      source2 = _mm_loadu_pd(ps2);				\
      41      dest = _mm_cmp##cmp##_pd(source1, source2);		\
      42      _mm_storeu_pd((double*) pd, dest);			\
      43      pd_check("" #cmp "", dest);
      44  
      45  static void
      46  TEST ()
      47  {
      48      __m128d source1, source2, dest;
      49  
      50      CMP(eq, !isunordered(ps1[0], ps2[0]) && ps1[0] == ps2[0],
      51      		!isunordered(ps1[1], ps2[1]) && ps1[1] == ps2[1]);
      52      CMP(lt, !isunordered(ps1[0], ps2[0]) && ps1[0] < ps2[0],
      53      		!isunordered(ps1[1], ps2[1]) && ps1[1] < ps2[1]);
      54      CMP(le, !isunordered(ps1[0], ps2[0]) && ps1[0] <= ps2[0],
      55      		!isunordered(ps1[1], ps2[1]) && ps1[1] <= ps2[1]);
      56      CMP(unord, isunordered(ps1[0], ps2[0]),
      57      		isunordered(ps1[1], ps2[1]));
      58      CMP(neq, isunordered(ps1[0], ps2[0]) || ps1[0] != ps2[0],
      59      		isunordered(ps1[1], ps2[1]) || ps1[1] != ps2[01]);
      60      CMP(nlt, isunordered(ps1[0], ps2[0]) || ps1[0] >= ps2[0],
      61      		isunordered(ps1[1], ps2[1]) || ps1[1] >= ps2[1]);
      62      CMP(nle, isunordered(ps1[0], ps2[0]) || ps1[0] > ps2[0],
      63      		isunordered(ps1[1], ps2[1]) || ps1[1] > ps2[1]);
      64      CMP(ord, !isunordered(ps1[0], ps2[0]),
      65      		!isunordered(ps1[1], ps2[1]));
      66  
      67      CMP(ge, isunordered(ps1[0], ps2[0]) || ps1[0] >= ps2[0],
      68      		isunordered(ps1[1], ps2[1]) || ps1[1] >= ps2[1]);
      69      CMP(gt, isunordered(ps1[0], ps2[0]) || ps1[0] > ps2[0],
      70      		isunordered(ps1[1], ps2[1]) || ps1[1] > ps2[1]);
      71      CMP(nge, !isunordered(ps1[0], ps2[0]) && ps1[0] < ps2[0],
      72      		!isunordered(ps1[1], ps2[1]) && ps1[1] < ps2[1]);
      73      CMP(ngt, !isunordered(ps1[0], ps2[0]) && ps1[0] <= ps2[0],
      74      		!isunordered(ps1[1], ps2[1]) && ps1[1] <= ps2[1]);
      75  }