Re: [PATCH] git gc: Speed it up by 18% via faster hash comparisons
Ingo Molnar <mingo@elte.hu> writes:
Show 8 quoted lines
> In any case, i'll retract the null case as it really isnt called that often in
> the tests i've done - updated patch below - it simply falls back on to hashcmp.
>
> Thanks,
>
> Ingo
>
> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Thanks, will queue this version.
Show 33 quoted lines
> diff --git a/cache.h b/cache.h
> index 2674f4c..39fa9cd 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -675,14 +675,24 @@ extern char *sha1_pack_name(const unsigned char *sha1);
> extern char *sha1_pack_index_name(const unsigned char *sha1);
> extern const char *find_unique_abbrev(const unsigned char *sha1, int);
> extern const unsigned char null_sha1[20];
> -static inline int is_null_sha1(const unsigned char *sha1)
> +
> +static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
> {
> - return !memcmp(sha1, null_sha1, 20);
> + int i;
> +
> + for (i = 0; i < 20; i++, sha1++, sha2++) {
> + if (*sha1 != *sha2)
> + return *sha1 - *sha2;
> + }
> +
> + return 0;
> }
> -static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
> +
> +static inline int is_null_sha1(const unsigned char *sha1)
> {
> - return memcmp(sha1, sha2, 20);
> + return !hashcmp(sha1, null_sha1);
> }
> +
> static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src)
> {
> memcpy(sha_dst, sha_src, 20);