Optimize 16 bit lcd_fillrect()

move switch outside loop

adds ~10000 ops/s in test_gfx

Change-Id: I2204d637282aae4bbc0dde31395c6cc0568f3247
This commit is contained in:
William Wilgus 2024-12-21 18:19:38 -05:00
parent d6e99178aa
commit 8091477f8d

View file

@ -169,32 +169,41 @@ void lcd_fillrect(int x, int y, int width, int height)
len = STRIDE_MAIN(width, height);
step = STRIDE_MAIN(ROW_INC, COL_INC);
do
switch (fillopt)
{
switch (fillopt)
case OPT_SET:
{
case OPT_SET:
memset16(dst, bits, len);
break;
case OPT_COPY:
memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset),
len * sizeof(fb_data));
break;
case OPT_NONE: /* DRMODE_COMPLEMENT */
{
fb_data *start = dst;
fb_data *end = start + len;
do
*start = ~(*start);
while (++start < end);
{
memset16(dst, bits, len);
dst += step;
} while (dst <= dst_end);
break;
}
case OPT_COPY:
{
do
{
memcpy(dst, PTR_ADD(dst, lcd_backdrop_offset),
len * sizeof(fb_data));
dst += step;
} while (dst <= dst_end);
break;
}
case OPT_NONE: /* DRMODE_COMPLEMENT */
{
do
{
fb_data *start = dst;
fb_data *end = start + len;
do
*start = ~(*start);
while (++start < end);
dst += step;
} while (dst <= dst_end);
break;
}
}
dst += step;
}
while (dst <= dst_end);
}
/* About Rockbox' internal monochrome bitmap format: