(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
float128-cmove.c
       1  /* { dg-do compile } */
       2  /* { dg-require-effective-target ppc_float128_hw } */
       3  /* { dg-require-effective-target power10_ok } */
       4  /* { dg-options "-mdejagnu-cpu=power10 -O2" } */
       5  
       6  #ifndef TYPE
       7  #ifdef __LONG_DOUBLE_IEEE128__
       8  #define TYPE long double
       9  
      10  #else
      11  #define TYPE _Float128
      12  #endif
      13  #endif
      14  
      15  /* Verify that the ISA 3.1 (power10) IEEE 128-bit conditional move instructions
      16     are generated.  */
      17  
      18  TYPE
      19  eq (TYPE a, TYPE b, TYPE c, TYPE d)
      20  {
      21    return (a == b) ? c : d;
      22  }
      23  
      24  TYPE
      25  ne (TYPE a, TYPE b, TYPE c, TYPE d)
      26  {
      27    return (a != b) ? c : d;
      28  }
      29  
      30  TYPE
      31  lt (TYPE a, TYPE b, TYPE c, TYPE d)
      32  {
      33    return (a < b) ? c : d;
      34  }
      35  
      36  TYPE
      37  le (TYPE a, TYPE b, TYPE c, TYPE d)
      38  {
      39    return (a <= b) ? c : d;
      40  }
      41  
      42  TYPE
      43  gt (TYPE a, TYPE b, TYPE c, TYPE d)
      44  {
      45    return (a > b) ? c : d;
      46  }
      47  
      48  TYPE
      49  ge (TYPE a, TYPE b, TYPE c, TYPE d)
      50  {
      51    return (a >= b) ? c : d;
      52  }
      53  
      54  /* { dg-final { scan-assembler-times {\mxscmpeqqp\M} 2 } } */
      55  /* { dg-final { scan-assembler-times {\mxscmpgeqp\M} 2 } } */
      56  /* { dg-final { scan-assembler-times {\mxscmpgtqp\M} 2 } } */
      57  /* { dg-final { scan-assembler-times {\mxxsel\M}     6 } } */
      58  /* { dg-final { scan-assembler-not   {\mxscmpuqp\M}    } } */