aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/libmpg123/getbits.h
blob: 1e5cf65193cab86f3cf1625430271294be5f30de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

/*
 * This does the same as getbits.c but with defines to
 * force inlining
 */

#define mpg123_backbits(nob)			\
do {						\
	bsi.bitindex    -= nob;			\
	bsi.wordpointer += (bsi.bitindex >> 3);	\
	bsi.bitindex    &= 0x7;			\
} while (0)

#define mpg123_getbitoffset() ((-bsi.bitindex) & 0x7)
#define mpg123_getbyte()      (*bsi.wordpointer++)

#define mpg123_getbits(nob)			\
	(rval = bsi.wordpointer[0],		\
	rval <<= 8,				\
	rval |= bsi.wordpointer[1],		\
	rval <<= 8,				\
	rval |= bsi.wordpointer[2],		\
	rval <<= bsi.bitindex,			\
	rval &= 0xffffff,			\
	bsi.bitindex += (nob),			\
	rval >>= (24-(nob)),			\
	bsi.wordpointer += (bsi.bitindex>>3),	\
	bsi.bitindex &= 7,			\
	rval)

#define mpg123_getbits_fast(nob)						\
	(rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex),		\
	rval |= ((unsigned long) bsi.wordpointer[1] << bsi.bitindex) >> 8,	\
	rval <<= (nob),								\
	rval >>= 8,								\
	bsi.bitindex += (nob),							\
	bsi.wordpointer += (bsi.bitindex >> 3),					\
	bsi.bitindex &= 7,							\
	rval)

#define mpg123_get1bit()				\
	(rval_uc = *bsi.wordpointer << bsi.bitindex,	\
	bsi.bitindex++,					\
	bsi.wordpointer += (bsi.bitindex>>3),		\
	bsi.bitindex &= 7,				\
	rval_uc >> 7)