lkml.org 
[lkml]   [2005]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [Linux-fbdev-devel] [PATCH 1/1 2.6.13] framebuffer: bit_putcs() optimization for 8x* fonts
Hi,

On Wed, 31 Aug 2005, Knut Petersen wrote:

> +static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, +
> u32 s_pitch, u32 height)
> +{
> + int i, j;
> +
> + if (likely(s_pitch==1))
> + for(i=0; i < height; i++)
> + dst[d_pitch*i] = src[i];
> + else if (s_pitch==2)
> + for(i=0; i < height; i++) {
> + *(u16 *)dst = ((u16 *)src)[i];
> + dst += d_pitch;
> + }
> + else {
> + d_pitch -= s_pitch;
> + for (i = height; i--; ) {
> + for (j = 0; j < s_pitch; j++)
> + *dst++ = *src++;
> + dst += d_pitch;
> + }
> + }
> +}

Why did you add the multiply back?
You have now 3 slightly different variants of the same, which isn't really
an improvement. In my example I showed you how to generate the first and
last version from the same source.
If you also want to optimize for other sizes, you might want to always
inline the function, if the function call overhead is the largest part
anyway, the special case for 2 bytes might not be needed anymore.

BTW this version saves another condition:

static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height)
{
int i, j;

d_pitch -= s_pitch;
i = height;
do {
/* s_pitch is a few bytes at the most, memcpy is suboptimal */
j = s_pitch;
do
*dst++ = *src++;
while (--j > 0);
dst += d_pitch;
} while (--i > 0);
}

bye, Roman

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-08-31 19:18    [W:0.056 / U:3.088 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site