summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>2012-08-03 14:33:12 (GMT)
committeryann.collet.73@gmail.com <yann.collet.73@gmail.com@650e7d94-2a16-8b24-b05c-7c0b3f6821cd>2012-08-03 14:33:12 (GMT)
commit19a078b132f515405ab0b297c3cb2673dd2870de (patch)
treed362601cf7a59f0377baae0765b10f64773c177d
parent89921dd39eaa4910eda636f68d3cb5f960b616ac (diff)
downloadlz4-19a078b132f515405ab0b297c3cb2673dd2870de.zip
lz4-19a078b132f515405ab0b297c3cb2673dd2870de.tar.gz
lz4-19a078b132f515405ab0b297c3cb2673dd2870de.tar.bz2
Improved speed under Visual
git-svn-id: https://lz4.googlecode.com/svn/trunk@73 650e7d94-2a16-8b24-b05c-7c0b3f6821cd
-rw-r--r--lz4.c38
-rw-r--r--lz4.h2
2 files changed, 39 insertions, 1 deletions
diff --git a/lz4.c b/lz4.c
index 1d5bfdd..f8a80c4 100644
--- a/lz4.c
+++ b/lz4.c
@@ -402,8 +402,27 @@ inline int LZ4_compressCtx(void** ctx,
length = ip - anchor;
token = op++;
if unlikely(op + length + (2 + 1 + LASTLITERALS) + (length>>8) >= oend) return 0; // Check output limit
+#ifdef _MSC_VER
+ if (length>=(int)RUN_MASK)
+ {
+ int len = length-RUN_MASK;
+ *token=(RUN_MASK<<ML_BITS);
+ if (len>254)
+ {
+ do { *op++ = 255; len -= 255; } while (len>254);
+ *op++ = (BYTE)len;
+ memcpy(op, anchor, length);
+ op += length;
+ goto _next_match;
+ }
+ else
+ *op++ = (BYTE)len;
+ }
+ else *token = (length<<ML_BITS);
+#else
if (length>=(int)RUN_MASK) { *token=(RUN_MASK<<ML_BITS); len = length-RUN_MASK; for(; len > 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
else *token = (length<<ML_BITS);
+#endif
// Copy Literals
LZ4_BLINDCOPY(anchor, op, length);
@@ -547,8 +566,27 @@ inline int LZ4_compress64kCtx(void** ctx,
length = ip - anchor;
token = op++;
if unlikely(op + length + (2 + 1 + LASTLITERALS) + (length>>8) >= oend) return 0; // Check output limit
+#ifdef _MSC_VER
+ if (length>=(int)RUN_MASK)
+ {
+ int len = length-RUN_MASK;
+ *token=(RUN_MASK<<ML_BITS);
+ if (len>254)
+ {
+ do { *op++ = 255; len -= 255; } while (len>254);
+ *op++ = (BYTE)len;
+ memcpy(op, anchor, length);
+ op += length;
+ goto _next_match;
+ }
+ else
+ *op++ = (BYTE)len;
+ }
+ else *token = (length<<ML_BITS);
+#else
if (length>=(int)RUN_MASK) { *token=(RUN_MASK<<ML_BITS); len = length-RUN_MASK; for(; len > 254 ; len-=255) *op++ = 255; *op++ = (BYTE)len; }
else *token = (length<<ML_BITS);
+#endif
// Copy Literals
LZ4_BLINDCOPY(anchor, op, length);
diff --git a/lz4.h b/lz4.h
index 498421d..e3df7bd 100644
--- a/lz4.h
+++ b/lz4.h
@@ -49,7 +49,7 @@ int LZ4_uncompress (const char* source, char* dest, int osize);
LZ4_compress() :
Compresses 'isize' bytes from 'source' into 'dest'.
Destination buffer must be already allocated,
- its minimum size must handle worst cases situations (input data not compressible)
+ and must be sized to handle worst cases situations (input data not compressible)
Worst case size evaluation is provided by macro LZ4_compressBound()
isize : is the input size. Max supported value is ~1.9GB