1  /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
       2  /* { dg-skip-if "" { powerpc*-*-darwin* } } */
       3  /* { dg-require-effective-target powerpc_vsx_ok } */
       4  /* { dg-options "-O2 -mdejagnu-cpu=power7" } */
       5  /* { dg-final { scan-assembler "xxsel" } } */
       6  /* { dg-final { scan-assembler "vperm" } } */
       7  /* { dg-final { scan-assembler "xvrdpi" } } */
       8  /* { dg-final { scan-assembler "xvrdpic" } } */
       9  /* { dg-final { scan-assembler "xvrdpim" } } */
      10  /* { dg-final { scan-assembler "xvrdpip" } } */
      11  /* { dg-final { scan-assembler "xvrdpiz" } } */
      12  /* { dg-final { scan-assembler "xvrspi" } } */
      13  /* { dg-final { scan-assembler "xvrspic" } } */
      14  /* { dg-final { scan-assembler "xvrspim" } } */
      15  /* { dg-final { scan-assembler "xvrspip" } } */
      16  /* { dg-final { scan-assembler "xvrspiz" } } */
      17  /* { dg-final { scan-assembler "xsrdpi" } } */
      18  /* { dg-final { scan-assembler "xsrdpic" } } */
      19  /* { dg-final { scan-assembler "xsrdpim\|frim" } } */
      20  /* { dg-final { scan-assembler "xsrdpip\|frip" } } */
      21  /* { dg-final { scan-assembler "xsrdpiz\|friz" } } */
      22  /* { dg-final { scan-assembler "xsmaxdp" } } */
      23  /* { dg-final { scan-assembler "xsmindp" } } */
      24  /* { dg-final { scan-assembler "xxland" } } */
      25  /* { dg-final { scan-assembler "xxlandc" } } */
      26  /* { dg-final { scan-assembler "xxlnor" } } */
      27  /* { dg-final { scan-assembler "xxlor" } } */
      28  /* { dg-final { scan-assembler "xxlxor" } } */
      29  /* { dg-final { scan-assembler "xvcmpeqdp" } } */
      30  /* { dg-final { scan-assembler "xvcmpgtdp" } } */
      31  /* { dg-final { scan-assembler "xvcmpgedp" } } */
      32  /* { dg-final { scan-assembler "xvcmpeqsp" } } */
      33  /* { dg-final { scan-assembler "xvcmpgtsp" } } */
      34  /* { dg-final { scan-assembler "xvcmpgesp" } } */
      35  /* { dg-final { scan-assembler "xxsldwi" } } */
      36  /* { dg-final { scan-assembler-not "call" } } */
      37  /* { dg-final { scan-assembler "xvcvsxdsp" } } */
      38  /* { dg-final { scan-assembler "xvcvuxdsp" } } */
      39  
      40  extern __vector int si[][4];
      41  extern __vector short ss[][4];
      42  extern __vector signed char sc[][4];
      43  extern __vector float f[][4];
      44  extern __vector unsigned int ui[][4];
      45  extern __vector unsigned short us[][4];
      46  extern __vector unsigned char uc[][4];
      47  extern __vector __bool int bi[][4];
      48  extern __vector __bool short bs[][4];
      49  extern __vector __bool char bc[][4];
      50  extern __vector __pixel p[][4];
      51  #ifdef __VSX__
      52  extern __vector double d[][4];
      53  extern __vector long sl[][4];
      54  extern __vector long long sll[][4];
      55  extern __vector unsigned long ul[][4];
      56  extern __vector unsigned long long ull[][4];
      57  extern __vector __bool long bl[][4];
      58  #endif
      59  
      60  int do_sel(void)
      61  {
      62    int i = 0;
      63  
      64    si[i][0] = __builtin_vsx_xxsel_4si (si[i][1], si[i][2], si[i][3]); i++;
      65    ss[i][0] = __builtin_vsx_xxsel_8hi (ss[i][1], ss[i][2], ss[i][3]); i++;
      66    sc[i][0] = __builtin_vsx_xxsel_16qi (sc[i][1], sc[i][2], sc[i][3]); i++;
      67    f[i][0] = __builtin_vsx_xxsel_4sf (f[i][1], f[i][2], f[i][3]); i++;
      68    d[i][0] = __builtin_vsx_xxsel_2df (d[i][1], d[i][2], d[i][3]); i++;
      69  
      70    si[i][0] = __builtin_vsx_xxsel (si[i][1], si[i][2], bi[i][3]); i++;
      71    ss[i][0] = __builtin_vsx_xxsel (ss[i][1], ss[i][2], bs[i][3]); i++;
      72    sc[i][0] = __builtin_vsx_xxsel (sc[i][1], sc[i][2], bc[i][3]); i++;
      73    f[i][0] = __builtin_vsx_xxsel (f[i][1], f[i][2], bi[i][3]); i++;
      74    d[i][0] = __builtin_vsx_xxsel (d[i][1], d[i][2], bl[i][3]); i++;
      75  
      76    si[i][0] = __builtin_vsx_xxsel (si[i][1], si[i][2], ui[i][3]); i++;
      77    ss[i][0] = __builtin_vsx_xxsel (ss[i][1], ss[i][2], us[i][3]); i++;
      78    sc[i][0] = __builtin_vsx_xxsel (sc[i][1], sc[i][2], uc[i][3]); i++;
      79    f[i][0] = __builtin_vsx_xxsel (f[i][1], f[i][2], ui[i][3]); i++;
      80    d[i][0] = __builtin_vsx_xxsel (d[i][1], d[i][2], ul[i][3]); i++;
      81  
      82    return i;
      83  }
      84  
      85  int do_perm(void)
      86  {
      87    int i = 0;
      88  
      89    si[i][0] = __builtin_vsx_vperm_4si (si[i][1], si[i][2], uc[i][3]); i++;
      90    ss[i][0] = __builtin_vsx_vperm_8hi (ss[i][1], ss[i][2], uc[i][3]); i++;
      91    sc[i][0] = __builtin_vsx_vperm_16qi (sc[i][1], sc[i][2], uc[i][3]); i++;
      92    f[i][0] = __builtin_vsx_vperm_4sf (f[i][1], f[i][2], uc[i][3]); i++;
      93    d[i][0] = __builtin_vsx_vperm_2df (d[i][1], d[i][2], uc[i][3]); i++;
      94  
      95    si[i][0] = __builtin_vsx_vperm (si[i][1], si[i][2], uc[i][3]); i++;
      96    ss[i][0] = __builtin_vsx_vperm (ss[i][1], ss[i][2], uc[i][3]); i++;
      97    sc[i][0] = __builtin_vsx_vperm (sc[i][1], sc[i][2], uc[i][3]); i++;
      98    f[i][0] = __builtin_vsx_vperm (f[i][1], f[i][2], uc[i][3]); i++;
      99    d[i][0] = __builtin_vsx_vperm (d[i][1], d[i][2], uc[i][3]); i++;
     100  
     101    return i;
     102  }
     103  
     104  int do_xxperm (void)
     105  {
     106    int i = 0;
     107  
     108    d[i][0] = __builtin_vsx_xxpermdi_2df (d[i][1], d[i][2], 0); i++;
     109    d[i][0] = __builtin_vsx_xxpermdi (d[i][1], d[i][2], 1); i++;
     110    return i;
     111  }
     112  
     113  double x, y;
     114  void do_concat (void)
     115  {
     116    d[0][0] = __builtin_vsx_concat_2df (x, y);
     117  }
     118  
     119  void do_set (void)
     120  {
     121    d[0][0] = __builtin_vsx_set_2df (d[0][1], x, 0);
     122    d[1][0] = __builtin_vsx_set_2df (d[1][1], y, 1);
     123  }
     124  
     125  extern double z[][4];
     126  
     127  int do_math (void)
     128  {
     129    int i = 0;
     130  
     131    d[i][0] = __builtin_vsx_xvrdpi  (d[i][1]); i++;
     132    d[i][0] = __builtin_vsx_xvrdpic (d[i][1]); i++;
     133    d[i][0] = __builtin_vsx_xvrdpim (d[i][1]); i++;
     134    d[i][0] = __builtin_vsx_xvrdpip (d[i][1]); i++;
     135    d[i][0] = __builtin_vsx_xvrdpiz (d[i][1]); i++;
     136  
     137    f[i][0] = __builtin_vsx_xvrspi  (f[i][1]); i++;
     138    f[i][0] = __builtin_vsx_xvrspic (f[i][1]); i++;
     139    f[i][0] = __builtin_vsx_xvrspim (f[i][1]); i++;
     140    f[i][0] = __builtin_vsx_xvrspip (f[i][1]); i++;
     141    f[i][0] = __builtin_vsx_xvrspiz (f[i][1]); i++;
     142  
     143    z[i][0] = __builtin_vsx_xsrdpi  (z[i][1]); i++;
     144    z[i][0] = __builtin_vsx_xsrdpic (z[i][1]); i++;
     145    z[i][0] = __builtin_vsx_xsrdpim (z[i][1]); i++;
     146    z[i][0] = __builtin_vsx_xsrdpip (z[i][1]); i++;
     147    z[i][0] = __builtin_vsx_xsrdpiz (z[i][1]); i++;
     148    z[i][0] = __builtin_vsx_xsmaxdp (z[i][1], z[i][0]); i++;
     149    z[i][0] = __builtin_vsx_xsmindp (z[i][1], z[i][0]); i++;
     150    return i;
     151  }
     152  
     153  int do_cmp (void)
     154  {
     155    int i = 0;
     156  
     157    d[i][0] = __builtin_vsx_xvcmpeqdp (d[i][1], d[i][2]); i++;
     158    d[i][0] = __builtin_vsx_xvcmpgtdp (d[i][1], d[i][2]); i++;
     159    d[i][0] = __builtin_vsx_xvcmpgedp (d[i][1], d[i][2]); i++;
     160  
     161    f[i][0] = __builtin_vsx_xvcmpeqsp (f[i][1], f[i][2]); i++;
     162    f[i][0] = __builtin_vsx_xvcmpgtsp (f[i][1], f[i][2]); i++;
     163    f[i][0] = __builtin_vsx_xvcmpgesp (f[i][1], f[i][2]); i++;
     164    return i;
     165  }
     166  
     167  int do_logical (void)
     168  {
     169    int i = 0;
     170  
     171    si[i][0] = __builtin_vsx_xxland (si[i][1], si[i][2]); i++;
     172    si[i][0] = __builtin_vsx_xxlandc (si[i][1], si[i][2]); i++;
     173    si[i][0] = __builtin_vsx_xxlnor (si[i][1], si[i][2]); i++;
     174    si[i][0] = __builtin_vsx_xxlor (si[i][1], si[i][2]); i++;
     175    si[i][0] = __builtin_vsx_xxlxor (si[i][1], si[i][2]); i++;
     176  
     177    ss[i][0] = __builtin_vsx_xxland (ss[i][1], ss[i][2]); i++;
     178    ss[i][0] = __builtin_vsx_xxlandc (ss[i][1], ss[i][2]); i++;
     179    ss[i][0] = __builtin_vsx_xxlnor (ss[i][1], ss[i][2]); i++;
     180    ss[i][0] = __builtin_vsx_xxlor (ss[i][1], ss[i][2]); i++;
     181    ss[i][0] = __builtin_vsx_xxlxor (ss[i][1], ss[i][2]); i++;
     182  
     183    sc[i][0] = __builtin_vsx_xxland (sc[i][1], sc[i][2]); i++;
     184    sc[i][0] = __builtin_vsx_xxlandc (sc[i][1], sc[i][2]); i++;
     185    sc[i][0] = __builtin_vsx_xxlnor (sc[i][1], sc[i][2]); i++;
     186    sc[i][0] = __builtin_vsx_xxlor (sc[i][1], sc[i][2]); i++;
     187    sc[i][0] = __builtin_vsx_xxlxor (sc[i][1], sc[i][2]); i++;
     188  
     189    d[i][0] = __builtin_vsx_xxland (d[i][1], d[i][2]); i++;
     190    d[i][0] = __builtin_vsx_xxlandc (d[i][1], d[i][2]); i++;
     191    d[i][0] = __builtin_vsx_xxlnor (d[i][1], d[i][2]); i++;
     192    d[i][0] = __builtin_vsx_xxlor (d[i][1], d[i][2]); i++;
     193    d[i][0] = __builtin_vsx_xxlxor (d[i][1], d[i][2]); i++;
     194  
     195    f[i][0] = __builtin_vsx_xxland (f[i][1], f[i][2]); i++;
     196    f[i][0] = __builtin_vsx_xxlandc (f[i][1], f[i][2]); i++;
     197    f[i][0] = __builtin_vsx_xxlnor (f[i][1], f[i][2]); i++;
     198    f[i][0] = __builtin_vsx_xxlor (f[i][1], f[i][2]); i++;
     199    f[i][0] = __builtin_vsx_xxlxor (f[i][1], f[i][2]); i++;
     200    return i;
     201  }
     202  
     203  int do_xxsldwi (void)
     204  {
     205    int i = 0;
     206  
     207    si[i][0] = __builtin_vsx_xxsldwi (si[i][1], si[i][2], 0); i++;
     208    ss[i][0] = __builtin_vsx_xxsldwi (ss[i][1], ss[i][2], 1); i++;
     209    sc[i][0] = __builtin_vsx_xxsldwi (sc[i][1], sc[i][2], 2); i++;
     210    ui[i][0] = __builtin_vsx_xxsldwi (ui[i][1], ui[i][2], 3); i++;
     211    us[i][0] = __builtin_vsx_xxsldwi (us[i][1], us[i][2], 0); i++;
     212    uc[i][0] = __builtin_vsx_xxsldwi (uc[i][1], uc[i][2], 1); i++;
     213    f[i][0] = __builtin_vsx_xxsldwi (f[i][1], f[i][2], 2); i++;
     214    d[i][0] = __builtin_vsx_xxsldwi (d[i][1], d[i][2], 3); i++;
     215    return i;
     216  }
     217  
     218  int do_xvcvsxdsp (void)
     219  {
     220    int i = 0;
     221  
     222    f[i][0] = __builtin_vsx_xvcvsxdsp (sll[i][1]); i++;
     223  
     224    return i;
     225  }
     226  
     227  int do_xvcvuxdsp (void)
     228  {
     229    int i = 0;
     230  
     231    f[i][0] = __builtin_vsx_xvcvuxdsp (ull[i][1]); i++;
     232  
     233    return i;
     234  }
     235