mirror of https://github.com/google/snappy.git
prefetch instructions in FindMatchLength
This commit is contained in:
parent
b638ebe5d9
commit
05654655af
|
@ -103,7 +103,21 @@ static inline std::pair<size_t, bool> FindMatchLength(const char* s1,
|
|||
uint64_t* data) {
|
||||
assert(s2_limit >= s2);
|
||||
size_t matched = 0;
|
||||
|
||||
|
||||
#if defined(__has_builtin)
|
||||
#if __has_builtin(__builtin_prefetch)
|
||||
__builtin_prefetch(s1);
|
||||
__builtin_prefetch(s2);
|
||||
#endif
|
||||
#elif defined(__SSE__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 1))
|
||||
#include <xmmintrin.h>
|
||||
_mm_prefetch(s1, _MM_HINT_T1);
|
||||
_mm_prefetch(s2, _MM_HINT_T1);
|
||||
#elif defined(_M_ARM64) || defined(_M_ARM)
|
||||
__prefetch(s1);
|
||||
__prefetch(s2);
|
||||
#endif
|
||||
|
||||
// This block isn't necessary for correctness; we could just start looping
|
||||
// immediately. As an optimization though, it is useful. It creates some not
|
||||
// uncommon code paths that determine, without extra effort, whether the match
|
||||
|
|
Loading…
Reference in New Issue