/* { dg-require-effective-target int32plus } */
/* { dg-options "-O1 -ffast-math -floop-nest-optimize" } */

int adler32(int adler, char *buf, int n)
{
  int sum = 0;
  do {
     adler += buf[0];
     sum += adler;
     adler += buf[1];
     sum += adler;
     adler += buf[2];
     sum += adler;
     adler += buf[3];
     sum += adler;
  } while (--n);
  return adler | (sum << 16);
}
