(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
s390/
zvector/
vec_msum_u128-1.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target s390_vxe } */
       3  /* { dg-options "-O3 -mzarch -march=z14 -mzvector --save-temps" } */
       4  
       5  #include <vecintrin.h>
       6  
       7  typedef vector unsigned char uv16qi;
       8  typedef vector unsigned long long uv2di;
       9  
      10  uv2di a = (uv2di){ 12,  42 };
      11  uv2di b = (uv2di){ 54, 120 };
      12  uv2di c = (uv2di){  0, 200 };
      13  
      14  int
      15  main ()
      16  {
      17    uv2di result;
      18  
      19    result = (uv2di)vec_msum_u128 (a, b, (uv16qi)c, 0);
      20  
      21    if (result[1] != a[0] * b[0] + a[1] * b[1] + c[1])
      22      __builtin_abort();
      23  
      24    result = (uv2di)vec_msum_u128 (a, b, (uv16qi)c, 4);
      25  
      26    if (result[1] != a[0] * b[0] + a[1] * b[1] * 2 + c[1])
      27      __builtin_abort();
      28  
      29    result = (uv2di)vec_msum_u128 (a, b, (uv16qi)c, 8);
      30  
      31    if (result[1] != a[0] * b[0] * 2 + a[1] * b[1] + c[1])
      32      __builtin_abort();
      33  
      34    result = (uv2di)vec_msum_u128 (a, b, (uv16qi)c, 12);
      35  
      36    if (result[1] != a[0] * b[0] * 2 + a[1] * b[1] * 2 + c[1])
      37      __builtin_abort();
      38  
      39    return 0;
      40  }
      41  
      42  /* { dg-final { scan-assembler-times "vmslg\t.*0" 1 } } */
      43  /* { dg-final { scan-assembler-times "vmslg\t.*4" 1 } } */
      44  /* { dg-final { scan-assembler-times "vmslg\t.*8" 1 } } */
      45  /* { dg-final { scan-assembler-times "vmslg\t.*12" 1 } } */