(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
s390/
vector/
vec-copysign.c
       1  /* { dg-do compile { target { s390*-*-* } } } */
       2  /* { dg-options "-O2 -ftree-vectorize -mzarch -fno-unroll-loops" } */
       3  /* { dg-final { scan-assembler-times "vgmg" 1 } } */
       4  /* { dg-final { scan-assembler-times "vgmf" 1 } } */
       5  /* { dg-final { scan-assembler-times "vsel" 2 } } */
       6  
       7  #include <math.h>
       8  
       9  #define N 20
      10  
      11  double a[N] = {-0.1, -3.2, -6.3, -9.4, -12.5, -15.6, -18.7, -21.8, 24.9,
      12      27.1, 30.2, 33.3, 36.4, 39.5, 42.6, nan ("123"), __DBL_MIN__ / 2.0,
      13      -nan ("1"), __DBL_MAX__ * 2.0, -__DBL_MAX__ * 1e199};
      14  double b[N] = {-1.2, 3.4, -5.6, 7.8, -9.0, 1.0, -2.0, 3.0, -4.0, -5.0, 6.0,
      15      7.0, -8.0, -9.0, 10.0, -11.0, -1., 0., -0., 1.3};
      16  double r[N];
      17  float af[N] = {-0.1, -3.2, -6.3, -9.4, -12.5, -15.6, -18.7, -21.8, 24.9,
      18      27.1, 30.2, 33.3, 36.4, 39.5, 42.6, nan ("123"), __DBL_MIN__ / 2.0,
      19      -nan ("1"), __DBL_MAX__ * 2.0, -__DBL_MAX__ * 1e199};
      20  float bf[N] = {-1.2, 3.4, -5.6, 7.8, -9.0, 1.0, -2.0, 3.0, -4.0, -5.0, 6.0,
      21      7.0, -8.0, -9.0, 10.0, -11.0, -1., 0., -0., 1.3};
      22  float rf[N];
      23  
      24  __attribute__ ((__target__ ("arch=z13")))
      25  void
      26  foo (void)
      27  {
      28    for (int i = 0; i < N; i++)
      29      r[i] = copysign (a[i], b[i]);
      30  }
      31  
      32  __attribute__ ((__target__ ("arch=z14")))
      33  void
      34  foof (void)
      35  {
      36    for (int i = 0; i < N; i++)
      37      rf[i] = copysignf (af[i], bf[i]);
      38  }