@@ -64,33 +64,15 @@ procedure Adler32_Update_Scalar(AData: PByte; ALength: UInt32; ASums: Pointer);
6464end ;
6565
6666// =============================================================================
67- // SIMD implementations ( x86-64 only )
67+ // SIMD implementations: SSE2 (IA-32); SSE2 / SSSE3 / AVX2 ( x86-64)
6868// =============================================================================
6969
70- { $IFDEF HASHLIB_X86_64_ASM }
70+ { $IFDEF HASHLIB_X86_SIMD }
7171
7272type
7373 TProcessBlocksProc = procedure(AData: PByte; ANumBlocks: UInt32;
7474 ASums, AConstants: Pointer);
7575
76- procedure Adler32_ProcessBlocks_Sse2 (AData: PByte; ANumBlocks: UInt32;
77- ASums, AConstants: Pointer);
78- { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
79- { $I ..\Include\Simd\Adler32\Adler32BlocksSse2.inc}
80- end ;
81-
82- procedure Adler32_ProcessBlocks_Ssse3 (AData: PByte; ANumBlocks: UInt32;
83- ASums, AConstants: Pointer);
84- { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
85- { $I ..\Include\Simd\Adler32\Adler32BlocksSsse3.inc}
86- end ;
87-
88- procedure Adler32_ProcessBlocks_Avx2 (AData: PByte; ANumBlocks: UInt32;
89- ASums, AConstants: Pointer);
90- { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
91- { $I ..\Include\Simd\Adler32\Adler32BlocksAvx2.inc}
92- end ;
93-
9476procedure Adler32_Update_Simd (AData: PByte; ALength: UInt32; ASums: Pointer;
9577 AProcessBlocks: TProcessBlocksProc);
9678const
@@ -130,9 +112,36 @@ procedure Adler32_Update_Simd(AData: PByte; ALength: UInt32; ASums: Pointer;
130112 end ;
131113end ;
132114
133- procedure Adler32_Update_Sse2 (AData: PByte; ALength: UInt32; ASums: Pointer);
134- begin
135- Adler32_Update_Simd(AData, ALength, ASums, @Adler32_ProcessBlocks_Sse2);
115+ { $ENDIF HASHLIB_X86_SIMD}
116+
117+ { $IFDEF HASHLIB_I386_ASM}
118+
119+ procedure Adler32_ProcessBlocks_Sse2 (AData: PByte; ANumBlocks: UInt32;
120+ ASums, AConstants: Pointer);
121+ { $I ..\Include\Simd\Common\SimdProc4Begin_i386.inc}
122+ { $I ..\Include\Simd\Adler32\Adler32BlocksSse2_i386.inc}
123+ end ;
124+
125+ { $ENDIF HASHLIB_I386_ASM}
126+
127+ { $IFDEF HASHLIB_X86_64_ASM}
128+
129+ procedure Adler32_ProcessBlocks_Sse2 (AData: PByte; ANumBlocks: UInt32;
130+ ASums, AConstants: Pointer);
131+ { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
132+ { $I ..\Include\Simd\Adler32\Adler32BlocksSse2.inc}
133+ end ;
134+
135+ procedure Adler32_ProcessBlocks_Ssse3 (AData: PByte; ANumBlocks: UInt32;
136+ ASums, AConstants: Pointer);
137+ { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
138+ { $I ..\Include\Simd\Adler32\Adler32BlocksSsse3.inc}
139+ end ;
140+
141+ procedure Adler32_ProcessBlocks_Avx2 (AData: PByte; ANumBlocks: UInt32;
142+ ASums, AConstants: Pointer);
143+ { $I ..\Include\Simd\Common\SimdProc4Begin.inc}
144+ { $I ..\Include\Simd\Adler32\Adler32BlocksAvx2.inc}
136145end ;
137146
138147procedure Adler32_Update_Ssse3 (AData: PByte; ALength: UInt32; ASums: Pointer);
@@ -147,13 +156,30 @@ procedure Adler32_Update_Avx2(AData: PByte; ALength: UInt32; ASums: Pointer);
147156
148157{ $ENDIF HASHLIB_X86_64_ASM}
149158
159+ { $IFDEF HASHLIB_X86_SIMD}
160+
161+ procedure Adler32_Update_Sse2 (AData: PByte; ALength: UInt32; ASums: Pointer);
162+ begin
163+ Adler32_Update_Simd(AData, ALength, ASums, @Adler32_ProcessBlocks_Sse2);
164+ end ;
165+
166+ { $ENDIF HASHLIB_X86_SIMD}
167+
150168// =============================================================================
151169// Dispatch initialization
152170// =============================================================================
153171
154172procedure InitDispatch ();
155173begin
156174 Adler32_Update := @Adler32_Update_Scalar;
175+ { $IFDEF HASHLIB_I386_ASM}
176+ case TSimd.GetActiveLevel() of
177+ TSimdLevel.SSE2, TSimdLevel.SSSE3:
178+ begin
179+ Adler32_Update := @Adler32_Update_Sse2;
180+ end ;
181+ end ;
182+ { $ENDIF}
157183{ $IFDEF HASHLIB_X86_64_ASM}
158184 case TSimd.GetActiveLevel() of
159185 TSimdLevel.AVX2:
0 commit comments