<div dir="ltr">I discovered slow decompression while testing gunzip.<div>I want to discuss about this improvement.<br><div><br></div><div>I gunzipped an 15MB *.tar.gz file on the ARM board, and it takes around 17 sec.</div><div>It's too slow, so I want to improve this for ARM based environment.</div><div>(x86 was okay)</div><div><br></div><div>As I debugged the src,<br></div><div>below while loop takes too much time when decoded huffman symbol is over 256.<br></div><div>I'm looking for the better methods but it's not easy.</div><div>Could you share your opinion?</div><div><div><div><br></div></div><div>(toys/pending/compress.c)<br></div><div>--Line: 381-------------------------------------------------------------------------------------</div><div>        // Use huffman tables to decode block of compressed symbols</div><div>      for (;;) {</div><div>        int sym = huff_and_puff(bb, lithuff);</div><div><br></div><div>        // Literal?</div><div>        if (sym < 256) data_crc(sym);</div><div><br></div><div>        // Copy range?</div><div>        else if (sym > 256) {</div><div>          int len, dist;</div><div><br></div><div>          sym -= 257;</div><div>          len = TT.lenbase[sym] + bitbuf_get(bb, TT.lenbits[sym]);</div><div>          sym = huff_and_puff(bb, disthuff);</div><div>          dist = TT.distbase[sym] + bitbuf_get(bb, TT.distbits[sym]);</div><div>          sym = TT.pos & 32767;</div><div><br></div><div>    //---------Slow! O(n^2)--------------------------<br></div><div>          while (len--) data_crc(TT.data[(TT.pos-dist) & 32767]);</div><div><br></div><div>        // End of block</div><div>        } else break;</div><div>      }</div></div><div>--Line: 403-------------------------------------------------------------------------------------<br></div><div><br></div><div><br></div><div>YD</div></div></div>