(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
s390/
vector/
vec-genbytemask-1.c
       1  /* { dg-do run } */
       2  /* { dg-options "-O3 -mzarch -march=z13 --save-temps" } */
       3  /* { dg-require-effective-target s390_vx } */
       4  /* { dg-require-effective-target int128 } */
       5  
       6  typedef unsigned char     uv16qi __attribute__((vector_size(16)));
       7  typedef unsigned short     uv8hi __attribute__((vector_size(16)));
       8  typedef unsigned int       uv4si __attribute__((vector_size(16)));
       9  typedef unsigned long long uv2di __attribute__((vector_size(16)));
      10  typedef unsigned __int128  uv1ti __attribute__((vector_size(16)));
      11  
      12  uv2di __attribute__((noinline))
      13  foo1 ()
      14  {
      15    return (uv2di){ 0xff00ff00ff00ff00, 0x00ff00ff00ff00ff };
      16  }
      17  /* { dg-final { scan-assembler-times "vgbm\t%v24,43605" 1 } } */
      18  
      19  uv4si __attribute__((noinline))
      20  foo2 ()
      21  {
      22    return (uv4si){ 0xff0000ff, 0x0000ffff, 0xffff0000, 0x00ffff00 };
      23  }
      24  /* { dg-final { scan-assembler-times "vgbm\t%v24,37830" 1 } } */
      25  
      26  uv8hi __attribute__((noinline))
      27  foo3a ()
      28  {
      29    return (uv8hi){ 0xff00, 0xff00, 0xff00, 0xff00,
      30        0xff00, 0xff00, 0xff00, 0xff00 };
      31  }
      32  /* { dg-final { scan-assembler-times "vgbm\t%v24,43690" 1 } } */
      33  
      34  uv8hi __attribute__((noinline))
      35  foo3b ()
      36  {
      37    return (uv8hi){ 0x00ff, 0x00ff, 0x00ff, 0x00ff,
      38        0x00ff, 0x00ff, 0x00ff, 0x00ff };
      39  }
      40  /* { dg-final { scan-assembler-times "vgbm\t%v24,21845" 1 } } */
      41  
      42  uv16qi __attribute__((noinline))
      43  foo4 ()
      44  {
      45    return (uv16qi){ 0xff, 0xff, 0xff, 0xff,
      46        0, 0, 0, 0,
      47        0xff, 0, 0xff, 0,
      48        0, 0xff, 0, 0xff };
      49  }
      50  
      51  uv1ti __attribute__((noinline))
      52  foo5 ()
      53  {
      54    return (uv1ti){ 0xff00ff00ff00ff00ULL };
      55  }
      56  
      57  /* { dg-final { scan-assembler-times "vgbm\t%v24,61605" 1 } } */
      58  
      59  int
      60  main ()
      61  {
      62    if (foo1()[1] != 0x00ff00ff00ff00ffULL)
      63      __builtin_abort ();
      64  
      65    if (foo2()[1] != 0x0000ffff)
      66      __builtin_abort ();
      67  
      68    if (foo3a()[1] != 0xff00)
      69      __builtin_abort ();
      70  
      71    if (foo3b()[1] != 0x00ff)
      72      __builtin_abort ();
      73  
      74    if (foo4()[1] != 0xff)
      75      __builtin_abort ();
      76  
      77    if (foo5()[0] != 0xff00ff00ff00ff00ULL)
      78      __builtin_abort ();
      79  
      80    return 0;
      81  }
      82