(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
float128-hw3.c
       1  /* { dg-do compile { target lp64 } } */
       2  /* { dg-require-effective-target powerpc_p9vector_ok } */
       3  /* { dg-require-effective-target float128 } */
       4  /* { dg-options "-mpower9-vector -O2 -ffast-math -std=c11 -mno-pcrel" } */
       5  
       6  /* Test to make sure the compiler calls the external function instead of doing
       7     the built-in processing for _Float128 functions that have hardware support
       8     in ISA 3.0/power9 if are in strict standards mode, where the <func>f128 name
       9     is not a synonym for __builtin_<func>f128.  */
      10  
      11  extern _Float128 copysignf128 (_Float128, _Float128);
      12  extern _Float128 sqrtf128 (_Float128);
      13  extern _Float128 fmaf128 (_Float128, _Float128, _Float128);
      14  
      15  _Float128
      16  do_copysign (_Float128 a, _Float128 b)
      17  {
      18    return copysignf128 (a, b);
      19  }
      20  
      21  _Float128
      22  do_sqrt (_Float128 a)
      23  {
      24    return sqrtf128 (a);
      25  }
      26  
      27  _Float128
      28  do_fma (_Float128 a, _Float128 b, _Float128 c)
      29  {
      30    return fmaf128 (a, b, c);
      31  }
      32  
      33  _Float128
      34  do_fms (_Float128 a, _Float128 b, _Float128 c)
      35  {
      36    return fmaf128 (a, b, -c);
      37  }
      38  
      39  _Float128
      40  do_nfma (_Float128 a, _Float128 b, _Float128 c)
      41  {
      42    return -fmaf128 (a, b, c);
      43  }
      44  
      45  _Float128
      46  do_nfms (_Float128 a, _Float128 b, _Float128 c)
      47  {
      48    return -fmaf128 (a, b, -c);
      49  }
      50  
      51  /* { dg-final { scan-assembler-not   {\mxscpsgnqp\M} } } */
      52  /* { dg-final { scan-assembler-not   {\mxssqrtqp\M}  } } */
      53  /* { dg-final { scan-assembler-not   {\mxsmaddqp\M}  } } */
      54  /* { dg-final { scan-assembler-not   {\mxsmsubqp\M}  } } */
      55  /* { dg-final { scan-assembler-not   {\mxsnmaddqp\M} } } */
      56  /* { dg-final { scan-assembler-not   {\mxsnmsubqp\M} } } */
      57  /* { dg-final { scan-assembler-times {\mbl\M} 6      } } */