diff options
Diffstat (limited to 'package/compcache/patches/001-lzo-speed.patch')
-rw-r--r-- | package/compcache/patches/001-lzo-speed.patch | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/package/compcache/patches/001-lzo-speed.patch b/package/compcache/patches/001-lzo-speed.patch deleted file mode 100644 index 130f79da61..0000000000 --- a/package/compcache/patches/001-lzo-speed.patch +++ /dev/null @@ -1,181 +0,0 @@ ---- a/sub-projects/compression/lzo-kmod/lzo1x_compress.c -+++ b/sub-projects/compression/lzo-kmod/lzo1x_compress.c -@@ -62,8 +62,12 @@ _lzo1x_1_do_compress(const unsigned char - goto literal; - - try_match: -+#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS - if (get_unaligned((const unsigned short *)m_pos) - == get_unaligned((const unsigned short *)ip)) { -+#else -+ if (m_pos[0] == ip[0] && m_pos[1] == ip[1]) { -+#endif - if (likely(m_pos[2] == ip[2])) - goto match; - } -@@ -94,9 +98,14 @@ match: - } - *op++ = tt; - } -- do { -- *op++ = *ii++; -- } while (--t > 0); -+ if (t >= 2 * 4) { -+ memcpy(op, ii, t); -+ op += t; -+ ii += t; -+ } else -+ do { -+ *op++ = *ii++; -+ } while (--t > 0); - } - - ip += 3; -@@ -208,9 +217,14 @@ int lzo1x_1_compress(const unsigned char - - *op++ = tt; - } -- do { -- *op++ = *ii++; -- } while (--t > 0); -+ if (t >= 2 * 4) { -+ memcpy(op, ii, t); -+ op += t; -+ ii += t; -+ } else -+ do { -+ *op++ = *ii++; -+ } while (--t > 0); - } - - *op++ = M4_MARKER | 1; -@@ -224,4 +238,3 @@ EXPORT_SYMBOL_GPL(lzo1x_1_compress); - - MODULE_LICENSE("GPL"); - MODULE_DESCRIPTION("LZO1X-1 Compressor"); -- ---- a/sub-projects/compression/lzo-kmod/lzo1x_decompress.c -+++ b/sub-projects/compression/lzo-kmod/lzo1x_decompress.c -@@ -45,10 +45,7 @@ int lzo1x_decompress_safe(const unsigned - goto output_overrun; - if (HAVE_IP(t + 1, ip_end, ip)) - goto input_overrun; -- do { -- *op++ = *ip++; -- } while (--t > 0); -- goto first_literal_run; -+ goto prep_first_literal_run; - } - - while ((ip < ip_end)) { -@@ -71,30 +68,27 @@ int lzo1x_decompress_safe(const unsigned - if (HAVE_IP(t + 4, ip_end, ip)) - goto input_overrun; - -- COPY4(op, ip); -- op += 4; -- ip += 4; -- if (--t > 0) { -- if (t >= 4) { -- do { -- COPY4(op, ip); -- op += 4; -- ip += 4; -- t -= 4; -- } while (t >= 4); -- if (t > 0) { -- do { -- *op++ = *ip++; -- } while (--t > 0); -- } -- } else { -+ t += (4 - 1); -+ if (t >= 2 * 4) { -+ memcpy(op, ip, t); -+ op += t; -+ ip += t; -+ } else { -+ do { -+ COPY4(op, ip); -+ op += 4; -+ ip += 4; -+ t -= 4; -+ } while (t >= 4); -+ if (t > 0) { -+prep_first_literal_run: - do { - *op++ = *ip++; - } while (--t > 0); - } - } - --first_literal_run: -+//first_literal_run: - t = *ip++; - if (t >= 16) - goto match; -@@ -139,8 +133,7 @@ match: - t += 31 + *ip++; - } - m_pos = op - 1; -- m_pos -= le16_to_cpu(get_unaligned( -- (const unsigned short *)ip)) >> 2; -+ m_pos -= get_unaligned_le16(ip) >> 2; - ip += 2; - } else if (t >= 16) { - m_pos = op; -@@ -158,8 +151,7 @@ match: - } - t += 7 + *ip++; - } -- m_pos -= le16_to_cpu(get_unaligned( -- (const unsigned short *)ip)) >> 2; -+ m_pos -= get_unaligned_le16(ip) >> 2; - ip += 2; - if (m_pos == op) - goto eof_found; -@@ -184,21 +176,33 @@ match: - if (HAVE_OP(t + 3 - 1, op_end, op)) - goto output_overrun; - -- if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) { -- COPY4(op, m_pos); -- op += 4; -- m_pos += 4; -- t -= 4 - (3 - 1); -- do { -+ if (t >= 2 * 4 - (3 - 1)) { -+ /* -+ * Assume memcpy don't copy -+ * more than 32 bytes at once -+ */ -+ if ((op - m_pos) >= 32) { -+ t += (3 - 1); -+ memcpy(op, m_pos, t); -+ op += t; -+ m_pos += t; -+ } else if ((op - m_pos) >= 4) { - COPY4(op, m_pos); - op += 4; - m_pos += 4; -- t -= 4; -- } while (t >= 4); -- if (t > 0) -+ t -= 4 - (3 - 1); - do { -- *op++ = *m_pos++; -- } while (--t > 0); -+ COPY4(op, m_pos); -+ op += 4; -+ m_pos += 4; -+ t -= 4; -+ } while (t >= 4); -+ if (t > 0) -+ do { -+ *op++ = *m_pos++; -+ } while (--t > 0); -+ } else -+ goto copy_match; - } else { - copy_match: - *op++ = *m_pos++; |