зеркало из https://github.com/microsoft/git.git
Merge branch 'rs/xdiff-fast-hash-fix'
Fixes compilation issue on 32-bit in an earlier series.
This commit is contained in:
Коммит
0bc8bea2b4
|
@ -251,9 +251,11 @@ static unsigned long xdl_hash_record_with_whitespace(char const **data,
|
||||||
|
|
||||||
#ifdef XDL_FAST_HASH
|
#ifdef XDL_FAST_HASH
|
||||||
|
|
||||||
#define ONEBYTES 0x0101010101010101ul
|
#define REPEAT_BYTE(x) ((~0ul / 0xff) * (x))
|
||||||
#define NEWLINEBYTES 0x0a0a0a0a0a0a0a0aul
|
|
||||||
#define HIGHBITS 0x8080808080808080ul
|
#define ONEBYTES REPEAT_BYTE(0x01)
|
||||||
|
#define NEWLINEBYTES REPEAT_BYTE(0x0a)
|
||||||
|
#define HIGHBITS REPEAT_BYTE(0x80)
|
||||||
|
|
||||||
/* Return the high bit set in the first byte that is a zero */
|
/* Return the high bit set in the first byte that is a zero */
|
||||||
static inline unsigned long has_zero(unsigned long a)
|
static inline unsigned long has_zero(unsigned long a)
|
||||||
|
@ -270,21 +272,19 @@ static inline long count_masked_bytes(unsigned long mask)
|
||||||
* that works for the bytemasks without having to
|
* that works for the bytemasks without having to
|
||||||
* mask them first.
|
* mask them first.
|
||||||
*/
|
*/
|
||||||
return mask * 0x0001020304050608 >> 56;
|
|
||||||
} else {
|
|
||||||
/*
|
/*
|
||||||
* Modified Carl Chatfield G+ version for 32-bit *
|
* return mask * 0x0001020304050608 >> 56;
|
||||||
*
|
*
|
||||||
* (a) gives us
|
* Doing it like this avoids warnings on 32-bit machines.
|
||||||
* -1 (0, ff), 0 (ffff) or 1 (ffffff)
|
|
||||||
* (b) gives us
|
|
||||||
* 0 for 0, 1 for (ff ffff ffffff)
|
|
||||||
* (a+b+1) gives us
|
|
||||||
* correct 0-3 bytemask count result
|
|
||||||
*/
|
*/
|
||||||
long a = (mask - 256) >> 23;
|
long a = (REPEAT_BYTE(0x01) / 0xff + 1);
|
||||||
long b = mask & 1;
|
return mask * a >> (sizeof(long) * 7);
|
||||||
return a + b + 1;
|
} else {
|
||||||
|
/* Carl Chatfield / Jan Achrenius G+ version for 32-bit */
|
||||||
|
/* (000000 0000ff 00ffff ffffff) -> ( 1 1 2 3 ) */
|
||||||
|
long a = (0x0ff0001 + mask) >> 23;
|
||||||
|
/* Fix the 1 for 00 case */
|
||||||
|
return a & mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче