/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O2" } */

float
load_store_sf (unsigned long num,
	       const float *from_ptr,
	       float *to_ptr,
	       const unsigned long *in_mask_ptr,
	       const unsigned long *out_mask_ptr)
{
  float value00	= 0.0f;
  float value01	= 0.0f;
  float value02	= 0.0f;
  float value03	= 0.0f;
  float value04	= 0.0f;
  float value05	= 0.0f;
  float value06	= 0.0f;
  float value07	= 0.0f;
  float value08	= 0.0f;
  float value09	= 0.0f;
  float value10	= 0.0f;
  float value11	= 0.0f;
  float value12	= 0.0f;
  float value13	= 0.0f;
  float value14	= 0.0f;
  float value15	= 0.0f;
  float value16	= 0.0f;
  float value17	= 0.0f;
  float value18	= 0.0f;
  float value19	= 0.0f;
  float value20	= 0.0f;
  float value21	= 0.0f;
  float value22	= 0.0f;
  float value23	= 0.0f;
  float value24	= 0.0f;
  float value25	= 0.0f;
  float value26	= 0.0f;
  float value27	= 0.0f;
  float value28	= 0.0f;
  float value29	= 0.0f;
  float value30	= 0.0f;
  float value31	= 0.0f;
  float value32	= 0.0f;
  float value33	= 0.0f;
  float value34	= 0.0f;
  float value35	= 0.0f;
  float value36	= 0.0f;
  float value37	= 0.0f;
  float value38	= 0.0f;
  float value39	= 0.0f;
  unsigned long in_mask, in_mask2;
  unsigned long out_mask, out_mask2;
  unsigned long i;

  for (i = 0; i < num; i++)
    {
      in_mask = *in_mask_ptr++;
      in_mask2 = *in_mask_ptr++;
      if ((in_mask & (1L <<  0)) != 0L)
	value00 = *from_ptr++;

      if ((in_mask & (1L <<  1)) != 0L)
	value01 = *from_ptr++;

      if ((in_mask & (1L <<  2)) != 0L)
	value02 = *from_ptr++;

      if ((in_mask & (1L <<  3)) != 0L)
	value03 = *from_ptr++;

      if ((in_mask & (1L <<  4)) != 0L)
	value04 = *from_ptr++;

      if ((in_mask & (1L <<  5)) != 0L)
	value05 = *from_ptr++;

      if ((in_mask & (1L <<  6)) != 0L)
	value06 = *from_ptr++;

      if ((in_mask & (1L <<  7)) != 0L)
	value07 = *from_ptr++;

      if ((in_mask & (1L <<  8)) != 0L)
	value08 = *from_ptr++;

      if ((in_mask & (1L <<  9)) != 0L)
	value09 = *from_ptr++;

      if ((in_mask & (1L << 10)) != 0L)
	value10 = *from_ptr++;

      if ((in_mask & (1L << 11)) != 0L)
	value11 = *from_ptr++;

      if ((in_mask & (1L << 12)) != 0L)
	value12 = *from_ptr++;

      if ((in_mask & (1L << 13)) != 0L)
	value13 = *from_ptr++;

      if ((in_mask & (1L << 14)) != 0L)
	value14 = *from_ptr++;

      if ((in_mask & (1L << 15)) != 0L)
	value15 = *from_ptr++;

      if ((in_mask & (1L << 16)) != 0L)
	value16 = *from_ptr++;

      if ((in_mask & (1L << 17)) != 0L)
	value17 = *from_ptr++;

      if ((in_mask & (1L << 18)) != 0L)
	value18 = *from_ptr++;

      if ((in_mask & (1L << 19)) != 0L)
	value19 = *from_ptr++;

      if ((in_mask2 & (1L << 0)) != 0L)
	value20 = *from_ptr++;

      if ((in_mask2 & (1L << 1)) != 0L)
	value21 = *from_ptr++;

      if ((in_mask2 & (1L << 2)) != 0L)
	value22 = *from_ptr++;

      if ((in_mask2 & (1L << 3)) != 0L)
	value23 = *from_ptr++;

      if ((in_mask2 & (1L << 4)) != 0L)
	value24 = *from_ptr++;

      if ((in_mask2 & (1L << 5)) != 0L)
	value25 = *from_ptr++;

      if ((in_mask2 & (1L << 6)) != 0L)
	value26 = *from_ptr++;

      if ((in_mask2 & (1L << 7)) != 0L)
	value27 = *from_ptr++;

      if ((in_mask2 & (1L << 8)) != 0L)
	value28 = *from_ptr++;

      if ((in_mask2 & (1L << 9)) != 0L)
	value29 = *from_ptr++;

      if ((in_mask2 & (1L << 10)) != 0L)
	value30 = *from_ptr++;

      if ((in_mask2 & (1L << 11)) != 0L)
	value31 = *from_ptr++;

      if ((in_mask2 & (1L << 12)) != 0L)
	value32 = *from_ptr++;

      if ((in_mask2 & (1L << 13)) != 0L)
	value33 = *from_ptr++;

      if ((in_mask2 & (1L << 14)) != 0L)
	value34 = *from_ptr++;

      if ((in_mask2 & (1L << 15)) != 0L)
	value35 = *from_ptr++;

      if ((in_mask2 & (1L << 16)) != 0L)
	value36 = *from_ptr++;

      if ((in_mask2 & (1L << 17)) != 0L)
	value37 = *from_ptr++;

      if ((in_mask2 & (1L << 18)) != 0L)
	value38 = *from_ptr++;

      if ((in_mask2 & (1L << 19)) != 0L)
	value39 = *from_ptr++;

      out_mask = *out_mask_ptr++;
      out_mask2 = *out_mask_ptr++;
      if ((out_mask & (1L <<  0)) != 0L)
	*to_ptr++ = value00;

      if ((out_mask & (1L <<  1)) != 0L)
	*to_ptr++ = value01;

      if ((out_mask & (1L <<  2)) != 0L)
	*to_ptr++ = value02;

      if ((out_mask & (1L <<  3)) != 0L)
	*to_ptr++ = value03;

      if ((out_mask & (1L <<  4)) != 0L)
	*to_ptr++ = value04;

      if ((out_mask & (1L <<  5)) != 0L)
	*to_ptr++ = value05;

      if ((out_mask & (1L <<  6)) != 0L)
	*to_ptr++ = value06;

      if ((out_mask & (1L <<  7)) != 0L)
	*to_ptr++ = value07;

      if ((out_mask & (1L <<  8)) != 0L)
	*to_ptr++ = value08;

      if ((out_mask & (1L <<  9)) != 0L)
	*to_ptr++ = value09;

      if ((out_mask & (1L << 10)) != 0L)
	*to_ptr++ = value10;

      if ((out_mask & (1L << 11)) != 0L)
	*to_ptr++ = value11;

      if ((out_mask & (1L << 12)) != 0L)
	*to_ptr++ = value12;

      if ((out_mask & (1L << 13)) != 0L)
	*to_ptr++ = value13;

      if ((out_mask & (1L << 14)) != 0L)
	*to_ptr++ = value14;

      if ((out_mask & (1L << 15)) != 0L)
	*to_ptr++ = value15;

      if ((out_mask & (1L << 16)) != 0L)
	*to_ptr++ = value16;

      if ((out_mask & (1L << 17)) != 0L)
	*to_ptr++ = value17;

      if ((out_mask & (1L << 18)) != 0L)
	*to_ptr++ = value18;

      if ((out_mask & (1L << 19)) != 0L)
	*to_ptr++ = value19;

      if ((out_mask2 & (1L << 0)) != 0L)
	*to_ptr++ = value20;

      if ((out_mask2 & (1L << 1)) != 0L)
	*to_ptr++ = value21;

      if ((out_mask2 & (1L << 2)) != 0L)
	*to_ptr++ = value22;

      if ((out_mask2 & (1L << 3)) != 0L)
	*to_ptr++ = value23;

      if ((out_mask2 & (1L << 4)) != 0L)
	*to_ptr++ = value24;

      if ((out_mask2 & (1L << 5)) != 0L)
	*to_ptr++ = value25;

      if ((out_mask2 & (1L << 6)) != 0L)
	*to_ptr++ = value26;

      if ((out_mask2 & (1L << 7)) != 0L)
	*to_ptr++ = value27;

      if ((out_mask2 & (1L << 8)) != 0L)
	*to_ptr++ = value28;

      if ((out_mask2 & (1L << 9)) != 0L)
	*to_ptr++ = value29;

      if ((out_mask2 & (1L << 10)) != 0L)
	*to_ptr++ = value30;

      if ((out_mask2 & (1L << 11)) != 0L)
	*to_ptr++ = value31;

      if ((out_mask2 & (1L << 12)) != 0L)
	*to_ptr++ = value32;

      if ((out_mask2 & (1L << 13)) != 0L)
	*to_ptr++ = value33;

      if ((out_mask2 & (1L << 14)) != 0L)
	*to_ptr++ = value34;

      if ((out_mask2 & (1L << 15)) != 0L)
	*to_ptr++ = value35;

      if ((out_mask2 & (1L << 16)) != 0L)
	*to_ptr++ = value36;

      if ((out_mask2 & (1L << 17)) != 0L)
	*to_ptr++ = value37;

      if ((out_mask2 & (1L << 18)) != 0L)
	*to_ptr++ = value38;

      if ((out_mask2 & (1L << 19)) != 0L)
	*to_ptr++ = value39;
    }

  return (  value00 + value01 + value02 + value03 + value04
	  + value05 + value06 + value07 + value08 + value09
	  + value10 + value11 + value12 + value13 + value14
	  + value15 + value16 + value17 + value18 + value19
	  + value20 + value21 + value22 + value23 + value24
	  + value25 + value26 + value27 + value28 + value29
	  + value30 + value31 + value32 + value33 + value34
	  + value35 + value36 + value37 + value38 + value39);
}

double
load_store_df (unsigned long num,
	       const double *from_ptr,
	       double *to_ptr,
	       const unsigned long *in_mask_ptr,
	       const unsigned long *out_mask_ptr)
{
  double value00	= 0.0;
  double value01	= 0.0;
  double value02	= 0.0;
  double value03	= 0.0;
  double value04	= 0.0;
  double value05	= 0.0;
  double value06	= 0.0;
  double value07	= 0.0;
  double value08	= 0.0;
  double value09	= 0.0;
  double value10	= 0.0;
  double value11	= 0.0;
  double value12	= 0.0;
  double value13	= 0.0;
  double value14	= 0.0;
  double value15	= 0.0;
  double value16	= 0.0;
  double value17	= 0.0;
  double value18	= 0.0;
  double value19	= 0.0;
  double value20	= 0.0;
  double value21	= 0.0;
  double value22	= 0.0;
  double value23	= 0.0;
  double value24	= 0.0;
  double value25	= 0.0;
  double value26	= 0.0;
  double value27	= 0.0;
  double value28	= 0.0;
  double value29	= 0.0;
  double value30	= 0.0;
  double value31	= 0.0;
  double value32	= 0.0;
  double value33	= 0.0;
  double value34	= 0.0;
  double value35	= 0.0;
  double value36	= 0.0;
  double value37	= 0.0;
  double value38	= 0.0;
  double value39	= 0.0;
  unsigned long in_mask, in_mask2;
  unsigned long out_mask, out_mask2;
  unsigned long i;

  for (i = 0; i < num; i++)
    {
      in_mask = *in_mask_ptr++;
      in_mask2 = *in_mask_ptr++;
      if ((in_mask & (1L <<  0)) != 0L)
	value00 = *from_ptr++;

      if ((in_mask & (1L <<  1)) != 0L)
	value01 = *from_ptr++;

      if ((in_mask & (1L <<  2)) != 0L)
	value02 = *from_ptr++;

      if ((in_mask & (1L <<  3)) != 0L)
	value03 = *from_ptr++;

      if ((in_mask & (1L <<  4)) != 0L)
	value04 = *from_ptr++;

      if ((in_mask & (1L <<  5)) != 0L)
	value05 = *from_ptr++;

      if ((in_mask & (1L <<  6)) != 0L)
	value06 = *from_ptr++;

      if ((in_mask & (1L <<  7)) != 0L)
	value07 = *from_ptr++;

      if ((in_mask & (1L <<  8)) != 0L)
	value08 = *from_ptr++;

      if ((in_mask & (1L <<  9)) != 0L)
	value09 = *from_ptr++;

      if ((in_mask & (1L << 10)) != 0L)
	value10 = *from_ptr++;

      if ((in_mask & (1L << 11)) != 0L)
	value11 = *from_ptr++;

      if ((in_mask & (1L << 12)) != 0L)
	value12 = *from_ptr++;

      if ((in_mask & (1L << 13)) != 0L)
	value13 = *from_ptr++;

      if ((in_mask & (1L << 14)) != 0L)
	value14 = *from_ptr++;

      if ((in_mask & (1L << 15)) != 0L)
	value15 = *from_ptr++;

      if ((in_mask & (1L << 16)) != 0L)
	value16 = *from_ptr++;

      if ((in_mask & (1L << 17)) != 0L)
	value17 = *from_ptr++;

      if ((in_mask & (1L << 18)) != 0L)
	value18 = *from_ptr++;

      if ((in_mask & (1L << 19)) != 0L)
	value19 = *from_ptr++;

      if ((in_mask2 & (1L << 0)) != 0L)
	value20 = *from_ptr++;

      if ((in_mask2 & (1L << 1)) != 0L)
	value21 = *from_ptr++;

      if ((in_mask2 & (1L << 2)) != 0L)
	value22 = *from_ptr++;

      if ((in_mask2 & (1L << 3)) != 0L)
	value23 = *from_ptr++;

      if ((in_mask2 & (1L << 4)) != 0L)
	value24 = *from_ptr++;

      if ((in_mask2 & (1L << 5)) != 0L)
	value25 = *from_ptr++;

      if ((in_mask2 & (1L << 6)) != 0L)
	value26 = *from_ptr++;

      if ((in_mask2 & (1L << 7)) != 0L)
	value27 = *from_ptr++;

      if ((in_mask2 & (1L << 8)) != 0L)
	value28 = *from_ptr++;

      if ((in_mask2 & (1L << 9)) != 0L)
	value29 = *from_ptr++;

      if ((in_mask2 & (1L << 10)) != 0L)
	value30 = *from_ptr++;

      if ((in_mask2 & (1L << 11)) != 0L)
	value31 = *from_ptr++;

      if ((in_mask2 & (1L << 12)) != 0L)
	value32 = *from_ptr++;

      if ((in_mask2 & (1L << 13)) != 0L)
	value33 = *from_ptr++;

      if ((in_mask2 & (1L << 14)) != 0L)
	value34 = *from_ptr++;

      if ((in_mask2 & (1L << 15)) != 0L)
	value35 = *from_ptr++;

      if ((in_mask2 & (1L << 16)) != 0L)
	value36 = *from_ptr++;

      if ((in_mask2 & (1L << 17)) != 0L)
	value37 = *from_ptr++;

      if ((in_mask2 & (1L << 18)) != 0L)
	value38 = *from_ptr++;

      if ((in_mask2 & (1L << 19)) != 0L)
	value39 = *from_ptr++;

      out_mask = *out_mask_ptr++;
      out_mask2 = *out_mask_ptr++;
      if ((out_mask & (1L <<  0)) != 0L)
	*to_ptr++ = value00;

      if ((out_mask & (1L <<  1)) != 0L)
	*to_ptr++ = value01;

      if ((out_mask & (1L <<  2)) != 0L)
	*to_ptr++ = value02;

      if ((out_mask & (1L <<  3)) != 0L)
	*to_ptr++ = value03;

      if ((out_mask & (1L <<  4)) != 0L)
	*to_ptr++ = value04;

      if ((out_mask & (1L <<  5)) != 0L)
	*to_ptr++ = value05;

      if ((out_mask & (1L <<  6)) != 0L)
	*to_ptr++ = value06;

      if ((out_mask & (1L <<  7)) != 0L)
	*to_ptr++ = value07;

      if ((out_mask & (1L <<  8)) != 0L)
	*to_ptr++ = value08;

      if ((out_mask & (1L <<  9)) != 0L)
	*to_ptr++ = value09;

      if ((out_mask & (1L << 10)) != 0L)
	*to_ptr++ = value10;

      if ((out_mask & (1L << 11)) != 0L)
	*to_ptr++ = value11;

      if ((out_mask & (1L << 12)) != 0L)
	*to_ptr++ = value12;

      if ((out_mask & (1L << 13)) != 0L)
	*to_ptr++ = value13;

      if ((out_mask & (1L << 14)) != 0L)
	*to_ptr++ = value14;

      if ((out_mask & (1L << 15)) != 0L)
	*to_ptr++ = value15;

      if ((out_mask & (1L << 16)) != 0L)
	*to_ptr++ = value16;

      if ((out_mask & (1L << 17)) != 0L)
	*to_ptr++ = value17;

      if ((out_mask & (1L << 18)) != 0L)
	*to_ptr++ = value18;

      if ((out_mask & (1L << 19)) != 0L)
	*to_ptr++ = value19;

      if ((out_mask2 & (1L << 0)) != 0L)
	*to_ptr++ = value20;

      if ((out_mask2 & (1L << 1)) != 0L)
	*to_ptr++ = value21;

      if ((out_mask2 & (1L << 2)) != 0L)
	*to_ptr++ = value22;

      if ((out_mask2 & (1L << 3)) != 0L)
	*to_ptr++ = value23;

      if ((out_mask2 & (1L << 4)) != 0L)
	*to_ptr++ = value24;

      if ((out_mask2 & (1L << 5)) != 0L)
	*to_ptr++ = value25;

      if ((out_mask2 & (1L << 6)) != 0L)
	*to_ptr++ = value26;

      if ((out_mask2 & (1L << 7)) != 0L)
	*to_ptr++ = value27;

      if ((out_mask2 & (1L << 8)) != 0L)
	*to_ptr++ = value28;

      if ((out_mask2 & (1L << 9)) != 0L)
	*to_ptr++ = value29;

      if ((out_mask2 & (1L << 10)) != 0L)
	*to_ptr++ = value30;

      if ((out_mask2 & (1L << 11)) != 0L)
	*to_ptr++ = value31;

      if ((out_mask2 & (1L << 12)) != 0L)
	*to_ptr++ = value32;

      if ((out_mask2 & (1L << 13)) != 0L)
	*to_ptr++ = value33;

      if ((out_mask2 & (1L << 14)) != 0L)
	*to_ptr++ = value34;

      if ((out_mask2 & (1L << 15)) != 0L)
	*to_ptr++ = value35;

      if ((out_mask2 & (1L << 16)) != 0L)
	*to_ptr++ = value36;

      if ((out_mask2 & (1L << 17)) != 0L)
	*to_ptr++ = value37;

      if ((out_mask2 & (1L << 18)) != 0L)
	*to_ptr++ = value38;

      if ((out_mask2 & (1L << 19)) != 0L)
	*to_ptr++ = value39;
    }

  return (  value00 + value01 + value02 + value03 + value04
	  + value05 + value06 + value07 + value08 + value09
	  + value10 + value11 + value12 + value13 + value14
	  + value15 + value16 + value17 + value18 + value19
	  + value20 + value21 + value22 + value23 + value24
	  + value25 + value26 + value27 + value28 + value29
	  + value30 + value31 + value32 + value33 + value34
	  + value35 + value36 + value37 + value38 + value39);
}

/* { dg-final { scan-assembler "lxsspx"  } } */
/* { dg-final { scan-assembler "lxsdx"   } } */
/* { dg-final { scan-assembler "stxsspx" } } */
/* { dg-final { scan-assembler "stxsdx"  } } */
/* { dg-final { scan-assembler "xsaddsp" } } */
/* { dg-final { scan-assembler "xsadddp" } } */
