IMPORT: ebtree: make string_equal_bits turn back to unsigned char
With flsnz() instead of flsnz_long() we're now getting a better performance on both x86 and ARM. The difference is that previously we were relying on a function that was forcing the use of register %eax for the 8-bit version and that was preventing the compiler from keeping the code optimized. The gain is roughly 5% on ARM and 1% on x86. This is cbtree commit 19cf39b2514bea79fed94d85e421e293be097a0e. This is ebtree commit a9aaf2d94e2c92fa37aa3152c2ad8220a9533ead.
This commit is contained in:
parent
1c46a07460
commit
2a14f99dbb
@ -840,7 +840,7 @@ static forceinline ssize_t string_equal_bits(const unsigned char *a,
|
|||||||
const unsigned char *b,
|
const unsigned char *b,
|
||||||
size_t ignore)
|
size_t ignore)
|
||||||
{
|
{
|
||||||
unsigned long c, d;
|
unsigned char c, d;
|
||||||
size_t beg;
|
size_t beg;
|
||||||
|
|
||||||
beg = ignore >> 3;
|
beg = ignore >> 3;
|
||||||
@ -864,7 +864,7 @@ static forceinline ssize_t string_equal_bits(const unsigned char *a,
|
|||||||
* identical bits. Note that low bit numbers are assigned to high positions
|
* identical bits. Note that low bit numbers are assigned to high positions
|
||||||
* in the byte, as we compare them as strings.
|
* in the byte, as we compare them as strings.
|
||||||
*/
|
*/
|
||||||
return (beg << 3) - flsnz_long(c);
|
return (beg << 3) - flsnz(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static forceinline int cmp_bits(const unsigned char *a, const unsigned char *b, unsigned int pos)
|
static forceinline int cmp_bits(const unsigned char *a, const unsigned char *b, unsigned int pos)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user