Use ARM unaligned accesses ifdefs for SPARC as well.

This commit is contained in:
Salvatore Sanfilippo 2017-02-23 22:39:44 +08:00
parent 08007ed442
commit 7a4c9474f8
3 changed files with 11 additions and 2 deletions

View File

@ -665,7 +665,7 @@ void bitopCommand(client *c) {
* result in GCC compiling the code using multiple-words load/store * result in GCC compiling the code using multiple-words load/store
* operations that are not supported even in ARM >= v6. */ * operations that are not supported even in ARM >= v6. */
j = 0; j = 0;
#ifndef __arm__ #ifndef USE_ALIGNED_ACCESS
if (minlen >= sizeof(unsigned long)*4 && numkeys <= 16) { if (minlen >= sizeof(unsigned long)*4 && numkeys <= 16) {
unsigned long *lp[16]; unsigned long *lp[16];
unsigned long *lres = (unsigned long*) res; unsigned long *lres = (unsigned long*) res;

View File

@ -215,4 +215,13 @@ void setproctitle(const char *fmt, ...);
#define __arm64__ #define __arm64__
#endif #endif
/* Make sure we can test for SPARC just checking for __sparc__. */
#if defined(__sparc) && !defined(__sparc__)
#define __sparc__
#endif
#if defined(__sparc__) || defined(__arm__)
#define USE_ALIGNED_ACCESS
#endif
#endif #endif

View File

@ -401,7 +401,7 @@ uint64_t MurmurHash64A (const void * key, int len, unsigned int seed) {
uint64_t k; uint64_t k;
#if (BYTE_ORDER == LITTLE_ENDIAN) #if (BYTE_ORDER == LITTLE_ENDIAN)
#if defined(__arm__) && !defined(__arm64__) #ifdef USE_ALIGNED_ACCESS
memcpy(&k,data,sizeof(uint64_t)); memcpy(&k,data,sizeof(uint64_t));
#else #else
k = *((uint64_t*)data); k = *((uint64_t*)data);