Skip to content

Commit 594fb5f

Browse files
committed
Add AArch64 PMULL binary-polynomial multiply/square kernels
Port the GF(2)[x] BinPoly kernel family to ARMv8 PMULL. The fixed-size SMALL cases (1..10 limbs)
1 parent 89173df commit 594fb5f

12 files changed

Lines changed: 3808 additions & 5 deletions

File tree

CryptoLib.Benchmark/Delphi/CryptoLib.BenchmarkConsole.dpr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ uses
361361
ClpBinPolySimdMedium in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdMedium.pas',
362362
ClpBinPolySimdLarge in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdLarge.pas',
363363
ClpBinPolyX86Backend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyX86Backend.pas',
364+
ClpBinPolyArmBackend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyArmBackend.pas',
364365
ClpBinPolyMulBase in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolyMulBase.pas',
365366
ClpItohTsujiiInv in '..\..\CryptoLib\src\Math\BinPoly\ClpItohTsujiiInv.pas',
366367
ClpBinPolys in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolys.pas',

CryptoLib.Examples/Delphi.Examples/CryptoLib.Examples.dpr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ uses
375375
ClpBinPolySimdMedium in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdMedium.pas',
376376
ClpBinPolySimdLarge in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdLarge.pas',
377377
ClpBinPolyX86Backend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyX86Backend.pas',
378+
ClpBinPolyArmBackend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyArmBackend.pas',
378379
ClpBinPolyMulBase in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolyMulBase.pas',
379380
ClpItohTsujiiInv in '..\..\CryptoLib\src\Math\BinPoly\ClpItohTsujiiInv.pas',
380381
ClpBinPolys in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolys.pas',

CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.Mobile.dpr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ uses
356356
ClpBinPolySimdMedium in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdMedium.pas',
357357
ClpBinPolySimdLarge in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdLarge.pas',
358358
ClpBinPolyX86Backend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyX86Backend.pas',
359+
ClpBinPolyArmBackend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyArmBackend.pas',
359360
ClpBinPolyMulBase in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolyMulBase.pas',
360361
ClpItohTsujiiInv in '..\..\CryptoLib\src\Math\BinPoly\ClpItohTsujiiInv.pas',
361362
ClpBinPolys in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolys.pas',

CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.Mobile.dproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@
699699
<DCCReference Include="..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdMedium.pas"/>
700700
<DCCReference Include="..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdLarge.pas"/>
701701
<DCCReference Include="..\..\CryptoLib\src\Simd\Backend\ClpBinPolyX86Backend.pas"/>
702+
<DCCReference Include="..\..\CryptoLib\src\Simd\Backend\ClpBinPolyArmBackend.pas"/>
702703
<DCCReference Include="..\..\CryptoLib\src\Math\BinPoly\ClpBinPolyMulBase.pas"/>
703704
<DCCReference Include="..\..\CryptoLib\src\Math\BinPoly\ClpItohTsujiiInv.pas"/>
704705
<DCCReference Include="..\..\CryptoLib\src\Math\BinPoly\ClpBinPolys.pas"/>

CryptoLib.Tests/Delphi.Tests/CryptoLib.Tests.dpr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,7 @@ uses
375375
ClpBinPolySimdMedium in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdMedium.pas',
376376
ClpBinPolySimdLarge in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolySimdLarge.pas',
377377
ClpBinPolyX86Backend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyX86Backend.pas',
378+
ClpBinPolyArmBackend in '..\..\CryptoLib\src\Simd\Backend\ClpBinPolyArmBackend.pas',
378379
ClpBinPolyMulBase in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolyMulBase.pas',
379380
ClpItohTsujiiInv in '..\..\CryptoLib\src\Math\BinPoly\ClpItohTsujiiInv.pas',
380381
ClpBinPolys in '..\..\CryptoLib\src\Math\BinPoly\ClpBinPolys.pas',

CryptoLib.Tests/src/Math/BinPoly/BinPolyTests.pas

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ interface
4040
ClpBinPolyX86Backend,
4141
ClpBinPolySimd,
4242
{$ENDIF CRYPTOLIB_X86_SIMD}
43+
{$IFDEF CRYPTOLIB_AARCH64_ASM}
44+
ClpBinPolyArmBackend,
45+
ClpBinPolySimd,
46+
{$ENDIF CRYPTOLIB_AARCH64_ASM}
4347
ClpBinPolyMulBaseBinomialReduce,
4448
CryptoLibTestBase;
4549

@@ -191,6 +195,20 @@ TTestBinPolyX86 = class(TBinPolyBackendTestBase)
191195
end;
192196
{$ENDIF CRYPTOLIB_X86_SIMD}
193197

198+
{$IFDEF CRYPTOLIB_AARCH64_ASM}
199+
/// <summary>
200+
/// ARM (PMULL) instantiation of the BinPoly backend suite. Registered
201+
/// only when CRYPTOLIB_AARCH64_ASM is defined.
202+
/// </summary>
203+
TTestBinPolyArm = class(TBinPolyBackendTestBase)
204+
strict protected
205+
function BackendSupported: Boolean; override;
206+
function CreateBackendMul(AN: Int32; const AReduce: IBinPolyReduce)
207+
: IBinPolyMul; override;
208+
function BackendLabel: String; override;
209+
end;
210+
{$ENDIF CRYPTOLIB_AARCH64_ASM}
211+
194212
implementation
195213

196214
const
@@ -1783,6 +1801,29 @@ function TTestBinPolyX86.BackendLabel: String;
17831801

17841802
{$ENDIF CRYPTOLIB_X86_SIMD}
17851803

1804+
{$IFDEF CRYPTOLIB_AARCH64_ASM}
1805+
1806+
{ TTestBinPolyArm }
1807+
1808+
function TTestBinPolyArm.BackendSupported: Boolean;
1809+
begin
1810+
Result := TBinPolyArmBackend.IsSupported;
1811+
end;
1812+
1813+
function TTestBinPolyArm.CreateBackendMul(AN: Int32;
1814+
const AReduce: IBinPolyReduce): IBinPolyMul;
1815+
begin
1816+
if not TBinPolySimd.TryCreateBinPolyMul(AN, AReduce, Result) then
1817+
Result := nil;
1818+
end;
1819+
1820+
function TTestBinPolyArm.BackendLabel: String;
1821+
begin
1822+
Result := 'ARM';
1823+
end;
1824+
1825+
{$ENDIF CRYPTOLIB_AARCH64_ASM}
1826+
17861827
initialization
17871828

17881829
{$IFDEF FPC}
@@ -1799,4 +1840,12 @@ initialization
17991840
{$ENDIF FPC}
18001841
{$ENDIF CRYPTOLIB_X86_SIMD}
18011842

1843+
{$IFDEF CRYPTOLIB_AARCH64_ASM}
1844+
{$IFDEF FPC}
1845+
RegisterTest(TTestBinPolyArm);
1846+
{$ELSE}
1847+
RegisterTest(TTestBinPolyArm.Suite);
1848+
{$ENDIF FPC}
1849+
{$ENDIF CRYPTOLIB_AARCH64_ASM}
1850+
18021851
end.

0 commit comments

Comments
 (0)