> -             for (j = k; j--; ) {
> -                     shift -= ppw;
> -                     end_mask = tab[(*src >> shift) & bit_mask];
> -                     *dst++ = (end_mask & eorx) ^ bgx;
> -                     if (!shift) {
> -                             shift = 8;
> -                             src++;
> +             for (j = k; j; j -= jdecr, ++src) {
> +                     switch (ppw) {
> +                     case 4: /* 8 bpp */
> +                             *dst++ = colortab[(*src >> 4) & bit_mask];
> +                             *dst++ = colortab[(*src >> 0) & bit_mask];
> +                             break;
> +                     case 2: /* 16 bpp */
> +                             *dst++ = colortab[(*src >> 6) & bit_mask];
> +                             *dst++ = colortab[(*src >> 4) & bit_mask];
> +                             *dst++ = colortab[(*src >> 2) & bit_mask];
> +                             *dst++ = colortab[(*src >> 0) & bit_mask];
> +                             break;
> +                     case 1: /* 32 bpp */
> +                             *dst++ = colortab[(*src >> 7) & bit_mask];
> +                             *dst++ = colortab[(*src >> 6) & bit_mask];
> +                             *dst++ = colortab[(*src >> 5) & bit_mask];
> +                             *dst++ = colortab[(*src >> 4) & bit_mask];
> +                             *dst++ = colortab[(*src >> 3) & bit_mask];
> +                             *dst++ = colortab[(*src >> 2) & bit_mask];
> +                             *dst++ = colortab[(*src >> 1) & bit_mask];
> +                             *dst++ = colortab[(*src >> 0) & bit_mask];
> +                             break;
>                       }

How about moving the switch out of the loop, i.e.

switch (ppw) {
case 4:
    for (j = ...) {
        *dst++ = colortab[(*src >> 4) & bit_mask];
        *dst++ = colortab[(*src >> 0) & bit_mask];
    }
[ ... ]
}

?

take care,
  Gerd

Reply via email to