summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-03-29 08:37:01 +0100
committerantirez <antirez@gmail.com>2014-03-29 08:37:01 +0100
commit28dce36f76b13e9a1d92c250428b17b88216e313 (patch)
tree201b9683bbb1ca848c95aa68533e46f78388f215
parentac8fbe8829cc3ff7b8ff23afd9e5b46c9b2b3ec9 (diff)
downloadredis-28dce36f76b13e9a1d92c250428b17b88216e313.tar.gz
Use processor base types in HLL_(GET|SET)_REGISTER.
This speedups the macros by a noticeable factor.
-rw-r--r--src/hyperloglog.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/hyperloglog.c b/src/hyperloglog.c
index d9529520e..50983c332 100644
--- a/src/hyperloglog.c
+++ b/src/hyperloglog.c
@@ -160,9 +160,9 @@
* 'p' is an array of unsigned bytes. */
#define HLL_GET_REGISTER(target,p,regnum) do { \
uint8_t *_p = (uint8_t*) p; \
- int _byte = regnum*REDIS_HLL_BITS/8; \
- int _leftshift = regnum*REDIS_HLL_BITS&7; \
- int _rightshift = 8 - _leftshift; \
+ unsigned long _byte = regnum*REDIS_HLL_BITS/8; \
+ unsigned long _leftshift = regnum*REDIS_HLL_BITS&7; \
+ unsigned long _rightshift = 8 - _leftshift; \
target = ((_p[_byte] << _leftshift) | \
(_p[_byte+1] >> _rightshift)) & \
REDIS_HLL_REGISTER_MAX; \
@@ -172,9 +172,9 @@
* 'p' is an array of unsigned bytes. */
#define HLL_SET_REGISTER(p,regnum,val) do { \
uint8_t *_p = (uint8_t*) p; \
- int _byte = regnum*REDIS_HLL_BITS/8; \
- int _leftshift = regnum*REDIS_HLL_BITS&7; \
- int _rightshift = 8 - _leftshift; \
+ unsigned long _byte = regnum*REDIS_HLL_BITS/8; \
+ unsigned long _leftshift = regnum*REDIS_HLL_BITS&7; \
+ unsigned long _rightshift = 8 - _leftshift; \
_p[_byte] &= ~(REDIS_HLL_REGISTER_MAX >> _leftshift); \
_p[_byte] |= val >> _leftshift; \
_p[_byte+1] &= ~(REDIS_HLL_REGISTER_MAX << _rightshift); \
@@ -290,10 +290,10 @@ uint64_t hllCount(uint8_t *registers) {
initialized = 1;
}
+ /* Compute SUM(2^-register[0..i]). */
for (j = 0; j < REDIS_HLL_REGISTERS; j++) {
- uint8_t reg;
+ unsigned long reg;
- /* Compute SUM(2^-register[0..i]). */
HLL_GET_REGISTER(reg,registers,j);
if (reg == 0) {
ez++;