hashcmp(): inline memcmp() by hand to optimize
This is reported to speed "git gc" by 18%. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Ingo Molnar committed
Apr 28, 2011 at 12:19 UTC
1a812f3a701969824caf96803e160cbad6050520
1 file changed
+14
-4
cache.h
+14
-4
@@ -614,14 +614,24 @@ extern char *sha1_pack_name(const unsigned char *sha1);
614
extern char *sha1_pack_index_name(const unsigned char *sha1);
615
extern const char *find_unique_abbrev(const unsigned char *sha1, int);
616
extern const unsigned char null_sha1[20];
617
-static inline int is_null_sha1(const unsigned char *sha1)
617
+
618
+static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
619
{
619
- return !memcmp(sha1, null_sha1, 20);
620
+ int i;
621
+
622
+ for (i = 0; i < 20; i++, sha1++, sha2++) {
623
+ if (*sha1 != *sha2)
624
+ return *sha1 - *sha2;
625
+ }
626
+
627
+ return 0;
628
}
621
-static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2)
629
+
630
+static inline int is_null_sha1(const unsigned char *sha1)
631
{
623
- return memcmp(sha1, sha2, 20);
632
+ return !hashcmp(sha1, null_sha1);
633
}
634
+
635
static inline void hashcpy(unsigned char *sha_dst, const unsigned char *sha_src)
636
{
637
memcpy(sha_dst, sha_src, 20);