@@ -11,8 +11,14 @@ interface
1111 SHA1_Compress: TSHA1CompressProc;
1212
1313const
14- // BSWAP32 mask for pshufb: reverses bytes within each dword (big-endian to little-endian)
15- K_SHA1: array [0 .. 3 ] of UInt32 = (
14+ // K constants replicated 4x for SIMD, followed by BSWAP32 mask.
15+ // Layout: K_00_19 (16B) at 0, K_20_39 at 16, K_40_59 at 32,
16+ // K_60_79 at 48, BSWAP32 mask at 64.
17+ K_SHA1: array [0 .. 19 ] of UInt32 = (
18+ $5A827999, $5A827999, $5A827999, $5A827999,
19+ $6ED9EBA1, $6ED9EBA1, $6ED9EBA1, $6ED9EBA1,
20+ $8F1BBCDC, $8F1BBCDC, $8F1BBCDC, $8F1BBCDC,
21+ $CA62C1D6, $CA62C1D6, $CA62C1D6, $CA62C1D6,
1622 $00010203 , $04050607 , $08090A0B, $0C0D0E0F
1723 );
1824
@@ -112,6 +118,11 @@ procedure SHA1_Compress_ShaNi_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
112118 SHA1_Compress_ShaNi(AState, AData, ANumBlocks, @K_SHA1);
113119end ;
114120
121+ procedure SHA1_Compress_Sse2 (AState, AData: Pointer; ANumBlocks: UInt32);
122+ { $I ..\Include\Simd\Common\SimdProc3Begin.inc}
123+ { $I ..\Include\Simd\SHA1\SHA1CompressSse2.inc}
124+ end ;
125+
115126procedure SHA1_Compress_Ssse3 (AState, AData: Pointer; ANumBlocks: UInt32;
116127 AConstants: Pointer);
117128 { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
@@ -143,23 +154,32 @@ procedure SHA1_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
143154procedure InitDispatch ();
144155begin
145156{ $IFDEF HASHLIB_X86_64}
146- if TSimd.HasSHANI() and (TSimd.GetActiveLevel() >= TSimdLevel.SSSE3) then
157+ if TSimd.HasSHANI() then
147158 begin
148159 SHA1_Compress := @SHA1_Compress_ShaNi_Wrap;
149160 Exit;
150161 end ;
151- if TSimd.GetActiveLevel() >= TSimdLevel.AVX2 then
152- begin
153- SHA1_Compress := @SHA1_Compress_Avx2_Wrap;
154- Exit;
155- end ;
156- if TSimd.GetActiveLevel() >= TSimdLevel.SSSE3 then
157- begin
158- SHA1_Compress := @SHA1_Compress_Ssse3_Wrap;
159- Exit;
160- end ;
161162{ $ENDIF}
162- SHA1_Compress := @SHA1_Compress_Scalar;
163+ case TSimd.GetActiveLevel() of
164+ { $IFDEF HASHLIB_X86_64}
165+ TSimdLevel.AVX2:
166+ begin
167+ SHA1_Compress := @SHA1_Compress_Avx2_Wrap;
168+ end ;
169+ TSimdLevel.SSSE3:
170+ begin
171+ SHA1_Compress := @SHA1_Compress_Ssse3_Wrap;
172+ end ;
173+ TSimdLevel.SSE2:
174+ begin
175+ SHA1_Compress := @SHA1_Compress_Sse2;
176+ end ;
177+ { $ENDIF}
178+ TSimdLevel.Scalar:
179+ begin
180+ SHA1_Compress := @SHA1_Compress_Scalar;
181+ end ;
182+ end ;
163183end ;
164184
165185initialization
0 commit comments