diff options
author | David Turner <dturner@twopensource.com> | 2014-06-18 09:54:42 +0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-06-18 21:57:18 +0400 |
commit | 745224e04a03e4544c58d5d38d3c54f67100f8eb (patch) | |
tree | 615a8a79eaedbb737408f3b3c2ff8f0940f92684 /git-compat-util.h | |
parent | dde8a902c774268628015705a7767f61af18b865 (diff) |
refs.c: SSE2 optimizations for check_refname_component
Optimize check_refname_component using SSE2 on x86_64.
git rev-parse HEAD is a good test-case for this, since it does almost
nothing except parse refs. For one particular repo with about 60k
refs, almost all packed, the timings are:
Look up table: 29 ms
SSE2: 23 ms
This cuts about 20% off of the runtime.
Ondřej Bílka <neleai@seznam.cz> suggested an SSE2 approach to the
substring searches, which netted a speed boost over the SSE4.2 code I
had initially written.
Signed-off-by: David Turner <dturner@twitter.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-compat-util.h')
-rw-r--r-- | git-compat-util.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/git-compat-util.h b/git-compat-util.h index 76910e6cd1..086fd374bb 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -677,6 +677,17 @@ void git_qsort(void *base, size_t nmemb, size_t size, #endif #endif +#if defined(__GNUC__) && defined(__x86_64__) +#include <emmintrin.h> +/* + * This is the system memory page size; it's used so that we can read + * outside the bounds of an allocation without segfaulting. + */ +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif +#endif + #ifdef UNRELIABLE_FSTAT #define fstat_is_reliable() 0 #else |