summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2017-02-19 14:59:39 +0000
committerSalvatore Sanfilippo <antirez@gmail.com>2017-02-19 15:00:46 +0000
commit72d6d64771ce52519c240fb122dbb35f989b4669 (patch)
tree2534ff1c212c7df17227c0ade8d19d5559eee413 /src
parent1e272a6b52d663e0b4db8f42162c4461405b7f84 (diff)
downloadredis-72d6d64771ce52519c240fb122dbb35f989b4669.tar.gz
ARM: Avoid memcpy() in MurmurHash64A() if we are using 64 bit ARM.
However note that in architectures supporting 64 bit unaligned accesses memcpy(...,...,8) is likely translated to a simple word memory movement anyway.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile1
-rw-r--r--src/config.h3
-rw-r--r--src/hyperloglog.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/src/Makefile b/src/Makefile
index 3f445f40f..f211eb84b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -14,6 +14,7 @@
release_hdr := $(shell sh -c './mkreleasehdr.sh')
uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not')
OPTIMIZATION?=-O2
DEPENDENCY_TARGETS=hiredis linenoise lua
NODEPS:=clean distclean
diff --git a/src/config.h b/src/config.h
index 354f8f5e5..1005dcc2a 100644
--- a/src/config.h
+++ b/src/config.h
@@ -211,5 +211,8 @@ void setproctitle(const char *fmt, ...);
#if defined(__arm) && !defined(__arm__)
#define __arm__
#endif
+#if defined (__aarch64__) && !defined(__arm64__)
+#define __arm64__
+#endif
#endif
diff --git a/src/hyperloglog.c b/src/hyperloglog.c
index 7de5786f9..b8a63a73f 100644
--- a/src/hyperloglog.c
+++ b/src/hyperloglog.c
@@ -401,7 +401,7 @@ uint64_t MurmurHash64A (const void * key, int len, unsigned int seed) {
uint64_t k;
#if (BYTE_ORDER == LITTLE_ENDIAN)
- #ifdef __arm__
+ #if defined(__arm__) && !defined(__arm64__)
memcpy(&k,data,sizeof(uint64_t));
#else
k = *((uint64_t*)data);