xref: /aosp_15_r20/external/lzma/CPP/Common/Xxh64Reg.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Xxh64Reg.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../../C/Xxh64.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../C/CpuArch.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker // #define Z7_USE_HHX64_ORIGINAL
9*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_USE_HHX64_ORIGINAL
10*f6dc9357SAndroid Build Coastguard Worker #ifdef __clang__
11*f6dc9357SAndroid Build Coastguard Worker #include "../../C/zstd7z/7z_zstd_cmpl.h"
12*f6dc9357SAndroid Build Coastguard Worker #pragma GCC diagnostic ignored "-Wlanguage-extension-token"
13*f6dc9357SAndroid Build Coastguard Worker #endif
14*f6dc9357SAndroid Build Coastguard Worker #define XXH_STATIC_LINKING_ONLY
15*f6dc9357SAndroid Build Coastguard Worker #include "../../C/zstd7z/common/xxhash.h"
16*f6dc9357SAndroid Build Coastguard Worker #endif
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyCom.h"
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker #include "../7zip/Common/RegisterCodec.h"
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1(
23*f6dc9357SAndroid Build Coastguard Worker   CXxh64Hasher
24*f6dc9357SAndroid Build Coastguard Worker   , IHasher
25*f6dc9357SAndroid Build Coastguard Worker )
26*f6dc9357SAndroid Build Coastguard Worker   CXxh64 _state;
27*f6dc9357SAndroid Build Coastguard Worker public:
28*f6dc9357SAndroid Build Coastguard Worker   Byte _mtDummy[1 << 7];  // it's public to eliminate clang warning: unused private field
29*f6dc9357SAndroid Build Coastguard Worker   CXxh64Hasher() { Init(); }
30*f6dc9357SAndroid Build Coastguard Worker };
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Init())
33*f6dc9357SAndroid Build Coastguard Worker {
34*f6dc9357SAndroid Build Coastguard Worker   Xxh64_Init(&_state);
35*f6dc9357SAndroid Build Coastguard Worker }
36*f6dc9357SAndroid Build Coastguard Worker 
37*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Update(const void *data, UInt32 size))
38*f6dc9357SAndroid Build Coastguard Worker {
39*f6dc9357SAndroid Build Coastguard Worker #if 1
40*f6dc9357SAndroid Build Coastguard Worker   Xxh64_Update(&_state, data, size);
41*f6dc9357SAndroid Build Coastguard Worker #else // for debug:
42*f6dc9357SAndroid Build Coastguard Worker   for (;;)
43*f6dc9357SAndroid Build Coastguard Worker   {
44*f6dc9357SAndroid Build Coastguard Worker     if (size == 0)
45*f6dc9357SAndroid Build Coastguard Worker       return;
46*f6dc9357SAndroid Build Coastguard Worker     UInt32 size2 = (size * 0x85EBCA87) % size / 8;
47*f6dc9357SAndroid Build Coastguard Worker     if (size2 == 0)
48*f6dc9357SAndroid Build Coastguard Worker       size2 = 1;
49*f6dc9357SAndroid Build Coastguard Worker     Xxh64_Update(&_state, data, size2);
50*f6dc9357SAndroid Build Coastguard Worker     data = (const void *)((const Byte *)data + size2);
51*f6dc9357SAndroid Build Coastguard Worker     size -= size2;
52*f6dc9357SAndroid Build Coastguard Worker   }
53*f6dc9357SAndroid Build Coastguard Worker #endif
54*f6dc9357SAndroid Build Coastguard Worker }
55*f6dc9357SAndroid Build Coastguard Worker 
56*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Final(Byte *digest))
57*f6dc9357SAndroid Build Coastguard Worker {
58*f6dc9357SAndroid Build Coastguard Worker   const UInt64 val = Xxh64_Digest(&_state);
59*f6dc9357SAndroid Build Coastguard Worker   SetUi64(digest, val)
60*f6dc9357SAndroid Build Coastguard Worker }
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker REGISTER_HASHER(CXxh64Hasher, 0x211, "XXH64", 8)
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_USE_HHX64_ORIGINAL
67*f6dc9357SAndroid Build Coastguard Worker namespace NOriginal
68*f6dc9357SAndroid Build Coastguard Worker {
69*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1(
70*f6dc9357SAndroid Build Coastguard Worker   CXxh64Hasher
71*f6dc9357SAndroid Build Coastguard Worker   , IHasher
72*f6dc9357SAndroid Build Coastguard Worker )
73*f6dc9357SAndroid Build Coastguard Worker   XXH64_state_t _state;
74*f6dc9357SAndroid Build Coastguard Worker public:
75*f6dc9357SAndroid Build Coastguard Worker   Byte _mtDummy[1 << 7];  // it's public to eliminate clang warning: unused private field
76*f6dc9357SAndroid Build Coastguard Worker   CXxh64Hasher() { Init(); }
77*f6dc9357SAndroid Build Coastguard Worker };
78*f6dc9357SAndroid Build Coastguard Worker 
79*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Init())
80*f6dc9357SAndroid Build Coastguard Worker {
81*f6dc9357SAndroid Build Coastguard Worker   XXH64_reset(&_state, 0);
82*f6dc9357SAndroid Build Coastguard Worker }
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Update(const void *data, UInt32 size))
85*f6dc9357SAndroid Build Coastguard Worker {
86*f6dc9357SAndroid Build Coastguard Worker   XXH64_update(&_state, data, size);
87*f6dc9357SAndroid Build Coastguard Worker }
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF2(void, CXxh64Hasher::Final(Byte *digest))
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker   const UInt64 val = XXH64_digest(&_state);
92*f6dc9357SAndroid Build Coastguard Worker   SetUi64(digest, val)
93*f6dc9357SAndroid Build Coastguard Worker }
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker REGISTER_HASHER(CXxh64Hasher, 0x212, "XXH64a", 8)
96*f6dc9357SAndroid Build Coastguard Worker }
97*f6dc9357SAndroid Build Coastguard Worker #endif
98