Skip to content
Snippets Groups Projects
  • Scott Vokes's avatar
    429d41e4
    Improve throughput of encoder. Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15. · 429d41e4
    Scott Vokes authored
    Eliminate some unnecessary comparisons by making the position in the
    index signed, and treating any negative value as not found, not just
    ((uint16_t)-1). Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15, so
    index values with the highest bit set can be used as working space
    for index optimization on the fly (some day).
    
    Use 'if length >= 3' instead of 'length > 2' for the break even point,
    sinec it makes the intent clearer, and pull the comparison outside of
    the inner loop.
    
    Increase HEATSHRINK_MIN_LOOKAHEAD_BITS to 2, since -l 1 won't compress.
    Also, eliminate the corresponding MAX #define, since it has to be <= the
    window size anyway.
    
    Use a separate *pt == *pt2 instead of pt[0] == pt2[0] for comparison of the
    leading byte, which should allow for better branch prediction.
    
    Eliminate 'needle_index' in the inner loop -- it's only aliasing 'end'.
    
    Also, add comments about the indexing strategy.
    429d41e4
    History
    Improve throughput of encoder. Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15.
    Scott Vokes authored
    Eliminate some unnecessary comparisons by making the position in the
    index signed, and treating any negative value as not found, not just
    ((uint16_t)-1). Also, decrease HEATSHRINK_MAX_WINDOW_BITS to 15, so
    index values with the highest bit set can be used as working space
    for index optimization on the fly (some day).
    
    Use 'if length >= 3' instead of 'length > 2' for the break even point,
    sinec it makes the intent clearer, and pull the comparison outside of
    the inner loop.
    
    Increase HEATSHRINK_MIN_LOOKAHEAD_BITS to 2, since -l 1 won't compress.
    Also, eliminate the corresponding MAX #define, since it has to be <= the
    window size anyway.
    
    Use a separate *pt == *pt2 instead of pt[0] == pt2[0] for comparison of the
    leading byte, which should allow for better branch prediction.
    
    Eliminate 'needle_index' in the inner loop -- it's only aliasing 'end'.
    
    Also, add comments about the indexing strategy.