const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0);
const_vector unsigned char zero = (const_vector unsigned char)vec_splat_u8(0);
void diff_pixels_altivec(DCTELEM *restrict block, const uint8_t *s1,        const uint8_t *s2, int stride){    int i;    vector unsigned char perm, bytes, *pixv;    const vector unsigned char zero = (const vector unsigned char)vec_splat_u8(0);    vector signed short shorts1, shorts2;    for(i=0;i<4;i++)    {        // Read potentially unaligned pixels        // We're reading 16 pixels, and actually only want 8,        // but we simply ignore the extras.        perm = vec_lvsl(0, s1);        pixv = (vector unsigned char *) s1;        bytes = vec_perm(pixv[0], pixv[1], perm);        // convert the bytes into shorts        shorts1 = (vector signed short)vec_mergeh(zero, bytes);        // Do the same for the second block of pixels        perm = vec_lvsl(0, s2);        pixv = (vector unsigned char *) s2;        bytes = vec_perm(pixv[0], pixv[1], perm);        // convert the bytes into shorts        shorts2 = (vector signed short)vec_mergeh(zero, bytes);        // Do the subtraction        shorts1 = vec_sub(shorts1, shorts2);        // save the data to the block, we assume the block is 16-byte aligned        vec_st(shorts1, 0, (vector signed short*)block);        s1 += stride;        s2 += stride;        block += 8;        // The code below is a copy of the code above... This is a manual        // unroll.        // Read potentially unaligned pixels        // We're reading 16 pixels, and actually only want 8,        // but we simply ignore the extras.        perm = vec_lvsl(0, s1);        pixv = (vector unsigned char *) s1;        bytes = vec_perm(pixv[0], pixv[1], perm);        // convert the bytes into shorts        shorts1 = (vector signed short)vec_mergeh(zero, bytes);        // Do the same for the second block of pixels        perm = vec_lvsl(0, s2);        pixv = (vector unsigned char *) s2;        bytes = vec_perm(pixv[0], pixv[1], perm);        // convert the bytes into shorts        shorts2 = (vector signed short)vec_mergeh(zero, bytes);        // Do the subtraction        shorts1 = vec_sub(shorts1, shorts2);        // save the data to the block, we assume the block is 16-byte aligned        vec_st(shorts1, 0, (vector signed short*)block);        s1 += stride;        s2 += stride;        block += 8;    }}