Skip to content

Commit 3c3cde9

Browse files
authored
rework crc core: unify fold context, rename fold paths (#86)
- unify TCRCFoldRuntimeCtx32/64 into one TCRCFoldRuntimeCtx (untyped TableRow, same +96 asm layout); collapse the two init builders into one overload - rename fold fns/globals to ISA-neutral names (Lsb->Reflected, Msb->Forward, CRC_Fold_UsesPclmul->CRC_Fold_UsesCarrylessMul) and the 10 CRCFold*.inc files - factor scalar reflected slice into CRC_FoldReflected_OneSlice - rename HlpGF2 -> HlpCRCFoldConstants; merge HlpCRC16/32/64 into HlpCRCStandard (HlpCRC32Fast kept separate) - fix stale .inc header refs (e.g. TConverters.le2me_32) public API (THashFactory.TChecksum.TCRC, TCRCStandard, ICRC) unchanged
1 parent bcab5df commit 3c3cde9

27 files changed

Lines changed: 649 additions & 699 deletions

HashLib.Benchmark/Delphi/HashLib.BenchmarkConsole.dpr

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@ uses
2323
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
2424
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
2525
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
26-
HlpGF2 in '..\..\HashLib\src\Checksum\HlpGF2.pas',
27-
HlpCRC16 in '..\..\HashLib\src\Checksum\HlpCRC16.pas',
28-
HlpCRC32 in '..\..\HashLib\src\Checksum\HlpCRC32.pas',
26+
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
27+
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
2928
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
30-
HlpCRC64 in '..\..\HashLib\src\Checksum\HlpCRC64.pas',
3129
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
3230
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
3331
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',

HashLib.Benchmark/Delphi/HashLib.BenchmarkFMX.dpr

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ uses
2222
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
2323
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
2424
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
25-
HlpGF2 in '..\..\HashLib\src\Checksum\HlpGF2.pas',
26-
HlpCRC16 in '..\..\HashLib\src\Checksum\HlpCRC16.pas',
27-
HlpCRC32 in '..\..\HashLib\src\Checksum\HlpCRC32.pas',
25+
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
26+
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
2827
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
29-
HlpCRC64 in '..\..\HashLib\src\Checksum\HlpCRC64.pas',
3028
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
3129
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
3230
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',

HashLib.Tests/Delphi.Tests/HashLib.Tests.Mobile.dpr

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ uses
2424
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
2525
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
2626
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
27-
HlpGF2 in '..\..\HashLib\src\Checksum\HlpGF2.pas',
28-
HlpCRC16 in '..\..\HashLib\src\Checksum\HlpCRC16.pas',
29-
HlpCRC32 in '..\..\HashLib\src\Checksum\HlpCRC32.pas',
27+
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
28+
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
3029
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
31-
HlpCRC64 in '..\..\HashLib\src\Checksum\HlpCRC64.pas',
3230
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
3331
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
3432
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',

HashLib.Tests/Delphi.Tests/HashLib.Tests.Mobile.dproj

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,9 @@
364364
<DCCReference Include="..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas"/>
365365
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRC.pas"/>
366366
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRCDispatch.pas"/>
367-
<DCCReference Include="..\..\HashLib\src\Checksum\HlpGF2.pas"/>
368-
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRC16.pas"/>
369-
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRC32.pas"/>
367+
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas"/>
368+
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRCStandard.pas"/>
370369
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRC32Fast.pas"/>
371-
<DCCReference Include="..\..\HashLib\src\Checksum\HlpCRC64.pas"/>
372370
<DCCReference Include="..\..\HashLib\src\Crypto\HlpGost.pas"/>
373371
<DCCReference Include="..\..\HashLib\src\Crypto\HlpGrindahl256.pas"/>
374372
<DCCReference Include="..\..\HashLib\src\Crypto\HlpGrindahl512.pas"/>

HashLib.Tests/Delphi.Tests/HashLib.Tests.dpr

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ uses
4141
HlpAdler32Dispatch in '..\..\HashLib\src\Checksum\HlpAdler32Dispatch.pas',
4242
HlpCRC in '..\..\HashLib\src\Checksum\HlpCRC.pas',
4343
HlpCRCDispatch in '..\..\HashLib\src\Checksum\HlpCRCDispatch.pas',
44-
HlpGF2 in '..\..\HashLib\src\Checksum\HlpGF2.pas',
45-
HlpCRC16 in '..\..\HashLib\src\Checksum\HlpCRC16.pas',
46-
HlpCRC32 in '..\..\HashLib\src\Checksum\HlpCRC32.pas',
44+
HlpCRCFoldConstants in '..\..\HashLib\src\Checksum\HlpCRCFoldConstants.pas',
45+
HlpCRCStandard in '..\..\HashLib\src\Checksum\HlpCRCStandard.pas',
4746
HlpCRC32Fast in '..\..\HashLib\src\Checksum\HlpCRC32Fast.pas',
48-
HlpCRC64 in '..\..\HashLib\src\Checksum\HlpCRC64.pas',
4947
HlpGost in '..\..\HashLib\src\Crypto\HlpGost.pas',
5048
HlpGrindahl256 in '..\..\HashLib\src\Crypto\HlpGrindahl256.pas',
5149
HlpGrindahl512 in '..\..\HashLib\src\Crypto\HlpGrindahl512.pas',

HashLib/src/Base/HlpHashFactory.pas

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@ interface
1616
HlpAdler32,
1717
// CRC Units //
1818
HlpCRC,
19-
HlpCRC16,
20-
HlpCRC32,
19+
HlpCRCStandard,
2120
HlpCRC32Fast,
22-
HlpCRC64,
2321
// Hash32 Units //
2422
HlpAP,
2523
HlpBernstein,

HashLib/src/Checksum/HlpCRC.pas

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ TCRC = class sealed(THash, IChecksum, ICRC, ITransformBlock)
577577
type
578578
TCRCCacheValue = record
579579
Table: THashLibMatrixUInt64Array;
580-
FoldRuntime: TCRCFoldRuntimeCtx64;
580+
FoldRuntime: TCRCFoldRuntimeCtx;
581581
end;
582582

583583
class var
@@ -1393,7 +1393,7 @@ class function TCRC.GetOrCreateCacheEntry(APoly: UInt64; AWidth: Int32;
13931393
if not FCache.TryGetValue(LKey, Result) then
13941394
begin
13951395
Result.Table := GenerateCRCTable(APoly, AWidth, AReflected);
1396-
CRCDispatch_InitRuntimeCtx64(Result.Table, APoly, AWidth, AReflected,
1396+
CRCDispatch_InitRuntimeCtx(Result.Table, APoly, AWidth, AReflected,
13971397
Result.FoldRuntime);
13981398
FCache.Add(LKey, Result);
13991399
end;
@@ -1446,13 +1446,13 @@ procedure TCRC.TransformBytes(const AData: THashLibByteArray;
14461446
begin
14471447
if IsInputReflected then
14481448
begin
1449-
LFoldFunc := CRC_Fold_Lsb;
1449+
LFoldFunc := CRC_Fold_Reflected;
14501450
LState[0] := FHash;
14511451
end
14521452
else
14531453
begin
1454-
LFoldFunc := CRC_Fold_Msb;
1455-
if CRC_Fold_UsesPclmul then
1454+
LFoldFunc := CRC_Fold_Forward;
1455+
if CRC_Fold_UsesCarrylessMul then
14561456
begin
14571457
if Width < 64 then
14581458
LState[0] := FHash shl (64 - Width)

HashLib/src/Checksum/HlpCRC16.pas

Lines changed: 0 additions & 90 deletions
This file was deleted.

HashLib/src/Checksum/HlpCRC32.pas

Lines changed: 0 additions & 119 deletions
This file was deleted.

HashLib/src/Checksum/HlpCRC32Fast.pas

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ TCRC32_PKZIP = class sealed(TCRC32Fast)
4141

4242
class var
4343
FCrc32PkzipTable: THashLibMatrixUInt32Array;
44-
FCrc32PkzipFoldRuntime: TCRCFoldRuntimeCtx32;
44+
FCrc32PkzipFoldRuntime: TCRCFoldRuntimeCtx;
4545

4646
class constructor Crc32Pkzip();
4747

@@ -63,7 +63,7 @@ TCRC32_CASTAGNOLI = class sealed(TCRC32Fast)
6363

6464
class var
6565
FCrc32CastagnoliTable: THashLibMatrixUInt32Array;
66-
FCrc32CastagnoliFoldRuntime: TCRCFoldRuntimeCtx32;
66+
FCrc32CastagnoliFoldRuntime: TCRCFoldRuntimeCtx;
6767

6868
class constructor Crc32Castagnoli();
6969

@@ -78,10 +78,10 @@ TCRC32_CASTAGNOLI = class sealed(TCRC32Fast)
7878
implementation
7979

8080
procedure CRC32FastInitFoldTables(const AReflectedPoly, AMsbPoly: UInt32;
81-
var ATable: THashLibMatrixUInt32Array; var ACtx: TCRCFoldRuntimeCtx32);
81+
var ATable: THashLibMatrixUInt32Array; var ACtx: TCRCFoldRuntimeCtx);
8282
begin
8383
ATable := CRCDispatch_BuildSlicingTable32Reflect(AReflectedPoly);
84-
CRCDispatch_InitRuntimeCtx32(ATable, AMsbPoly, ACtx);
84+
CRCDispatch_InitRuntimeCtx(ATable, AMsbPoly, ACtx);
8585
end;
8686

8787
{ TCRC32Fast }

0 commit comments

Comments
 (0)