unrolling in fill_acc
authorMoritz Hanke <hanke@dkrz.de>
Mon, 10 Dec 2012 12:46:54 +0000 (13:46 +0100)
committerThomas Jahns <jahns@dkrz.de>
Tue, 19 Feb 2013 10:33:02 +0000 (11:33 +0100)
src/decode.c

index 739c218..6787783 100644 (file)
@@ -220,8 +220,25 @@ static inline void fill_acc(struct aec_stream *strm)
 
     strm->avail_in -= b;
     strm->state->bitp += b << 3;
-    while (b--)
+
+    switch (b) {
+
+      case (7):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (6):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (5):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (4):
         strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (3):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (2):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+      case (1):
+        strm->state->acc = (strm->state->acc << 8) | *strm->next_in++;
+    };
+
 }
 
 static inline uint32_t direct_get(struct aec_stream *strm, unsigned int n)