Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
ed7e3310
Commit
ed7e3310
authored
Feb 23, 2017
by
antirez
Browse files
Merge branch 'sparc' of
ssh://209.141.57.197:12222//export/home/antirez/redis
into sparc
parents
95883313
b3391fd8
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/bitops.c
View file @
ed7e3310
...
...
@@ -104,6 +104,7 @@ long redisBitpos(void *s, unsigned long count, int bit) {
unsigned
long
skipval
,
word
=
0
,
one
;
long
pos
=
0
;
/* Position of bit, to return to the caller. */
unsigned
long
j
;
int
found
;
/* Process whole words first, seeking for first word that is not
* all ones or all zeros respectively if we are lookig for zeros
...
...
@@ -117,21 +118,27 @@ long redisBitpos(void *s, unsigned long count, int bit) {
/* Skip initial bits not aligned to sizeof(unsigned long) byte by byte. */
skipval
=
bit
?
0
:
UCHAR_MAX
;
c
=
(
unsigned
char
*
)
s
;
found
=
0
;
while
((
unsigned
long
)
c
&
(
sizeof
(
*
l
)
-
1
)
&&
count
)
{
if
(
*
c
!=
skipval
)
break
;
if
(
*
c
!=
skipval
)
{
found
=
1
;
break
;
}
c
++
;
count
--
;
pos
+=
8
;
}
/* Skip bits with full word step. */
skipval
=
bit
?
0
:
ULONG_MAX
;
l
=
(
unsigned
long
*
)
c
;
while
(
count
>=
sizeof
(
*
l
))
{
if
(
*
l
!=
skipval
)
break
;
l
++
;
count
-=
sizeof
(
*
l
);
pos
+=
sizeof
(
*
l
)
*
8
;
if
(
!
found
)
{
skipval
=
bit
?
0
:
ULONG_MAX
;
while
(
count
>=
sizeof
(
*
l
))
{
if
(
*
l
!=
skipval
)
break
;
l
++
;
count
-=
sizeof
(
*
l
);
pos
+=
sizeof
(
*
l
)
*
8
;
}
}
/* Load bytes into "word" considering the first byte as the most significant
...
...
@@ -658,7 +665,7 @@ void bitopCommand(client *c) {
* result in GCC compiling the code using multiple-words load/store
* operations that are not supported even in ARM >= v6. */
j
=
0
;
#ifndef
__arm__
#ifndef
USE_ALIGNED_ACCESS
if
(
minlen
>=
sizeof
(
unsigned
long
)
*
4
&&
numkeys
<=
16
)
{
unsigned
long
*
lp
[
16
];
unsigned
long
*
lres
=
(
unsigned
long
*
)
res
;
...
...
src/config.h
View file @
ed7e3310
...
...
@@ -215,4 +215,13 @@ void setproctitle(const char *fmt, ...);
#define __arm64__
#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
src/hyperloglog.c
View file @
ed7e3310
...
...
@@ -401,7 +401,7 @@ uint64_t MurmurHash64A (const void * key, int len, unsigned int seed) {
uint64_t
k
;
#if (BYTE_ORDER == LITTLE_ENDIAN)
#if
def
ined(__arm__) && !defined(__arm64__)
#ifdef
USE_ALIGNED_ACCESS
memcpy
(
&
k
,
data
,
sizeof
(
uint64_t
));
#else
k
=
*
((
uint64_t
*
)
data
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment