1
0
Fork 0
forked from len0rd/rockbox

Convert a number of places in core and plugins to use the BIT_N() macro instead of 1<<n. Speeds up things on SH1, and also reduces core binsize. Most notable speedups: 1 bit lcd driver: drawpixel +20%, drawline + 27%, hline +5%; jpeg viewer: +8% for 1/8 scaling. Other targets are unaffected.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21205 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2009-06-07 21:27:05 +00:00
parent c3182ec333
commit 1d6df54df2
24 changed files with 88 additions and 70 deletions

View file

@ -617,7 +617,7 @@ int read_bmp_fd(int fd,
if (depth <= 8) {
numcolors = letoh32(bmph.clr_used);
if (numcolors == 0)
numcolors = 1 << depth;
numcolors = BIT_N(depth);
} else
numcolors = (compression == 3) ? 3 : 0;
@ -795,7 +795,7 @@ int read_bmp_fd(int fd,
#ifndef PLUGIN
{
unsigned char *p = bitmap + bm->width * (row >> 3);
unsigned char mask = 1 << (row & 7);
unsigned char mask = BIT_N(row & 7);
int col;
for (col = 0; col < bm->width; col++, p++)
#if !defined(HAVE_LCD_COLOR) && \

View file

@ -1506,7 +1506,8 @@ INLINE void fix_huff_tables(struct jpeg *p_jpeg)
*/
INLINE void fix_quant_tables(struct jpeg *p_jpeg)
{
int shift, i, x, y, a;
int shift, i, a;
unsigned x, y;
for (i = 0; i < 2; i++)
{
shift = idct_tbl[p_jpeg->v_scale[i]].v_scale +
@ -1514,9 +1515,9 @@ INLINE void fix_quant_tables(struct jpeg *p_jpeg)
if (shift)
{
a = 0;
for (y = 0; y < 1 << p_jpeg->h_scale[i]; y++)
for (y = 0; y < BIT_N(p_jpeg->h_scale[i]); y++)
{
for (x = 0; x < 1 << p_jpeg->v_scale[i]; x++)
for (x = 0; x < BIT_N(p_jpeg->v_scale[i]); x++)
p_jpeg->quanttable[i][zig[a+x]] <<= shift;
a += 8;
}
@ -1586,7 +1587,7 @@ INLINE int get_bits(struct jpeg *p_jpeg, int nbits)
#ifdef JPEG_BS_DEBUG
if (nbits > p_jpeg->bitbuf_bits)
DEBUGF("bitbuffer underrun\n");
int mask = 1 << (p_jpeg->bitbuf_bits - 1);
int mask = BIT_N(p_jpeg->bitbuf_bits - 1);
int i;
DEBUGF("get %d bits: ", nbits);
for (i = 0; i < nbits; i++)
@ -1594,13 +1595,13 @@ INLINE int get_bits(struct jpeg *p_jpeg, int nbits)
DEBUGF("\n");
#endif
return ((int) (p_jpeg->bitbuf >> (p_jpeg->bitbuf_bits -= nbits))) &
((1<<nbits)-1);
(BIT_N(nbits)-1);
}
INLINE int peek_bits(struct jpeg *p_jpeg, int nbits)
{
#ifdef JPEG_BS_DEBUG
int mask = 1 << (p_jpeg->bitbuf_bits - 1);
int mask = BIT_N(p_jpeg->bitbuf_bits - 1);
int i;
DEBUGF("peek %d bits: ", nbits);
for (i = 0; i < nbits; i++)
@ -1608,13 +1609,13 @@ INLINE int peek_bits(struct jpeg *p_jpeg, int nbits)
DEBUGF("\n");
#endif
return ((int) (p_jpeg->bitbuf >> (p_jpeg->bitbuf_bits - nbits))) &
((1<<nbits)-1);
(BIT_N(nbits)-1);
}
INLINE void drop_bits(struct jpeg *p_jpeg, int nbits)
{
#ifdef JPEG_BS_DEBUG
int mask = 1 << (p_jpeg->bitbuf_bits - 1);
int mask = BIT_N(p_jpeg->bitbuf_bits - 1);
int i;
DEBUGF("drop %d bits: ", nbits);
for (i = 0; i < nbits; i++)
@ -1675,7 +1676,7 @@ static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */
({ \
int x__ = x; \
int s__ = s; \
x__ & (1 << (s__- 1)) ? x__ : x__ + (-1 << s__) + 1; \
x__ & BIT_N(s__- 1) ? x__ : x__ + (-1 << s__) + 1; \
})
#endif
@ -1764,14 +1765,14 @@ static struct img_part *store_row_jpeg(void *jpeg_args)
#endif
unsigned int width = p_jpeg->x_mbl << mcu_hscale;
unsigned int b_width = width * JPEG_PIX_SZ;
int height = 1U << mcu_vscale;
int height = BIT_N(mcu_vscale);
int x;
if (!p_jpeg->mcu_row) /* Need to decode a new row of MCUs */
{
p_jpeg->out_ptr = (unsigned char *)p_jpeg->img_buf;
int store_offs[4];
#ifdef HAVE_LCD_COLOR
unsigned mcu_width = 1U << mcu_hscale;
unsigned mcu_width = BIT_N(mcu_hscale);
#endif
int mcu_offset = JPEG_PIX_SZ << mcu_hscale;
unsigned char *out = p_jpeg->out_ptr;
@ -1868,8 +1869,8 @@ static struct img_part *store_row_jpeg(void *jpeg_args)
if (!ci)
#endif
{
int idct_cols = 1 << MIN(p_jpeg->h_scale[!!ci], 3);
int idct_rows = 1 << p_jpeg->v_scale[!!ci];
int idct_cols = BIT_N(MIN(p_jpeg->h_scale[!!ci], 3));
int idct_rows = BIT_N(p_jpeg->v_scale[!!ci]);
unsigned char *b_out = out + (ci ? ci : store_offs[blkn]);
if (idct_tbl[p_jpeg->v_scale[!!ci]].v_idct)
idct_tbl[p_jpeg->v_scale[!!ci]].v_idct(block,
@ -2043,8 +2044,8 @@ int read_jpeg_fd(int fd,
}
p_jpeg->h_scale[0] = calc_scale(p_jpeg->x_size, bm->width);
p_jpeg->v_scale[0] = calc_scale(p_jpeg->y_size, bm->height);
JDEBUGF("luma IDCT size: %dx%d\n", 1 << p_jpeg->h_scale[0],
1 << p_jpeg->v_scale[0]);
JDEBUGF("luma IDCT size: %dx%d\n", BIT_N(p_jpeg->h_scale[0]),
BIT_N(p_jpeg->v_scale[0]));
if ((p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3 == bm->width &&
(p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3 == bm->height)
resize = false;
@ -2053,24 +2054,24 @@ int read_jpeg_fd(int fd,
p_jpeg->frameheader[0].horizontal_sampling - 1;
p_jpeg->v_scale[1] = p_jpeg->v_scale[0] +
p_jpeg->frameheader[0].vertical_sampling - 1;
JDEBUGF("chroma IDCT size: %dx%d\n", 1 << p_jpeg->h_scale[1],
1 << p_jpeg->v_scale[1]);
JDEBUGF("chroma IDCT size: %dx%d\n", BIT_N(p_jpeg->h_scale[1]),
BIT_N(p_jpeg->v_scale[1]));
#endif
JDEBUGF("scaling from %dx%d -> %dx%d\n",
(p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3,
(p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3,
bm->width, bm->height);
fix_quant_tables(p_jpeg);
int decode_w = (1 << p_jpeg->h_scale[0]) - 1;
int decode_h = (1 << p_jpeg->v_scale[0]) - 1;
int decode_w = BIT_N(p_jpeg->h_scale[0]) - 1;
int decode_h = BIT_N(p_jpeg->v_scale[0]) - 1;
src_dim.width = (p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3;
src_dim.height = (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3;
p_jpeg->zero_need[0] = (decode_h << 3) + decode_w;
p_jpeg->k_need[0] = zig[p_jpeg->zero_need[0]];
JDEBUGF("need luma components to %d\n", p_jpeg->k_need[0]);
#ifdef HAVE_LCD_COLOR
decode_w = (1 << MIN(p_jpeg->h_scale[1],3)) - 1;
decode_h = (1 << MIN(p_jpeg->v_scale[1],3)) - 1;
decode_w = BIT_N(MIN(p_jpeg->h_scale[1],3)) - 1;
decode_h = BIT_N(MIN(p_jpeg->v_scale[1],3)) - 1;
p_jpeg->zero_need[1] = (decode_h << 3) + decode_w;
p_jpeg->k_need[1] = zig[p_jpeg->zero_need[1]];
JDEBUGF("need chroma components to %d\n", p_jpeg->k_need[1]);