Skip to content

Commit f4e7102

Browse files
authored
introduce HASHLIB_X86_64_ASM define for inline assembly support (#55)
Separate architecture detection (HASHLIB_X86_64) from inline assembly availability (HASHLIB_X86_64_ASM). Delphi compiler only supports inline ASM on Windows, so HASHLIB_X86_64_ASM is gated behind CPUX64 + MSWINDOWS for Delphi, while FPC sets it unconditionally on CPUX64 since it supports ASM on all platforms. All SIMD code and dispatch logic now uses the new define, fixing Delphi Linux x86-64 compilation (E1025 Unsupported language feature: 'ASM').
1 parent 753d37a commit f4e7102

15 files changed

Lines changed: 55 additions & 51 deletions

HashLib/src/Checksum/HlpAdler32Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ procedure Adler32_Update_Scalar(AData: PByte; ALength: UInt32; ASums: Pointer);
6767
// SIMD implementations (x86-64 only)
6868
// =============================================================================
6969

70-
{$IFDEF HASHLIB_X86_64}
70+
{$IFDEF HASHLIB_X86_64_ASM}
7171

7272
type
7373
TProcessBlocksProc = procedure(AData: PByte; ANumBlocks: UInt32;
@@ -145,7 +145,7 @@ procedure Adler32_Update_Avx2(AData: PByte; ALength: UInt32; ASums: Pointer);
145145
Adler32_Update_Simd(AData, ALength, ASums, @Adler32_ProcessBlocks_Avx2);
146146
end;
147147

148-
{$ENDIF HASHLIB_X86_64}
148+
{$ENDIF HASHLIB_X86_64_ASM}
149149

150150
// =============================================================================
151151
// Dispatch initialization
@@ -154,7 +154,7 @@ procedure Adler32_Update_Avx2(AData: PByte; ALength: UInt32; ASums: Pointer);
154154
procedure InitDispatch();
155155
begin
156156
Adler32_Update := @Adler32_Update_Scalar;
157-
{$IFDEF HASHLIB_X86_64}
157+
{$IFDEF HASHLIB_X86_64_ASM}
158158
case TSimd.GetActiveLevel() of
159159
TSimdLevel.AVX2:
160160
begin

HashLib/src/Checksum/HlpCRCDispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ implementation
2424
uses
2525
HlpSimd;
2626

27-
{$IFDEF HASHLIB_X86_64}
27+
{$IFDEF HASHLIB_X86_64_ASM}
2828

2929
function CRC_Fold_Pclmul(AData: PByte; ALength: UInt32;
3030
AState: Pointer; AConstants: Pointer): UInt64;
@@ -50,13 +50,13 @@ function CRC_Fold_Vpclmul_Msb(AData: PByte; ALength: UInt32;
5050
{$I ..\Include\Simd\CRC\CRCFoldVpclmulMsb.inc}
5151
end;
5252

53-
{$ENDIF HASHLIB_X86_64}
53+
{$ENDIF HASHLIB_X86_64_ASM}
5454

5555
procedure InitDispatch();
5656
begin
5757
CRC_Fold_Lsb := nil;
5858
CRC_Fold_Msb := nil;
59-
{$IFDEF HASHLIB_X86_64}
59+
{$IFDEF HASHLIB_X86_64_ASM}
6060
if TSimd.HasVPCLMULQDQ() then
6161
begin
6262
CRC_Fold_Lsb := @CRC_Fold_Vpclmul;

HashLib/src/Crypto/HlpBlake2BDispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ procedure Blake2B_Compress_Scalar(AState, AMsg, ACounterFlags, AIV: Pointer);
9999
// SSE2 and AVX2 implementations (x86-64 only)
100100
// =============================================================================
101101

102-
{$IFDEF HASHLIB_X86_64}
102+
{$IFDEF HASHLIB_X86_64_ASM}
103103

104104
procedure Blake2B_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer);
105105
{$I ..\Include\Simd\Common\SimdProc4Begin.inc}
@@ -111,7 +111,7 @@ procedure Blake2B_Compress_Avx2(AState, AMsg, ACounterFlags, AIV: Pointer);
111111
{$I ..\Include\Simd\Blake2B\Blake2BCompressAvx2.inc}
112112
end;
113113

114-
{$ENDIF HASHLIB_X86_64}
114+
{$ENDIF HASHLIB_X86_64_ASM}
115115

116116
// =============================================================================
117117
// Dispatch initialization
@@ -120,7 +120,7 @@ procedure Blake2B_Compress_Avx2(AState, AMsg, ACounterFlags, AIV: Pointer);
120120
procedure InitDispatch();
121121
begin
122122
Blake2B_Compress := @Blake2B_Compress_Scalar;
123-
{$IFDEF HASHLIB_X86_64}
123+
{$IFDEF HASHLIB_X86_64_ASM}
124124
case TSimd.GetActiveLevel() of
125125
TSimdLevel.AVX2:
126126
begin

HashLib/src/Crypto/HlpBlake2SDispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ procedure Blake2S_Compress_Scalar(AState, AMsg, ACounterFlags, AIV: Pointer);
9797
// SSE2 and AVX2 implementations (x86-64 only)
9898
// =============================================================================
9999

100-
{$IFDEF HASHLIB_X86_64}
100+
{$IFDEF HASHLIB_X86_64_ASM}
101101

102102
procedure Blake2S_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer);
103103
{$I ..\Include\Simd\Common\SimdProc4Begin.inc}
@@ -109,7 +109,7 @@ procedure Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV: Pointer);
109109
{$I ..\Include\Simd\Blake2S\Blake2SCompressAvx2.inc}
110110
end;
111111

