]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
experiments with ZSTD_decodeSequence
authorinikep <inikep@gmail.com>
Tue, 5 Apr 2016 08:08:25 +0000 (10:08 +0200)
committerinikep <inikep@gmail.com>
Tue, 5 Apr 2016 08:08:25 +0000 (10:08 +0200)
lib/zstd_decompress.c
lib/zstd_internal.h

index 85ef9faf1df41bd0d7555df2473e92eb379006d2..65d214a2108b4598003ca41f118767eff671b59c 100644 (file)
@@ -687,45 +687,59 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState, const U32 mls)
 
 
     {   size_t offset;
-        if (ofCode) {
-            offset = OF_base[ofCode] + BIT_readBits(&(seqState->DStream), ofBits);   /* <=  26 bits */
-            if (MEM_32bits()) BIT_reloadDStream(&(seqState->DStream));
-
-        } else {
-            offset = 0;
-        }
-
-        if (offset < ZSTD_REP_NUM) {
-            if (llCode == 0 && offset <= 1) offset = 1-offset;
-
-            if (offset != 0) {
-                size_t temp = seqState->prevOffset[offset];
-                if (offset != 1) {
-                    if (offset == 3) seqState->prevOffset[3] = seqState->prevOffset[2];
-                    seqState->prevOffset[2] = seqState->prevOffset[1];
-                }
+#if 0
+        if (!ofCode) {
+            if (!llCode) {
+                offset = seqState->prevOffset[1];
                 seqState->prevOffset[1] = seqState->prevOffset[0];
-                seqState->prevOffset[0] = offset = temp;
+                seqState->prevOffset[0] = offset;
 
             } else {
                 offset = seqState->prevOffset[0];
             }
-
         } else {
-            offset -= ZSTD_REP_MOVE;
-#if 1 // faster without kSlotNew
-            seqState->prevOffset[3] = seqState->prevOffset[2];
-            seqState->prevOffset[2] = seqState->prevOffset[1];
-            seqState->prevOffset[1] = seqState->prevOffset[0];               
-            seqState->prevOffset[0] = offset;
+            offset = OF_base[ofCode] + BIT_readBits(&(seqState->DStream), ofBits);   /* <=  26 bits */
+            if (MEM_32bits()) BIT_reloadDStream(&(seqState->DStream));
 #else
-            if (kSlotNew < 3) seqState->prevOffset[3] = seqState->prevOffset[2];
-            if (kSlotNew < 2) seqState->prevOffset[2] = seqState->prevOffset[1];
-            if (kSlotNew < 1) seqState->prevOffset[1] = seqState->prevOffset[0];               
-            seqState->prevOffset[kSlotNew] = offset;
-#endif
+        if (!ofCode)
+            offset = 0;
+        else {
+            offset = OF_base[ofCode] + BIT_readBits(&(seqState->DStream), ofBits);   /* <=  26 bits */
+            if (MEM_32bits()) BIT_reloadDStream(&(seqState->DStream));
         }
         
+        {
+#endif
+            if (offset < ZSTD_REP_NUM) {
+                if (llCode == 0 && offset <= 1) offset = 1-offset;
+
+                if (offset != 0) {
+                    size_t temp = seqState->prevOffset[offset];
+                    if (offset != 1) {
+                        if (offset == 3) seqState->prevOffset[3] = seqState->prevOffset[2];
+                        seqState->prevOffset[2] = seqState->prevOffset[1];
+                    }
+                    seqState->prevOffset[1] = seqState->prevOffset[0];
+                    seqState->prevOffset[0] = offset = temp;
+
+                } else {
+                    offset = seqState->prevOffset[0];
+                }
+            } else {
+                offset -= ZSTD_REP_MOVE;
+    #if 1 // faster without kSlotNew
+                seqState->prevOffset[3] = seqState->prevOffset[2];
+                seqState->prevOffset[2] = seqState->prevOffset[1];
+                seqState->prevOffset[1] = seqState->prevOffset[0];               
+                seqState->prevOffset[0] = offset;
+    #else
+                if (kSlotNew < 3) seqState->prevOffset[3] = seqState->prevOffset[2];
+                if (kSlotNew < 2) seqState->prevOffset[2] = seqState->prevOffset[1];
+                if (kSlotNew < 1) seqState->prevOffset[1] = seqState->prevOffset[0];               
+                seqState->prevOffset[kSlotNew] = offset;
+    #endif
+            }
+        }
         seq->offset = offset;
     }
     
index 1a527d51c37b26e01d957b9464ac0e2e2dd5de21..c3ad3e1c98a642328c38e78eeca36d4bb363800d 100644 (file)
 #define MIN(a,b) ((a)<(b) ? (a) : (b))
 #define MAX(a,b) ((a)>(b) ? (a) : (b))
 
+#define ZSTD_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+
+#if (ZSTD_GCC_VERSION >= 302) || (__INTEL_COMPILER >= 800) || defined(__clang__)
+#  define expect(expr,value)    (__builtin_expect ((expr),(value)) )
+#else
+#  define expect(expr,value)    (expr)
+#endif
+
+#define likely(expr)     expect((expr) != 0, 1)
+#define unlikely(expr)   expect((expr) != 0, 0)
+
 
 /*-*************************************
 *  Common constants