diff options
Diffstat (limited to 'contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_hash.h')
| -rw-r--r-- | contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_hash.h | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_hash.h b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_hash.h new file mode 100644 index 000000000000..648fcfaa44e9 --- /dev/null +++ b/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_hash.h @@ -0,0 +1,67 @@ +//===-- sanitizer_common.h --------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements a simple hash function. +//===----------------------------------------------------------------------===// + +#ifndef SANITIZER_HASH_H +#define SANITIZER_HASH_H + +#include "sanitizer_internal_defs.h" + +namespace __sanitizer { +class MurMur2HashBuilder { +  static const u32 m = 0x5bd1e995; +  static const u32 seed = 0x9747b28c; +  static const u32 r = 24; +  u32 h; + + public: +  explicit MurMur2HashBuilder(u32 init = 0) { h = seed ^ init; } +  void add(u32 k) { +    k *= m; +    k ^= k >> r; +    k *= m; +    h *= m; +    h ^= k; +  } +  u32 get() { +    u32 x = h; +    x ^= x >> 13; +    x *= m; +    x ^= x >> 15; +    return x; +  } +}; + +class MurMur2Hash64Builder { +  static const u64 m = 0xc6a4a7935bd1e995ull; +  static const u64 seed = 0x9747b28c9747b28cull; +  static const u64 r = 47; +  u64 h; + + public: +  explicit MurMur2Hash64Builder(u64 init = 0) { h = seed ^ (init * m); } +  void add(u64 k) { +    k *= m; +    k ^= k >> r; +    k *= m; +    h ^= k; +    h *= m; +  } +  u64 get() { +    u64 x = h; +    x ^= x >> r; +    x *= m; +    x ^= x >> r; +    return x; +  } +}; +}  // namespace __sanitizer + +#endif  // SANITIZER_HASH_H | 
