1  /* { dg-do compile } */
       2  /* { dg-options "-O3 -mzarch -march=arch12" } */
       3  
       4  typedef float       v4sf __attribute__((vector_size(16)));
       5  typedef double      v2df __attribute__((vector_size(16)));
       6  typedef long double v1tf __attribute__((vector_size(16)));
       7  
       8  v4sf
       9  neg_vfnmasb (v4sf a, v4sf b, v4sf c)
      10  {
      11    return -(a * b + c);
      12  }
      13  /* { dg-final { scan-assembler-times "vfnmasb\t%v24,%v24,%v26,%v28" 1 } } */
      14  
      15  v2df
      16  neg_vfnmadb (v2df a, v2df b, v2df c)
      17  {
      18    return -(a * b + c);
      19  }
      20  /* { dg-final { scan-assembler-times "vfnmadb\t%v24,%v24,%v26,%v28" 1 } } */
      21  
      22  v1tf
      23  neg_wfnmaxb (v1tf a, v1tf b, v1tf c)
      24  {
      25    return -(a * b + c);
      26  }
      27  /* { dg-final { scan-assembler-times "wfnmaxb\t%v24,%v24,%v26,%v28" 1 } } */
      28  
      29  
      30  v4sf
      31  neg_vfnmssb (v4sf a, v4sf b, v4sf c)
      32  {
      33    return -(a * b - c);
      34  }
      35  /* { dg-final { scan-assembler-times "vfnmssb\t%v24,%v24,%v26,%v28" 1 } } */
      36  
      37  v2df
      38  neg_vfnmsdb (v2df a, v2df b, v2df c)
      39  {
      40    return -(a * b - c);
      41  }
      42  /* { dg-final { scan-assembler-times "vfnmsdb\t%v24,%v24,%v26,%v28" 1 } } */
      43  
      44  v1tf
      45  neg_wfnmsxb (v1tf a, v1tf b, v1tf c)
      46  {
      47    return -(a * b - c);
      48  }
      49  /* { dg-final { scan-assembler-times "wfnmsxb\t%v24,%v24,%v26,%v28" 1 } } */