diff options
author | Rui Ueyama <ruiu@google.com> | 2016-06-08 23:11:14 +0000 |
---|---|---|
committer | Rui Ueyama <ruiu@google.com> | 2016-06-08 23:11:14 +0000 |
commit | 170988f21fc3e1cff22655d0ddfe20761246aa58 (patch) | |
tree | d5f28927545782e5645738267fdb52c1ecb323ea /llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp | |
parent | aa547616d2bd5f835c2ee458b544e5b67a1480d7 (diff) | |
download | bcm5719-llvm-170988f21fc3e1cff22655d0ddfe20761246aa58.tar.gz bcm5719-llvm-170988f21fc3e1cff22655d0ddfe20761246aa58.zip |
[PDB] Move PDB functions to a separate file.
We are going to use the hash functions from TPI streams.
Differential Revision: http://reviews.llvm.org/D21142
llvm-svn: 272223
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp | 60 |
1 files changed, 1 insertions, 59 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp b/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp index 8c9d4cc8253..b182b70f006 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/NameHashTable.cpp @@ -11,6 +11,7 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/DebugInfo/CodeView/StreamReader.h" +#include "llvm/DebugInfo/PDB/Raw/Hash.h" #include "llvm/DebugInfo/PDB/Raw/RawError.h" #include "llvm/Support/Endian.h" @@ -18,65 +19,6 @@ using namespace llvm; using namespace llvm::support; using namespace llvm::pdb; -// Corresponds to `Hasher::lhashPbCb` in PDB/include/misc.h. -static inline uint32_t HashStringV1(StringRef Str) { - uint32_t Result = 0; - uint32_t Size = Str.size(); - - ArrayRef<ulittle32_t> Longs(reinterpret_cast<const ulittle32_t *>(Str.data()), - Size / 4); - - for (auto Value : Longs) - Result ^= Value; - - const uint8_t *Remainder = reinterpret_cast<const uint8_t *>(Longs.end()); - uint32_t RemainderSize = Size - Longs.size() * 4; - - // Maximum of 3 bytes left. Hash a 2 byte word if possible, then hash the - // possibly remaining 1 byte. - if (RemainderSize >= 2) { - uint16_t Value = *reinterpret_cast<const ulittle16_t *>(Remainder); - Result ^= static_cast<uint32_t>(Value); - Remainder += 2; - RemainderSize -= 2; - } - - // hash possible odd byte - if (RemainderSize == 1) { - Result ^= *(Remainder++); - } - - const uint32_t toLowerMask = 0x20202020; - Result |= toLowerMask; - Result ^= (Result >> 11); - - return Result ^ (Result >> 16); -} - -// Corresponds to `HasherV2::HashULONG` in PDB/include/misc.h. -static inline uint32_t HashStringV2(StringRef Str) { - uint32_t Hash = 0xb170a1bf; - - ArrayRef<char> Buffer(Str.begin(), Str.end()); - - ArrayRef<ulittle32_t> Items( - reinterpret_cast<const ulittle32_t *>(Buffer.data()), - Buffer.size() / sizeof(ulittle32_t)); - for (ulittle32_t Item : Items) { - Hash += Item; - Hash += (Hash << 10); - Hash ^= (Hash >> 6); - } - Buffer = Buffer.slice(Items.size() * sizeof(ulittle32_t)); - for (uint8_t Item : Buffer) { - Hash += Item; - Hash += (Hash << 10); - Hash ^= (Hash >> 6); - } - - return Hash * 1664525L + 1013904223L; -} - NameHashTable::NameHashTable() : Signature(0), HashVersion(0), NameCount(0) {} Error NameHashTable::load(codeview::StreamReader &Stream) { |