/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
/* { dg-require-effective-target vect_unpack } */
/* { dg-require-effective-target vect_pack_trunc } */

#define SHIFTFORDIV255(a)\
    ((((a) >> 8) + a) >> 8)

#define DIV255(a)\
    SHIFTFORDIV255(a + 0x80)

typedef unsigned char uint8_t;

void
opSourceOver_premul(uint8_t* restrict Rrgba,
                    const uint8_t* restrict Srgba,
                    const uint8_t* restrict Drgba, int len)
{
  Rrgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
  Srgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
  Drgba = __builtin_assume_aligned (Rrgba, __BIGGEST_ALIGNMENT__);
  int i = 0;
  for (; i < len*4; i += 4)
    {
      uint8_t Sa = Srgba[i + 3];
      Rrgba[i + 0] = DIV255(Srgba[i + 0] * 255 + Drgba[i + 0] * (255 - Sa));
      Rrgba[i + 1] = DIV255(Srgba[i + 1] * 255 + Drgba[i + 1] * (255 - Sa));
      Rrgba[i + 2] = DIV255(Srgba[i + 2] * 255 + Drgba[i + 2] * (255 - Sa));
      Rrgba[i + 3] = DIV255(Srgba[i + 3] * 255 + Drgba[i + 3] * (255 - Sa));
    }
}

/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
