(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
p8vector-builtin-4.c
       1  /* { dg-do compile { target { powerpc*-*-* } } } */
       2  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
       3  /* { dg-require-effective-target powerpc_p8vector_ok } */
       4  /* { dg-options "-mdejagnu-cpu=power8 -O3 -ftree-vectorize -fvect-cost-model=dynamic" } */
       5  
       6  #include <altivec.h>
       7  
       8  typedef vector long long		vll_sign;
       9  typedef vector unsigned long long	vll_uns;
      10  typedef vector bool long long		vll_bool;
      11  
      12  typedef vector int			vi_sign;
      13  typedef vector unsigned int		vi_uns;
      14  typedef vector bool int			vi_bool;
      15  
      16  typedef vector short			vs_sign;
      17  typedef vector unsigned short		vs_uns;
      18  typedef vector bool short		vs_bool;
      19  
      20  typedef vector signed char		vc_sign;
      21  typedef vector unsigned char		vc_uns;
      22  typedef vector bool char		vc_bool;
      23  
      24  vll_sign vll_clz_1 (vll_sign a)
      25  {
      26    return __builtin_altivec_vclzd (a);
      27  }
      28  
      29  vll_sign vll_clz_2 (vll_sign a)
      30  {
      31    return vec_vclz (a);
      32  }
      33  
      34  vll_sign vll_clz_3 (vll_sign a)
      35  {
      36    return vec_vclzd (a);
      37  }
      38  
      39  vll_uns vll_clz_4 (vll_uns a)
      40  {
      41    return vec_vclz (a);
      42  }
      43  
      44  vll_uns vll_clz_5 (vll_uns a)
      45  {
      46    return vec_vclzd (a);
      47  }
      48  
      49  vi_sign vi_clz_1 (vi_sign a)
      50  {
      51    return __builtin_altivec_vclzw (a);
      52  }
      53  
      54  vi_sign vi_clz_2 (vi_sign a)
      55  {
      56    return vec_vclz (a);
      57  }
      58  
      59  vi_sign vi_clz_3 (vi_sign a)
      60  {
      61    return vec_vclzw (a);
      62  }
      63  
      64  vi_uns vi_clz_4 (vi_uns a)
      65  {
      66    return vec_vclz (a);
      67  }
      68  
      69  vi_uns vi_clz_5 (vi_uns a)
      70  {
      71    return vec_vclzw (a);
      72  }
      73  
      74  vs_sign vs_clz_1 (vs_sign a)
      75  {
      76    return __builtin_altivec_vclzh (a);
      77  }
      78  
      79  vs_sign vs_clz_2 (vs_sign a)
      80  {
      81    return vec_vclz (a);
      82  }
      83  
      84  vs_sign vs_clz_3 (vs_sign a)
      85  {
      86    return vec_vclzh (a);
      87  }
      88  
      89  vs_uns vs_clz_4 (vs_uns a)
      90  {
      91    return vec_vclz (a);
      92  }
      93  
      94  vs_uns vs_clz_5 (vs_uns a)
      95  {
      96    return vec_vclzh (a);
      97  }
      98  
      99  vc_sign vc_clz_1 (vc_sign a)
     100  {
     101    return __builtin_altivec_vclzb (a);
     102  }
     103  
     104  vc_sign vc_clz_2 (vc_sign a)
     105  {
     106    return vec_vclz (a);
     107  }
     108  
     109  vc_sign vc_clz_3 (vc_sign a)
     110  {
     111    return vec_vclzb (a);
     112  }
     113  
     114  vc_uns vc_clz_4 (vc_uns a)
     115  {
     116    return vec_vclz (a);
     117  }
     118  
     119  vc_uns vc_clz_5 (vc_uns a)
     120  {
     121    return vec_vclzb (a);
     122  }
     123  
     124  vll_sign vll_popcnt_1 (vll_sign a)
     125  {
     126    return __builtin_altivec_vpopcntd (a);
     127  }
     128  
     129  vll_sign vll_popcnt_2 (vll_sign a)
     130  {
     131    return vec_vpopcnt (a);
     132  }
     133  
     134  vll_sign vll_popcnt_3 (vll_sign a)
     135  {
     136    return vec_vpopcntd (a);
     137  }
     138  
     139  vll_uns vll_popcnt_4 (vll_uns a)
     140  {
     141    return vec_vpopcnt (a);
     142  }
     143  
     144  vll_uns vll_popcnt_5 (vll_uns a)
     145  {
     146    return vec_vpopcntd (a);
     147  }
     148  
     149  vi_sign vi_popcnt_1 (vi_sign a)
     150  {
     151    return __builtin_altivec_vpopcntw (a);
     152  }
     153  
     154  vi_sign vi_popcnt_2 (vi_sign a)
     155  {
     156    return vec_vpopcnt (a);
     157  }
     158  
     159  vi_sign vi_popcnt_3 (vi_sign a)
     160  {
     161    return vec_vpopcntw (a);
     162  }
     163  
     164  vi_uns vi_popcnt_4 (vi_uns a)
     165  {
     166    return vec_vpopcnt (a);
     167  }
     168  
     169  vi_uns vi_popcnt_5 (vi_uns a)
     170  {
     171    return vec_vpopcntw (a);
     172  }
     173  
     174  vs_sign vs_popcnt_1 (vs_sign a)
     175  {
     176    return __builtin_altivec_vpopcnth (a);
     177  }
     178  
     179  vs_sign vs_popcnt_2 (vs_sign a)
     180  {
     181    return vec_vpopcnt (a);
     182  }
     183  
     184  vs_sign vs_popcnt_3 (vs_sign a)
     185  {
     186    return vec_vpopcnth (a);
     187  }
     188  
     189  vs_uns vs_popcnt_4 (vs_uns a)
     190  {
     191    return vec_vpopcnt (a);
     192  }
     193  
     194  vs_uns vs_popcnt_5 (vs_uns a)
     195  {
     196    return vec_vpopcnth (a);
     197  }
     198  
     199  vc_sign vc_popcnt_1 (vc_sign a)
     200  {
     201    return __builtin_altivec_vpopcntb (a);
     202  }
     203  
     204  vc_sign vc_popcnt_2 (vc_sign a)
     205  {
     206    return vec_vpopcnt (a);
     207  }
     208  
     209  vc_sign vc_popcnt_3 (vc_sign a)
     210  {
     211    return vec_vpopcntb (a);
     212  }
     213  
     214  vc_uns vc_popcnt_4 (vc_uns a)
     215  {
     216    return vec_vpopcnt (a);
     217  }
     218  
     219  vc_uns vc_popcnt_5 (vc_uns a)
     220  {
     221    return vec_vpopcntb (a);
     222  }
     223  
     224  vc_uns vc_gbb_1 (vc_uns a)
     225  {
     226    return __builtin_altivec_vgbbd (a);
     227  }
     228  
     229  vc_sign vc_gbb_2 (vc_sign a)
     230  {
     231    return vec_vgbbd (a);
     232  }
     233  
     234  vc_uns vc_gbb_3 (vc_uns a)
     235  {
     236    return vec_vgbbd (a);
     237  }
     238  
     239  /* { dg-final { scan-assembler-times "vclzd" 	5 } } */
     240  /* { dg-final { scan-assembler-times "vclzw" 	5 } } */
     241  /* { dg-final { scan-assembler-times "vclzh" 	5 } } */
     242  /* { dg-final { scan-assembler-times "vclzb" 	5 } } */
     243  
     244  /* { dg-final { scan-assembler-times "vpopcntd" 5 } } */
     245  /* { dg-final { scan-assembler-times "vpopcntw" 5 } } */
     246  /* { dg-final { scan-assembler-times "vpopcnth" 5 } } */
     247  /* { dg-final { scan-assembler-times "vpopcntb" 5 } } */
     248  
     249  /* { dg-final { scan-assembler-times "vgbbd"    3 } } */