summaryrefslogtreecommitdiff
path: root/git-compat-util.h
diff options
context:
space:
mode:
authorDavid Turner <dturner@twopensource.com>2014-06-18 05:54:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2014-06-18 17:57:18 (GMT)
commit745224e04a03e4544c58d5d38d3c54f67100f8eb (patch)
tree615a8a79eaedbb737408f3b3c2ff8f0940f92684 /git-compat-util.h
parentdde8a902c774268628015705a7767f61af18b865 (diff)
downloadgit-745224e04a03e4544c58d5d38d3c54f67100f8eb.zip
git-745224e04a03e4544c58d5d38d3c54f67100f8eb.tar.gz
git-745224e04a03e4544c58d5d38d3c54f67100f8eb.tar.bz2
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.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/git-compat-util.h b/git-compat-util.h
index 76910e6..086fd37 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