1  /* { dg-do compile { target { powerpc*-*-* } } } */
       2  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
       3  /* { dg-require-effective-target powerpc_vsx_ok } */
       4  /* { dg-options "-O3 -mdejagnu-cpu=power7" } */
       5  /* { dg-final { scan-assembler "xxsldwi"  } } */
       6  /* { dg-final { scan-assembler "xxpermdi" } } */
       7  
       8  #include <altivec.h>
       9  
      10  vector double
      11  v2df_shift (vector double a, vector double b)
      12  {
      13    return vec_xxsldwi (a, b, 1);
      14  }
      15  
      16  vector float
      17  v4sf_shift (vector float a, vector float b)
      18  {
      19    return vec_xxsldwi (a, b, 1);
      20  }
      21  
      22  vector long long
      23  v2di_shift (vector long long a, vector long long b)
      24  {
      25    return vec_xxsldwi (a, b, 1);
      26  }
      27  
      28  vector unsigned long long
      29  v2diu_shift (vector unsigned long long a, vector unsigned long long b)
      30  {
      31    return vec_xxsldwi (a, b, 1);
      32  }
      33  
      34  vector int
      35  v4si_shift (vector int a, vector int b)
      36  {
      37    return vec_xxsldwi (a, b, 1);
      38  }
      39  
      40  vector unsigned int
      41  v4siu_shift (vector unsigned int a, vector unsigned int b)
      42  {
      43    return vec_xxsldwi (a, b, 1);
      44  }
      45  
      46  vector short
      47  v8hi_shift (vector short a, vector short b)
      48  {
      49    return vec_xxsldwi (a, b, 1);
      50  }
      51  
      52  vector unsigned short
      53  v8hiu_shift (vector unsigned short a, vector unsigned short b)
      54  {
      55    return vec_xxsldwi (a, b, 1);
      56  }
      57  
      58  vector signed char
      59  v16qi_shift (vector signed char a, vector signed char b)
      60  {
      61    return vec_xxsldwi (a, b, 1);
      62  }
      63  
      64  vector unsigned char
      65  v16qiu_shift (vector unsigned char a, vector unsigned char b)
      66  {
      67    return vec_xxsldwi (a, b, 1);
      68  }
      69  
      70  vector double
      71  v2df_permute (vector double a, vector double b)
      72  {
      73    return vec_xxpermdi (a, b, 1);
      74  }
      75  
      76  vector float
      77  v4sf_permute (vector float a, vector float b)
      78  {
      79    return vec_xxpermdi (a, b, 1);
      80  }
      81  
      82  vector long long
      83  v2di_permute (vector long long a, vector long long b)
      84  {
      85    return vec_xxpermdi (a, b, 1);
      86  }
      87  
      88  vector unsigned long long
      89  v2diu_permute (vector unsigned long long a, vector unsigned long long b)
      90  {
      91    return vec_xxpermdi (a, b, 1);
      92  }
      93  
      94  vector int
      95  v4si_permute (vector int a, vector int b)
      96  {
      97    return vec_xxpermdi (a, b, 1);
      98  }
      99  
     100  vector unsigned int
     101  v4siu_permute (vector unsigned int a, vector unsigned int b)
     102  {
     103    return vec_xxpermdi (a, b, 1);
     104  }
     105  
     106  vector short
     107  v8hi_permute (vector short a, vector short b)
     108  {
     109    return vec_xxpermdi (a, b, 1);
     110  }
     111  
     112  vector unsigned short
     113  v8hiu_permute (vector unsigned short a, vector unsigned short b)
     114  {
     115    return vec_xxpermdi (a, b, 1);
     116  }
     117  
     118  vector signed char
     119  v16qi_permute (vector signed char a, vector signed char b)
     120  {
     121    return vec_xxpermdi (a, b, 1);
     122  }
     123  
     124  vector unsigned char
     125  v16qiu_permute (vector unsigned char a, vector unsigned char b)
     126  {
     127    return vec_xxpermdi (a, b, 1);
     128  }