From: Yann Collet Date: Thu, 12 May 2016 11:50:13 +0000 (+0200) Subject: restored DStream init X-Git-Tag: v0.6.1^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ceb5a929526c370c422365772f2582b288a3974;p=thirdparty%2Fzstd.git restored DStream init due to strange speed regressions and warnins on gcc 5.3 --- diff --git a/lib/common/bitstream.h b/lib/common/bitstream.h index f1e7814aa..48021dfaf 100644 --- a/lib/common/bitstream.h +++ b/lib/common/bitstream.h @@ -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); }