removes on loop in FLUSH
authorMoritz Hanke <hanke@dkrz.de>
Tue, 9 Sep 2014 15:36:14 +0000 (17:36 +0200)
committerMathis Rosenhauer <rosenhauer@dkrz.de>
Fri, 24 Oct 2014 14:08:27 +0000 (16:08 +0200)
src/decode.c

index 3a25e6e..f3b94e8 100644 (file)
               for (bp = state->flush_start; bp < flush_end; bp++) {     \
                   d = *bp;                                              \
                   half_d = (d >> 1) + (d & 1);                          \
-                                                                        \
                   /*in this case: data >= med == data & med */          \
-                  if (data & med) {                                     \
-                      /*in this case: xmax - data == xmax ^ data */     \
-                      if (half_d <= (xmax ^ data)) {                    \
-                          data += (d >> 1)^(~((d & 1) - 1));            \
-                      } else {                                          \
-                          data = xmax ^ d;                              \
-                      }                                                 \
+                  uint32_t mask = (data & med)?xmax:0;                  \
+                                                                        \
+                  /*in this case: xmax - data == xmax ^ data */         \
+                  if (half_d <= (mask ^ data)) {                        \
+                      data += (d >> 1)^(~((d & 1) - 1));                \
                   } else {                                              \
-                      if (half_d <= data) {                             \
-                          data += (d >> 1)^(~((d & 1) - 1));            \
-                      } else {                                          \
-                          data = d;                                     \
-                      }                                                 \
+                      data = mask ^ d;                                  \
                   }                                                     \
                   put_##KIND(strm, (uint32_t)data);                     \
               }                                                         \