Work around internal compiler error on GCC 4.7.0.

This commit is contained in:
Brandon Wright 2012-04-26 05:06:24 -05:00
parent dfdf197b27
commit b0233de08e
1 changed files with 16 additions and 11 deletions

View File

@ -877,23 +877,24 @@ filter_scanlines (void *src_buffer,
int height) int height)
{ {
register int x, y; register int x, y;
register uint16 *src, *dst_a, *dst_b;
uint8 shift = scanline_shifts[gui_config->scanline_filter_intensity]; uint8 shift = scanline_shifts[gui_config->scanline_filter_intensity];
src = (uint16 *) src_buffer;
dst_a = (uint16 *) dst_buffer;
dst_b = ((uint16 *) dst_buffer) + (dst_pitch >> 1);
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {
register uint16 *src = (uint16 *) ((uint8 *) src_buffer + y * src_pitch);
register uint16 *dst_a = (uint16 *) ((uint8 *) dst_buffer + (y * 2) * dst_pitch);
register uint16 *dst_b = (uint16 *) ((uint8 *) dst_buffer + ((y * 2) + 1) * dst_pitch);
for (x = 0; x < width; x++) for (x = 0; x < width; x++)
{ {
register uint8 rs, gs, bs, /* Source components */ register uint8 rs, gs, bs, /* Source components */
rh, gh, bh; /* High (bright) components */ rh, gh, bh; /* High (bright) components */
rs = ((*(src + x) >> 10) & 0x1f); rs = ((src[x] >> 10) & 0x1f);
gs = ((*(src + x) >> 5) & 0x1f); gs = ((src[x] >> 5) & 0x1f);
bs = ((*(src + x)) & 0x1f); bs = ((src[x]) & 0x1f);
rh = rs + (rs >> shift); rh = rs + (rs >> shift);
gh = gs + (gs >> shift); gh = gs + (gs >> shift);
@ -903,11 +904,15 @@ filter_scanlines (void *src_buffer,
gh = (gh > 31) ? 31 : gh; gh = (gh > 31) ? 31 : gh;
bh = (bh > 31) ? 31 : bh; bh = (bh > 31) ? 31 : bh;
*(dst_a + x) = (rh << 10) | (gh << 5) | (bh); dst_a[x] = (rh << 10) + (gh << 5) + (bh);
*(dst_b + x) = ((rs + rs - rh) << 10) | dst_b[x] = ((rs + rs - rh) << 10) +
((gs + gs - gh) << 5) | ((gs + gs - gh) << 5) +
(bs + bs - bh); (bs + bs - bh);
} }
src += src_pitch >> 1;
dst_a += dst_pitch;
dst_b += dst_pitch;
} }
return; return;