BITOP speedup when or/and output is 0/255, stop processing further keys (#8110)
when performing the and operation, if the output is 0, we can jump out of the loop. when performing an or operation, if the output is 0xff, we can jump out of the loop.
This commit is contained in:
parent
d322e7baba
commit
04056b767f
15
src/bitops.c
15
src/bitops.c
@ -735,12 +735,23 @@ void bitopCommand(client *c) {
|
||||
output = (len[0] <= j) ? 0 : src[0][j];
|
||||
if (op == BITOP_NOT) output = ~output;
|
||||
for (i = 1; i < numkeys; i++) {
|
||||
int skip = 0;
|
||||
byte = (len[i] <= j) ? 0 : src[i][j];
|
||||
switch(op) {
|
||||
case BITOP_AND: output &= byte; break;
|
||||
case BITOP_OR: output |= byte; break;
|
||||
case BITOP_AND:
|
||||
output &= byte;
|
||||
skip = (output == 0);
|
||||
break;
|
||||
case BITOP_OR:
|
||||
output |= byte;
|
||||
skip = (output == 0xff);
|
||||
break;
|
||||
case BITOP_XOR: output ^= byte; break;
|
||||
}
|
||||
|
||||
if (skip) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
res[j] = output;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user