From: Yann Collet Date: Mon, 2 Nov 2015 10:09:54 +0000 (+0100) Subject: Fixed Visual Studio issue #60, reported by @mailagentrus X-Git-Tag: zstd-0.3.2^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e049bca8cf110b69386423b8416be09eb0e069a;p=thirdparty%2Fzstd.git Fixed Visual Studio issue #60, reported by @mailagentrus --- diff --git a/lib/huff0.c b/lib/huff0.c index 4ddd992cd..a8798fd71 100644 --- a/lib/huff0.c +++ b/lib/huff0.c @@ -362,7 +362,7 @@ size_t HUF_buildCTable (HUF_CElt* tree, const U32* count, U32 maxSymbolValue, U3 U16 min = 0; for (n=maxNbBits; n>0; n--) { - valPerRank[n] = min; // get starting value within each rank + valPerRank[n] = min; /* get starting value within each rank */ min += nbPerRank[n]; min >>= 1; } @@ -1027,18 +1027,23 @@ size_t HUF_readDTableX4 (U32* DTable, const void* src, size_t srcSize) U32 nextRankVal = 0; U32 w, consumed; const int rescale = (memLog-tableLog) - 1; /* tableLog <= memLog */ + U32* rankVal0 = rankVal[0]; for (w=1; w<=maxW; w++) { U32 current = nextRankVal; nextRankVal += rankStats[w] << (w+rescale); - rankVal[0][w] = current; + rankVal0[w] = current; + } + for (consumed = minBits; consumed <= memLog - minBits; consumed++) + { + U32* rankValPtr = rankVal[consumed]; + for (w = 1; w <= maxW; w++) + { + rankValPtr[w] = rankVal0[w] >> consumed; + } } - for (consumed=minBits; consumed <= memLog-minBits; consumed++) - for (w=1; w<=maxW; w++) - rankVal[consumed][w] = rankVal[0][w] >> consumed; } - HUF_fillDTableX4(dt, memLog, sortedSymbol, sizeOfSort, rankStart0, rankVal, maxW, @@ -1394,18 +1399,23 @@ size_t HUF_readDTableX6 (U32* DTable, const void* src, size_t srcSize) U32 nextRankVal = 0; U32 w, consumed; const int rescale = (memLog-tableLog) - 1; /* tableLog <= memLog */ + U32* rankVal0 = rankVal[0]; for (w=1; w<=maxW; w++) { U32 current = nextRankVal; nextRankVal += rankStats[w] << (w+rescale); - rankVal[0][w] = current; + rankVal0[w] = current; + } + for (consumed = minBits; consumed <= memLog - minBits; consumed++) + { + U32* rankValPtr = rankVal[consumed]; + for (w = 1; w <= maxW; w++) + { + rankValPtr[w] = rankVal0[w] >> consumed; + } } - for (consumed=minBits; consumed <= memLog-minBits; consumed++) - for (w=1; w<=maxW; w++) - rankVal[consumed][w] = rankVal[0][w] >> consumed; } - /* fill tables */ { HUF_DDescX6* DDescription = (HUF_DDescX6*)(DTable+1);