From 745224e04a03e4544c58d5d38d3c54f67100f8eb Mon Sep 17 00:00:00 2001 From: David Turner Date: Wed, 18 Jun 2014 01:54:42 -0400 Subject: refs.c: SSE2 optimizations for check_refname_component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 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 Signed-off-by: Junio C Hamano --- git-compat-util.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'git-compat-util.h') 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 +/* + * 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 -- cgit v1.2.1