Skip to content

Commit 3071678

Browse files
authored
Refactor SIMD into Facade/Backend layers and consolidate CRC engine (#100)
Replaces the per-algorithm *Dispatch.pas units with a Facade/Backend SIMD architecture under HashLib/src/Simd/, consolidates CRC into a single generic engine with fold-by-8 carry-less kernels, expands x86 SIMD tier coverage (especially i386), and fixes several XXH3/CRC correctness issues found by new tests.
1 parent d3fc9eb commit 3071678

191 files changed

Lines changed: 35916 additions & 10373 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

HashLib.Benchmark/Delphi/HashLib.BenchmarkConsole.dpr

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ uses
2020
HlpHMACNotBuildInAdapter in '..\..\HashLib\src\Base\HlpHMACNotBuildInAdapter.pas',
2121
HlpMultipleTransformNonBlock in '..\..\HashLib\src\Base\HlpMultipleTransformNonBlock.pas',
2222
HlpAdler32 in '..\..\HashLib\src\Checksum\HlpAdler32.pas',
23-
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
23+
HlpAdler32Simd in '..\..\HashLib\src\Simd\Facade\HlpAdler32Simd.pas',
24+
HlpAdler32X86Backend in '..\..\HashLib\src\Simd\Backend\HlpAdler32X86Backend.pas',
25+
HlpAdler32ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpAdler32ArmBackend.pas',
2426
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
25-
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
26-
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
27-
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
28-
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
27+
HlpCRCCore in '..\..\HashLib\src\Checksum\HlpCRCCore.pas',
28+
HlpCRCSimd in '..\..\HashLib\src\Simd\Facade\HlpCRCSimd.pas',
29+
HlpCRCX86Backend in '..\..\HashLib\src\Simd\Backend\HlpCRCX86Backend.pas',
30+
HlpCRCArmBackend in '..\..\HashLib\src\Simd\Backend\HlpCRCArmBackend.pas',
2931
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
3032
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
3133
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',
@@ -45,27 +47,39 @@ uses
4547
HlpRIPEMD320 in '..\..\HashLib\src\Crypto\HlpRIPEMD320.pas',
4648
HlpSHA0 in '..\..\HashLib\src\Crypto\HlpSHA0.pas',
4749
HlpSHA1 in '..\..\HashLib\src\Crypto\HlpSHA1.pas',
48-
HlpSHA1Dispatch in '..\..\HashLib\src\Crypto\HlpSHA1Dispatch.pas',
50+
HlpSHA1Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA1Simd.pas',
51+
HlpSHA1X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA1X86Backend.pas',
52+
HlpSHA1ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA1ArmBackend.pas',
4953
HlpSHA2_224 in '..\..\HashLib\src\Crypto\HlpSHA2_224.pas',
5054
HlpSHA2_256 in '..\..\HashLib\src\Crypto\HlpSHA2_256.pas',
51-
HlpSHA2_256Dispatch in '..\..\HashLib\src\Crypto\HlpSHA2_256Dispatch.pas',
52-
HlpSHA2_512Dispatch in '..\..\HashLib\src\Crypto\HlpSHA2_512Dispatch.pas',
55+
HlpSHA2_256Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA2_256Simd.pas',
56+
HlpSHA2_256X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_256X86Backend.pas',
57+
HlpSHA2_256ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_256ArmBackend.pas',
58+
HlpSHA2_512Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA2_512Simd.pas',
59+
HlpSHA2_512X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_512X86Backend.pas',
60+
HlpSHA2_512ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_512ArmBackend.pas',
5361
HlpSHA2_256Base in '..\..\HashLib\src\Crypto\HlpSHA2_256Base.pas',
5462
HlpSHA2_384 in '..\..\HashLib\src\Crypto\HlpSHA2_384.pas',
5563
HlpSHA2_512 in '..\..\HashLib\src\Crypto\HlpSHA2_512.pas',
5664
HlpSHA2_512_224 in '..\..\HashLib\src\Crypto\HlpSHA2_512_224.pas',
5765
HlpSHA2_512_256 in '..\..\HashLib\src\Crypto\HlpSHA2_512_256.pas',
5866
HlpSHA2_512Base in '..\..\HashLib\src\Crypto\HlpSHA2_512Base.pas',
59-
HlpSHA3Dispatch in '..\..\HashLib\src\Crypto\HlpSHA3Dispatch.pas',
67+
HlpSHA3Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA3Simd.pas',
68+
HlpSHA3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA3X86Backend.pas',
69+
HlpSHA3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA3ArmBackend.pas',
6070
HlpSHA3 in '..\..\HashLib\src\Crypto\HlpSHA3.pas',
6171
HlpSnefru in '..\..\HashLib\src\Crypto\HlpSnefru.pas',
6272
HlpTiger in '..\..\HashLib\src\Crypto\HlpTiger.pas',
6373
HlpTiger2 in '..\..\HashLib\src\Crypto\HlpTiger2.pas',
6474
HlpWhirlPool in '..\..\HashLib\src\Crypto\HlpWhirlPool.pas',
6575
HlpGOST3411_2012 in '..\..\HashLib\src\Crypto\HlpGOST3411_2012.pas',
66-
HlpBlake2BDispatch in '..\..\HashLib\src\Crypto\HlpBlake2BDispatch.pas',
76+
HlpBlake2BSimd in '..\..\HashLib\src\Simd\Facade\HlpBlake2BSimd.pas',
77+
HlpBlake2BX86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake2BX86Backend.pas',
78+
HlpBlake2BArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake2BArmBackend.pas',
6779
HlpBlake2B in '..\..\HashLib\src\Crypto\HlpBlake2B.pas',
68-
HlpBlake2SDispatch in '..\..\HashLib\src\Crypto\HlpBlake2SDispatch.pas',
80+
HlpBlake2SSimd in '..\..\HashLib\src\Simd\Facade\HlpBlake2SSimd.pas',
81+
HlpBlake2SX86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake2SX86Backend.pas',
82+
HlpBlake2SArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake2SArmBackend.pas',
6983
HlpBlake2S in '..\..\HashLib\src\Crypto\HlpBlake2S.pas',
7084
HlpBlake2BParams in '..\..\HashLib\src\Crypto\Blake2BParams\HlpBlake2BParams.pas',
7185
HlpBlake2SParams in '..\..\HashLib\src\Crypto\Blake2SParams\HlpBlake2SParams.pas',
@@ -96,7 +110,9 @@ uses
96110
HlpMurmur2_64 in '..\..\HashLib\src\Hash64\HlpMurmur2_64.pas',
97111
HlpSipHash in '..\..\HashLib\src\Hash64\HlpSipHash.pas',
98112
HlpXXHash64 in '..\..\HashLib\src\Hash64\HlpXXHash64.pas',
99-
HlpXXHash3Dispatch in '..\..\HashLib\src\Hash64\HlpXXHash3Dispatch.pas',
113+
HlpXXHash3Simd in '..\..\HashLib\src\Simd\Facade\HlpXXHash3Simd.pas',
114+
HlpXXHash3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpXXHash3X86Backend.pas',
115+
HlpXXHash3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpXXHash3ArmBackend.pas',
100116
HlpXXHash3 in '..\..\HashLib\src\Hash64\HlpXXHash3.pas',
101117
HlpMurmurHash3_x86_128 in '..\..\HashLib\src\Hash128\HlpMurmurHash3_x86_128.pas',
102118
HlpMurmurHash3_x64_128 in '..\..\HashLib\src\Hash128\HlpMurmurHash3_x64_128.pas',
@@ -111,14 +127,20 @@ uses
111127
HlpIBlake2SParams in '..\..\HashLib\src\Interfaces\IBlake2SParams\HlpIBlake2SParams.pas',
112128
HlpBlake2BP in '..\..\HashLib\src\Crypto\HlpBlake2BP.pas',
113129
HlpBlake2SP in '..\..\HashLib\src\Crypto\HlpBlake2SP.pas',
114-
HlpBlake3Dispatch in '..\..\HashLib\src\Crypto\HlpBlake3Dispatch.pas',
130+
HlpBlake3Simd in '..\..\HashLib\src\Simd\Facade\HlpBlake3Simd.pas',
131+
HlpBlake3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake3X86Backend.pas',
132+
HlpBlake3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake3ArmBackend.pas',
115133
HlpBlake3 in '..\..\HashLib\src\Crypto\HlpBlake3.pas',
116134
HlpPBKDF2_HMACNotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF2_HMACNotBuildInAdapter.pas',
117135
HlpPBKDF_Argon2NotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF_Argon2NotBuildInAdapter.pas',
118-
HlpArgon2Dispatch in '..\..\HashLib\src\KDF\HlpArgon2Dispatch.pas',
136+
HlpArgon2Simd in '..\..\HashLib\src\Simd\Facade\HlpArgon2Simd.pas',
137+
HlpArgon2X86Backend in '..\..\HashLib\src\Simd\Backend\HlpArgon2X86Backend.pas',
138+
HlpArgon2ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpArgon2ArmBackend.pas',
119139
HlpArgon2TypeAndVersion in '..\..\HashLib\src\KDF\HlpArgon2TypeAndVersion.pas',
120140
HlpPBKDF_ScryptNotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF_ScryptNotBuildInAdapter.pas',
121-
HlpScryptDispatch in '..\..\HashLib\src\KDF\HlpScryptDispatch.pas',
141+
HlpScryptSimd in '..\..\HashLib\src\Simd\Facade\HlpScryptSimd.pas',
142+
HlpScryptX86Backend in '..\..\HashLib\src\Simd\Backend\HlpScryptX86Backend.pas',
143+
HlpScryptArmBackend in '..\..\HashLib\src\Simd\Backend\HlpScryptArmBackend.pas',
122144
HlpConverters in '..\..\HashLib\src\Utils\HlpConverters.pas',
123145
HlpBitOperations in '..\..\HashLib\src\Utils\HlpBitOperations.pas',
124146
HlpBinaryPrimitives in '..\..\HashLib\src\Utils\HlpBinaryPrimitives.pas',

HashLib.Benchmark/Delphi/HashLib.BenchmarkFMX.dpr

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ uses
1919
HlpHMACNotBuildInAdapter in '..\..\HashLib\src\Base\HlpHMACNotBuildInAdapter.pas',
2020
HlpMultipleTransformNonBlock in '..\..\HashLib\src\Base\HlpMultipleTransformNonBlock.pas',
2121
HlpAdler32 in '..\..\HashLib\src\Checksum\HlpAdler32.pas',
22-
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
22+
HlpAdler32Simd in '..\..\HashLib\src\Simd\Facade\HlpAdler32Simd.pas',
23+
HlpAdler32X86Backend in '..\..\HashLib\src\Simd\Backend\HlpAdler32X86Backend.pas',
24+
HlpAdler32ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpAdler32ArmBackend.pas',
2325
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
24-
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
25-
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
26-
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
27-
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
26+
HlpCRCCore in '..\..\HashLib\src\Checksum\HlpCRCCore.pas',
27+
HlpCRCSimd in '..\..\HashLib\src\Simd\Facade\HlpCRCSimd.pas',
28+
HlpCRCX86Backend in '..\..\HashLib\src\Simd\Backend\HlpCRCX86Backend.pas',
29+
HlpCRCArmBackend in '..\..\HashLib\src\Simd\Backend\HlpCRCArmBackend.pas',
2830
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
2931
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
3032
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',
@@ -44,27 +46,39 @@ uses
4446
HlpRIPEMD320 in '..\..\HashLib\src\Crypto\HlpRIPEMD320.pas',
4547
HlpSHA0 in '..\..\HashLib\src\Crypto\HlpSHA0.pas',
4648
HlpSHA1 in '..\..\HashLib\src\Crypto\HlpSHA1.pas',
47-
HlpSHA1Dispatch in '..\..\HashLib\src\Crypto\HlpSHA1Dispatch.pas',
49+
HlpSHA1Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA1Simd.pas',
50+
HlpSHA1X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA1X86Backend.pas',
51+
HlpSHA1ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA1ArmBackend.pas',
4852
HlpSHA2_224 in '..\..\HashLib\src\Crypto\HlpSHA2_224.pas',
4953
HlpSHA2_256 in '..\..\HashLib\src\Crypto\HlpSHA2_256.pas',
50-
HlpSHA2_256Dispatch in '..\..\HashLib\src\Crypto\HlpSHA2_256Dispatch.pas',
51-
HlpSHA2_512Dispatch in '..\..\HashLib\src\Crypto\HlpSHA2_512Dispatch.pas',
54+
HlpSHA2_256Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA2_256Simd.pas',
55+
HlpSHA2_256X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_256X86Backend.pas',
56+
HlpSHA2_256ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_256ArmBackend.pas',
57+
HlpSHA2_512Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA2_512Simd.pas',
58+
HlpSHA2_512X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_512X86Backend.pas',
59+
HlpSHA2_512ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA2_512ArmBackend.pas',
5260
HlpSHA2_256Base in '..\..\HashLib\src\Crypto\HlpSHA2_256Base.pas',
5361
HlpSHA2_384 in '..\..\HashLib\src\Crypto\HlpSHA2_384.pas',
5462
HlpSHA2_512 in '..\..\HashLib\src\Crypto\HlpSHA2_512.pas',
5563
HlpSHA2_512_224 in '..\..\HashLib\src\Crypto\HlpSHA2_512_224.pas',
5664
HlpSHA2_512_256 in '..\..\HashLib\src\Crypto\HlpSHA2_512_256.pas',
5765
HlpSHA2_512Base in '..\..\HashLib\src\Crypto\HlpSHA2_512Base.pas',
58-
HlpSHA3Dispatch in '..\..\HashLib\src\Crypto\HlpSHA3Dispatch.pas',
66+
HlpSHA3Simd in '..\..\HashLib\src\Simd\Facade\HlpSHA3Simd.pas',
67+
HlpSHA3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpSHA3X86Backend.pas',
68+
HlpSHA3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpSHA3ArmBackend.pas',
5969
HlpSHA3 in '..\..\HashLib\src\Crypto\HlpSHA3.pas',
6070
HlpSnefru in '..\..\HashLib\src\Crypto\HlpSnefru.pas',
6171
HlpTiger in '..\..\HashLib\src\Crypto\HlpTiger.pas',
6272
HlpTiger2 in '..\..\HashLib\src\Crypto\HlpTiger2.pas',
6373
HlpWhirlPool in '..\..\HashLib\src\Crypto\HlpWhirlPool.pas',
6474
HlpGOST3411_2012 in '..\..\HashLib\src\Crypto\HlpGOST3411_2012.pas',
65-
HlpBlake2BDispatch in '..\..\HashLib\src\Crypto\HlpBlake2BDispatch.pas',
75+
HlpBlake2BSimd in '..\..\HashLib\src\Simd\Facade\HlpBlake2BSimd.pas',
76+
HlpBlake2BX86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake2BX86Backend.pas',
77+
HlpBlake2BArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake2BArmBackend.pas',
6678
HlpBlake2B in '..\..\HashLib\src\Crypto\HlpBlake2B.pas',
67-
HlpBlake2SDispatch in '..\..\HashLib\src\Crypto\HlpBlake2SDispatch.pas',
79+
HlpBlake2SSimd in '..\..\HashLib\src\Simd\Facade\HlpBlake2SSimd.pas',
80+
HlpBlake2SX86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake2SX86Backend.pas',
81+
HlpBlake2SArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake2SArmBackend.pas',
6882
HlpBlake2S in '..\..\HashLib\src\Crypto\HlpBlake2S.pas',
6983
HlpBlake2BParams in '..\..\HashLib\src\Crypto\Blake2BParams\HlpBlake2BParams.pas',
7084
HlpBlake2SParams in '..\..\HashLib\src\Crypto\Blake2SParams\HlpBlake2SParams.pas',
@@ -95,7 +109,9 @@ uses
95109
HlpMurmur2_64 in '..\..\HashLib\src\Hash64\HlpMurmur2_64.pas',
96110
HlpSipHash in '..\..\HashLib\src\Hash64\HlpSipHash.pas',
97111
HlpXXHash64 in '..\..\HashLib\src\Hash64\HlpXXHash64.pas',
98-
HlpXXHash3Dispatch in '..\..\HashLib\src\Hash64\HlpXXHash3Dispatch.pas',
112+
HlpXXHash3Simd in '..\..\HashLib\src\Simd\Facade\HlpXXHash3Simd.pas',
113+
HlpXXHash3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpXXHash3X86Backend.pas',
114+
HlpXXHash3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpXXHash3ArmBackend.pas',
99115
HlpXXHash3 in '..\..\HashLib\src\Hash64\HlpXXHash3.pas',
100116
HlpMurmurHash3_x86_128 in '..\..\HashLib\src\Hash128\HlpMurmurHash3_x86_128.pas',
101117
HlpMurmurHash3_x64_128 in '..\..\HashLib\src\Hash128\HlpMurmurHash3_x64_128.pas',
@@ -110,14 +126,20 @@ uses
110126
HlpIBlake2SParams in '..\..\HashLib\src\Interfaces\IBlake2SParams\HlpIBlake2SParams.pas',
111127
HlpBlake2BP in '..\..\HashLib\src\Crypto\HlpBlake2BP.pas',
112128
HlpBlake2SP in '..\..\HashLib\src\Crypto\HlpBlake2SP.pas',
113-
HlpBlake3Dispatch in '..\..\HashLib\src\Crypto\HlpBlake3Dispatch.pas',
129+
HlpBlake3Simd in '..\..\HashLib\src\Simd\Facade\HlpBlake3Simd.pas',
130+
HlpBlake3X86Backend in '..\..\HashLib\src\Simd\Backend\HlpBlake3X86Backend.pas',
131+
HlpBlake3ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpBlake3ArmBackend.pas',
114132
HlpBlake3 in '..\..\HashLib\src\Crypto\HlpBlake3.pas',
115133
HlpPBKDF2_HMACNotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF2_HMACNotBuildInAdapter.pas',
116134
HlpPBKDF_Argon2NotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF_Argon2NotBuildInAdapter.pas',
117-
HlpArgon2Dispatch in '..\..\HashLib\src\KDF\HlpArgon2Dispatch.pas',
135+
HlpArgon2Simd in '..\..\HashLib\src\Simd\Facade\HlpArgon2Simd.pas',
136+
HlpArgon2X86Backend in '..\..\HashLib\src\Simd\Backend\HlpArgon2X86Backend.pas',
137+
HlpArgon2ArmBackend in '..\..\HashLib\src\Simd\Backend\HlpArgon2ArmBackend.pas',
118138
HlpArgon2TypeAndVersion in '..\..\HashLib\src\KDF\HlpArgon2TypeAndVersion.pas',
119139
HlpPBKDF_ScryptNotBuildInAdapter in '..\..\HashLib\src\KDF\HlpPBKDF_ScryptNotBuildInAdapter.pas',
120-
HlpScryptDispatch in '..\..\HashLib\src\KDF\HlpScryptDispatch.pas',
140+
HlpScryptSimd in '..\..\HashLib\src\Simd\Facade\HlpScryptSimd.pas',
141+
HlpScryptX86Backend in '..\..\HashLib\src\Simd\Backend\HlpScryptX86Backend.pas',
142+
HlpScryptArmBackend in '..\..\HashLib\src\Simd\Backend\HlpScryptArmBackend.pas',
121143
HlpConverters in '..\..\HashLib\src\Utils\HlpConverters.pas',
122144
HlpBitOperations in '..\..\HashLib\src\Utils\HlpBitOperations.pas',
123145
HlpBinaryPrimitives in '..\..\HashLib\src\Utils\HlpBinaryPrimitives.pas',

0 commit comments

Comments
 (0)