Root/package/compcache/patches/001-lzo-speed.patch

1--- a/sub-projects/compression/lzo-kmod/lzo1x_compress.c
2+++ b/sub-projects/compression/lzo-kmod/lzo1x_compress.c
3@@ -62,8 +62,12 @@ _lzo1x_1_do_compress(const unsigned char
4         goto literal;
5 
6 try_match:
7+#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
8         if (get_unaligned((const unsigned short *)m_pos)
9                 == get_unaligned((const unsigned short *)ip)) {
10+#else
11+ if (m_pos[0] == ip[0] && m_pos[1] == ip[1]) {
12+#endif
13             if (likely(m_pos[2] == ip[2]))
14                     goto match;
15         }
16@@ -94,9 +98,14 @@ match:
17                 }
18                 *op++ = tt;
19             }
20- do {
21- *op++ = *ii++;
22- } while (--t > 0);
23+ if (t >= 2 * 4) {
24+ memcpy(op, ii, t);
25+ op += t;
26+ ii += t;
27+ } else
28+ do {
29+ *op++ = *ii++;
30+ } while (--t > 0);
31         }
32 
33         ip += 3;
34@@ -208,9 +217,14 @@ int lzo1x_1_compress(const unsigned char
35 
36             *op++ = tt;
37         }
38- do {
39- *op++ = *ii++;
40- } while (--t > 0);
41+ if (t >= 2 * 4) {
42+ memcpy(op, ii, t);
43+ op += t;
44+ ii += t;
45+ } else
46+ do {
47+ *op++ = *ii++;
48+ } while (--t > 0);
49     }
50 
51     *op++ = M4_MARKER | 1;
52@@ -224,4 +238,3 @@ EXPORT_SYMBOL_GPL(lzo1x_1_compress);
53 
54 MODULE_LICENSE("GPL");
55 MODULE_DESCRIPTION("LZO1X-1 Compressor");
56-
57--- a/sub-projects/compression/lzo-kmod/lzo1x_decompress.c
58+++ b/sub-projects/compression/lzo-kmod/lzo1x_decompress.c
59@@ -45,10 +45,7 @@ int lzo1x_decompress_safe(const unsigned
60             goto output_overrun;
61         if (HAVE_IP(t + 1, ip_end, ip))
62             goto input_overrun;
63- do {
64- *op++ = *ip++;
65- } while (--t > 0);
66- goto first_literal_run;
67+ goto prep_first_literal_run;
68     }
69 
70     while ((ip < ip_end)) {
71@@ -71,30 +68,27 @@ int lzo1x_decompress_safe(const unsigned
72         if (HAVE_IP(t + 4, ip_end, ip))
73             goto input_overrun;
74 
75- COPY4(op, ip);
76- op += 4;
77- ip += 4;
78- if (--t > 0) {
79- if (t >= 4) {
80- do {
81- COPY4(op, ip);
82- op += 4;
83- ip += 4;
84- t -= 4;
85- } while (t >= 4);
86- if (t > 0) {
87- do {
88- *op++ = *ip++;
89- } while (--t > 0);
90- }
91- } else {
92+ t += (4 - 1);
93+ if (t >= 2 * 4) {
94+ memcpy(op, ip, t);
95+ op += t;
96+ ip += t;
97+ } else {
98+ do {
99+ COPY4(op, ip);
100+ op += 4;
101+ ip += 4;
102+ t -= 4;
103+ } while (t >= 4);
104+ if (t > 0) {
105+prep_first_literal_run:
106                 do {
107                     *op++ = *ip++;
108                 } while (--t > 0);
109             }
110         }
111 
112-first_literal_run:
113+//first_literal_run:
114         t = *ip++;
115         if (t >= 16)
116             goto match;
117@@ -139,8 +133,7 @@ match:
118                     t += 31 + *ip++;
119                 }
120                 m_pos = op - 1;
121- m_pos -= le16_to_cpu(get_unaligned(
122- (const unsigned short *)ip)) >> 2;
123+ m_pos -= get_unaligned_le16(ip) >> 2;
124                 ip += 2;
125             } else if (t >= 16) {
126                 m_pos = op;
127@@ -158,8 +151,7 @@ match:
128                     }
129                     t += 7 + *ip++;
130                 }
131- m_pos -= le16_to_cpu(get_unaligned(
132- (const unsigned short *)ip)) >> 2;
133+ m_pos -= get_unaligned_le16(ip) >> 2;
134                 ip += 2;
135                 if (m_pos == op)
136                     goto eof_found;
137@@ -184,21 +176,33 @@ match:
138             if (HAVE_OP(t + 3 - 1, op_end, op))
139                 goto output_overrun;
140 
141- if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) {
142- COPY4(op, m_pos);
143- op += 4;
144- m_pos += 4;
145- t -= 4 - (3 - 1);
146- do {
147+ if (t >= 2 * 4 - (3 - 1)) {
148+ /*
149+ * Assume memcpy don't copy
150+ * more than 32 bytes at once
151+ */
152+ if ((op - m_pos) >= 32) {
153+ t += (3 - 1);
154+ memcpy(op, m_pos, t);
155+ op += t;
156+ m_pos += t;
157+ } else if ((op - m_pos) >= 4) {
158                     COPY4(op, m_pos);
159                     op += 4;
160                     m_pos += 4;
161- t -= 4;
162- } while (t >= 4);
163- if (t > 0)
164+ t -= 4 - (3 - 1);
165                     do {
166- *op++ = *m_pos++;
167- } while (--t > 0);
168+ COPY4(op, m_pos);
169+ op += 4;
170+ m_pos += 4;
171+ t -= 4;
172+ } while (t >= 4);
173+ if (t > 0)
174+ do {
175+ *op++ = *m_pos++;
176+ } while (--t > 0);
177+ } else
178+ goto copy_match;
179             } else {
180 copy_match:
181                 *op++ = *m_pos++;
182

Archive Download this file



interactive