crc32c: choose function in static initialization
Before: 4.430 micros/op 225732 ops/sec; 881.8 MB/s (4K per op) After: 4.125 micros/op 242425 ops/sec; 947.0 MB/s (4K per op)
This commit is contained in:
parent
2966d764cd
commit
d411dc5884
@ -333,17 +333,14 @@ static bool isSSE42() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef void (*Function)(uint64_t*, uint8_t const**);
|
typedef void (*Function)(uint64_t*, uint8_t const**);
|
||||||
static Function func = nullptr;
|
|
||||||
|
|
||||||
static inline Function Choose_CRC32() {
|
static inline Function Choose_CRC32() {
|
||||||
return isSSE42() ? Fast_CRC32 : Slow_CRC32;
|
return isSSE42() ? Fast_CRC32 : Slow_CRC32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Function func = Choose_CRC32();
|
||||||
|
|
||||||
static inline void CRC32(uint64_t* l, uint8_t const **p) {
|
static inline void CRC32(uint64_t* l, uint8_t const **p) {
|
||||||
if (func != nullptr) {
|
|
||||||
return func(l, p);
|
|
||||||
}
|
|
||||||
func = Choose_CRC32();
|
|
||||||
func(l, p);
|
func(l, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user