112-
{$ENDIF HASHLIB_X86_64}
112+
{$ENDIF HASHLIB_X86_64_ASM}
113113

114114
// =============================================================================
115115
// Dispatch initialization
@@ -118,7 +118,7 @@ procedure Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV: Pointer);
118118
procedure InitDispatch();
119119
begin
120120
Blake2S_Compress := @Blake2S_Compress_Scalar;
121-
{$IFDEF HASHLIB_X86_64}
121+
{$IFDEF HASHLIB_X86_64_ASM}
122122
case TSimd.GetActiveLevel() of
123123
TSimdLevel.AVX2:
124124
begin

HashLib/src/Crypto/HlpBlake3Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -613,7 +613,7 @@ procedure Blake3_HashMany_Scalar(AInput, AKey, AOut: Pointer;
613613
// SSE2 and AVX2 implementations (x86-64 only)
614614
// =============================================================================
615615

616-
{$IFDEF HASHLIB_X86_64}
616+
{$IFDEF HASHLIB_X86_64_ASM}
617617

618618
procedure Blake3_Compress_Sse2(AState, AMsg, ACV, ACounterFlags: Pointer);
619619
{$I ..\Include\Simd\Common\SimdProc4Begin.inc}
@@ -679,7 +679,7 @@ procedure Blake3_HashMany_Avx2(AInput, AKey, AOut: Pointer;
679679
Blake3_HashMany_Sse2(LPInput, AKey, LPOut, ANumChunks, ACounter, AFlags);
680680
end;
681681

682-
{$ENDIF HASHLIB_X86_64}
682+
{$ENDIF HASHLIB_X86_64_ASM}
683683

684684
// =============================================================================
685685
// Dispatch initialization
@@ -690,7 +690,7 @@ procedure InitDispatch();
690690
Blake3_Compress := @Blake3_Compress_Scalar;
691691
Blake3_HashMany := @Blake3_HashMany_Scalar;
692692
Blake3_ParallelDegree := 1;
693-
{$IFDEF HASHLIB_X86_64}
693+
{$IFDEF HASHLIB_X86_64_ASM}
694694
case TSimd.GetActiveLevel() of
695695
TSimdLevel.AVX2:
696696
begin

HashLib/src/Crypto/HlpSHA1Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ procedure SHA1_Compress_Scalar(AState, AData: Pointer; ANumBlocks: UInt32);
105105
// SIMD implementations (x86-64 only)
106106
// =============================================================================
107107

108-
{$IFDEF HASHLIB_X86_64}
108+
{$IFDEF HASHLIB_X86_64_ASM}
109109

110110
procedure SHA1_Compress_ShaNi(AState, AData: Pointer; ANumBlocks: UInt32;
111111
AConstants: Pointer);
@@ -145,7 +145,7 @@ procedure SHA1_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
145145
SHA1_Compress_Avx2(AState, AData, ANumBlocks, @K_SHA1);
146146
end;
147147

148-
{$ENDIF HASHLIB_X86_64}
148+
{$ENDIF HASHLIB_X86_64_ASM}
149149

150150
// =============================================================================
151151
// Dispatch initialization
@@ -154,7 +154,7 @@ procedure SHA1_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
154154
procedure InitDispatch();
155155
begin
156156
SHA1_Compress := @SHA1_Compress_Scalar;
157-
{$IFDEF HASHLIB_X86_64}
157+
{$IFDEF HASHLIB_X86_64_ASM}
158158
if TSimd.HasSHANI() then
159159
begin
160160
SHA1_Compress := @SHA1_Compress_ShaNi_Wrap;

HashLib/src/Crypto/HlpSHA2_256Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ procedure SHA256_Compress_Scalar(AState, AData: Pointer; ANumBlocks: UInt32);
100100
// SIMD implementations (x86-64 only)
101101
// =============================================================================
102102

103-
{$IFDEF HASHLIB_X86_64}
103+
{$IFDEF HASHLIB_X86_64_ASM}
104104

105105
procedure SHA256_Compress_ShaNi(AState, AData: Pointer; ANumBlocks: UInt32;
106106
AConstants: Pointer);
@@ -146,7 +146,7 @@ procedure SHA256_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
146146
SHA256_Compress_Avx2(AState, AData, ANumBlocks, @K256);
147147
end;
148148

149-
{$ENDIF HASHLIB_X86_64}
149+
{$ENDIF HASHLIB_X86_64_ASM}
150150

151151
// =============================================================================
152152
// Dispatch initialization
@@ -155,7 +155,7 @@ procedure SHA256_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
155155
procedure InitDispatch();
156156
begin
157157
SHA256_Compress := @SHA256_Compress_Scalar;
158-
{$IFDEF HASHLIB_X86_64}
158+
{$IFDEF HASHLIB_X86_64_ASM}
159159
if TSimd.HasSHANI() then
160160
begin
161161
SHA256_Compress := @SHA256_Compress_ShaNi_Wrap;

HashLib/src/Crypto/HlpSHA2_512Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ procedure SHA512_Compress_Scalar(AState, AData: Pointer; ANumBlocks: UInt32);
124124
// SIMD implementations (x86-64 only)
125125
// =============================================================================
126126

127-
{$IFDEF HASHLIB_X86_64}
127+
{$IFDEF HASHLIB_X86_64_ASM}
128128

129129
procedure SHA512_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32;
130130
AConstants: Pointer);
@@ -159,7 +159,7 @@ procedure SHA512_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
159159
SHA512_Compress_Avx2(AState, AData, ANumBlocks, @K512);
160160
end;
161161

162-
{$ENDIF HASHLIB_X86_64}
162+
{$ENDIF HASHLIB_X86_64_ASM}
163163

164164
// =============================================================================
165165
// Dispatch initialization
@@ -168,7 +168,7 @@ procedure SHA512_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32);
168168
procedure InitDispatch();
169169
begin
170170
SHA512_Compress := @SHA512_Compress_Scalar;
171-
{$IFDEF HASHLIB_X86_64}
171+
{$IFDEF HASHLIB_X86_64_ASM}
172172
case TSimd.GetActiveLevel() of
173173
TSimdLevel.AVX2:
174174
begin

HashLib/src/Crypto/HlpSHA3Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ procedure KeccakF1600_Absorb_Scalar(AState: Pointer; AData: PByte;
409409
// SIMD implementations (x86-64 only)
410410
// =============================================================================
411411

412-
{$IFDEF HASHLIB_X86_64}
412+
{$IFDEF HASHLIB_X86_64_ASM}
413413

414414
const
415415
K_KECCAK: packed record
@@ -485,7 +485,7 @@ procedure KeccakF1600_Avx2_Absorb_Wrap(AState: Pointer; AData: PByte;
485485
KeccakF1600_Avx2_Absorb(AState, AData, ABlockCount, ABlockSize, @K_KECCAK);
486486
end;
487487

488-
{$ENDIF HASHLIB_X86_64}
488+
{$ENDIF HASHLIB_X86_64_ASM}
489489

490490
// =============================================================================
491491
// Dispatch initialization
@@ -495,7 +495,7 @@ procedure InitDispatch();
495495
begin
496496
KeccakF1600_Permute := @KeccakF1600_Scalar;
497497
KeccakF1600_Absorb := @KeccakF1600_Absorb_Scalar;
498-
{$IFDEF HASHLIB_X86_64}
498+
{$IFDEF HASHLIB_X86_64_ASM}
499499
case TSimd.GetActiveLevel() of
500500
TSimdLevel.AVX2:
501501
begin

HashLib/src/Hash64/HlpXXHash3Dispatch.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ procedure XXH3_Accumulate_Scalar(AAcc: Pointer; AInput: Pointer;
106106
// SSE2 and AVX2 implementations (x86-64 only)
107107
// =============================================================================
108108

109-
{$IFDEF HASHLIB_X86_64}
109+
{$IFDEF HASHLIB_X86_64_ASM}
110110

111111
// ----- SSE2 -----
112112

@@ -166,7 +166,7 @@ procedure XXH3_Accumulate_Avx2(AAcc: Pointer; AInput: Pointer;
166166
PByte(ASecret) + N * XXH_SECRET_CONSUME_RATE);
167167
end;
168168

169-
{$ENDIF HASHLIB_X86_64}
169+
{$ENDIF HASHLIB_X86_64_ASM}
170170

171171
// =============================================================================
172172
// Dispatch initialization
@@ -178,7 +178,7 @@ procedure InitDispatch();
178178
XXH3_Accumulate := @XXH3_Accumulate_Scalar;
179179
XXH3_ScrambleAcc := @XXH3_ScrambleAcc_Scalar;
180180
XXH3_InitSecret := @XXH3_InitSecret_Scalar;
181-
{$IFDEF HASHLIB_X86_64}
181+
{$IFDEF HASHLIB_X86_64_ASM}
182182
case TSimd.GetActiveLevel() of
183183
TSimdLevel.AVX2:
184184
begin

0 commit comments

Comments
 (0)