]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
restored DStream init
authorYann Collet <yann.collet.73@gmail.com>
Thu, 12 May 2016 11:50:13 +0000 (13:50 +0200)
committerYann Collet <yann.collet.73@gmail.com>
Thu, 12 May 2016 11:50:13 +0000 (13:50 +0200)
due to strange speed regressions and warnins on gcc 5.3

lib/common/bitstream.h

index f1e7814aafce044a4640aa5e2c8f2d35f216b4b1..48021dfaf7981e6677e7ad6d8e9678feca47d115 100644 (file)
@@ -271,11 +271,19 @@ MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, si
           if (lastByte == 0) return ERROR(GENERIC);   /* endMark not present */
           bitD->bitsConsumed = 8 - BIT_highbit32(lastByte); }
     } else {
-        BYTE tmp[8] = {0};
-        memcpy(tmp, srcBuffer, srcSize);
         bitD->start = (const char*)srcBuffer;
         bitD->ptr   = bitD->start;
-        bitD->bitContainer = MEM_readLEST(tmp);
+        bitD->bitContainer = *(const BYTE*)(bitD->start);
+        switch(srcSize)
+        {
+            case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
+            case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
+            case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
+            case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
+            case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
+            case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) <<  8;
+            default:;
+        }
         { BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
           if (lastByte == 0) return ERROR(GENERIC);   /* endMark not present */
           bitD->bitsConsumed = 8 - BIT_highbit32(lastByte); }