X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=include%2Fwimlib%2Flz_extend.h;h=a3780e1d54a819245b980dc36439d0ddc7d2a3ab;hp=e9a56224ea0768104838576815c43d58179bf545;hb=226a6dfe2909e054568298196785c944a1b5c4fa;hpb=0ecb0529b5fcacc1abafa1f3f02a40c44783ada8 diff --git a/include/wimlib/lz_extend.h b/include/wimlib/lz_extend.h index e9a56224..a3780e1d 100644 --- a/include/wimlib/lz_extend.h +++ b/include/wimlib/lz_extend.h @@ -20,11 +20,10 @@ lz_extend(const u8 * const strptr, const u8 * const matchptr, const u32 start_len, const u32 max_len) { u32 len = start_len; + machine_word_t v_word; if (UNALIGNED_ACCESS_IS_FAST) { - machine_word_t v_word; - if (likely(max_len - len >= 4 * WORDSIZE)) { #define COMPARE_WORD_STEP \ @@ -48,18 +47,18 @@ lz_extend(const u8 * const strptr, const u8 * const matchptr, goto word_differs; len += WORDSIZE; } + } - while (len < max_len && matchptr[len] == strptr[len]) - len++; - return len; + while (len < max_len && matchptr[len] == strptr[len]) + len++; + return len; - word_differs: - return len + (ffsw(v_word) >> 3); - } else { - while (len < max_len && matchptr[len] == strptr[len]) - len++; - return len; - } +word_differs: + if (CPU_IS_LITTLE_ENDIAN) + len += (ffsw(v_word) >> 3); + else + len += (flsw(v_word) >> 3); + return len; } #endif /* _WIMLIB_LZ_EXTEND_H */