aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/libmpg123/getbits.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmpg123/getbits.h')
-rwxr-xr-xsrc/libmpg123/getbits.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/libmpg123/getbits.h b/src/libmpg123/getbits.h
new file mode 100755
index 0000000..1e5cf65
--- /dev/null
+++ b/src/libmpg123/getbits.h
@@ -0,0 +1,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)