Skip to content

Commit eae2a2b

Browse files
committed
Added .NET 7, improved decompression performance
1 parent d1bcfea commit eae2a2b

File tree

10 files changed

+29
-37
lines changed

10 files changed

+29
-37
lines changed

src/Sandbox/Sandbox.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net461</TargetFrameworks>
5+
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0;net461</TargetFrameworks>
66
<LangVersion>9.0</LangVersion>
77
<TieredCompilation>false</TieredCompilation>
88
</PropertyGroup>

src/ZstdSharp.Benchmark/ZstdSharp.Benchmark.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net461</TargetFrameworks>
5+
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net461;net7.0</TargetFrameworks>
66
<LangVersion>9.0</LangVersion>
77
</PropertyGroup>
88

@@ -15,8 +15,8 @@
1515
</PropertyGroup>
1616

1717
<ItemGroup>
18-
<PackageReference Include="BenchmarkDotNet" Version="0.13.1" />
19-
<PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.13.1" />
18+
<PackageReference Include="BenchmarkDotNet" Version="0.13.2" />
19+
<PackageReference Include="BenchmarkDotNet.Diagnostics.Windows" Version="0.13.2" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

src/ZstdSharp.Test/ZstdSharp.Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net461</TargetFrameworks>
4+
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0;net461</TargetFrameworks>
55
<IsPackable>false</IsPackable>
66
<LangVersion>9</LangVersion>
77
</PropertyGroup>

src/ZstdSharp/Unsafe/Bitstream.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ private static BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD)
343343
* @return : 1 if DStream has _exactly_ reached its end (all bits consumed).
344344
*/
345345
[MethodImpl(MethodImplOptions.AggressiveInlining)]
346+
[InlineMethod.Inline]
346347
private static uint BIT_endOfDStream(BIT_DStream_t* DStream)
347348
{
348349
return DStream->ptr == DStream->start && DStream->bitsConsumed == (uint)(sizeof(nuint) * 8) ? 1U : 0U;

src/ZstdSharp/Unsafe/Fse.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ private static void FSE_updateState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD
113113
}
114114

115115
[MethodImpl(MethodImplOptions.AggressiveInlining)]
116+
[InlineMethod.Inline]
116117
private static byte FSE_decodeSymbol(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD)
117118
{
118119
FSE_decode_t DInfo = ((FSE_decode_t*)DStatePtr->table)[DStatePtr->state];

src/ZstdSharp/Unsafe/HufDecompress.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ public static nuint HUF_readDTableX1_wksp_bmi2(uint* DTable, void* src, nuint sr
209209
}
210210

211211
[MethodImpl(MethodImplOptions.AggressiveInlining)]
212+
[InlineMethod.Inline]
212213
private static byte HUF_decodeSymbolX1(BIT_DStream_t* Dstream, HUF_DEltX1* dt, uint dtLog)
213214
{
214215
/* note : dtLog >= 1 */

src/ZstdSharp/Unsafe/Mem.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,17 @@ public static unsafe partial class Methods
1818
* but unfortunately reduces inlining in .NET 5 or below
1919
*****************************************************************/
2020
/*=== Static platform detection ===*/
21-
public static bool MEM_32bits => sizeof(nint) == 4;
21+
public static bool MEM_32bits
22+
{
23+
[InlineMethod.Inline]
24+
get => sizeof(nint) == 4;
25+
}
2226

23-
public static bool MEM_64bits => sizeof(nint) == 8;
27+
public static bool MEM_64bits
28+
{
29+
[InlineMethod.Inline]
30+
get => sizeof(nint) == 8;
31+
}
2432

2533
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2634
/* default method, safe and standard.

src/ZstdSharp/Unsafe/Xxhash.cs

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,16 @@ private static void XXH_memcpy(void* dest, void* src, nuint size)
2323
memcpy(dest, src, (uint)size);
2424
}
2525

26-
/*
27-
* Portable and safe solution. Generally efficient.
28-
* see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
29-
*/
30-
private static uint XXH_read32(void* memPtr)
31-
{
32-
uint val;
33-
XXH_memcpy(&val, memPtr, sizeof(uint));
34-
return val;
35-
}
36-
3726
[InlineMethod.Inline]
3827
private static uint XXH_readLE32(void* ptr)
3928
{
40-
return BitConverter.IsLittleEndian ? XXH_read32(ptr) : BinaryPrimitives.ReverseEndianness(XXH_read32(ptr));
29+
return BitConverter.IsLittleEndian ? MEM_read32(ptr) : BinaryPrimitives.ReverseEndianness(MEM_read32(ptr));
4130
}
4231

32+
[InlineMethod.Inline]
4333
private static uint XXH_readBE32(void* ptr)
4434
{
45-
return BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(XXH_read32(ptr)) : XXH_read32(ptr);
35+
return BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(MEM_read32(ptr)) : MEM_read32(ptr);
4636
}
4737

4838
private static uint XXH_readLE32_align(void* ptr, XXH_alignment align)
@@ -307,26 +297,16 @@ public static uint ZSTD_XXH32_hashFromCanonical(XXH32_canonical_t* src)
307297
return XXH_readBE32(src);
308298
}
309299

310-
/*
311-
* Portable and safe solution. Generally efficient.
312-
* see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
313-
*/
314-
private static ulong XXH_read64(void* memPtr)
315-
{
316-
ulong val;
317-
XXH_memcpy(&val, memPtr, sizeof(ulong));
318-
return val;
319-
}
320-
321300
[InlineMethod.Inline]
322301
private static ulong XXH_readLE64(void* ptr)
323302
{
324-
return BitConverter.IsLittleEndian ? XXH_read64(ptr) : BinaryPrimitives.ReverseEndianness(XXH_read64(ptr));
303+
return BitConverter.IsLittleEndian ? MEM_read64(ptr) : BinaryPrimitives.ReverseEndianness(MEM_read64(ptr));
325304
}
326305

306+
[InlineMethod.Inline]
327307
private static ulong XXH_readBE64(void* ptr)
328308
{
329-
return BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(XXH_read64(ptr)) : XXH_read64(ptr);
309+
return BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(MEM_read64(ptr)) : MEM_read64(ptr);
330310
}
331311

332312
private static ulong XXH_readLE64_align(void* ptr, XXH_alignment align)

src/ZstdSharp/Unsafe/ZstdDecompressBlock.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,6 +1058,7 @@ private static void ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_D
10581058
}
10591059

10601060
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1061+
[InlineMethod.Inline]
10611062
private static seq_t ZSTD_decodeSequence(seqState_t* seqState, ZSTD_longOffset_e longOffsets)
10621063
{
10631064
seq_t seq;

src/ZstdSharp/ZstdSharp.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;netstandard2.1;netstandard2.0;net461</TargetFrameworks>
4+
<TargetFrameworks>netcoreapp3.1;net5.0;net6.0;net7.0;netstandard2.1;netstandard2.0;net461</TargetFrameworks>
55
<LangVersion>9.0</LangVersion>
66
<SignAssembly>true</SignAssembly>
77
<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
@@ -28,7 +28,7 @@
2828
</PropertyGroup>
2929

3030
<ItemGroup Condition="'$(TargetFramework)'=='netstandard2.0' Or '$(TargetFramework)'=='net461'">
31-
<PackageReference Include="System.Memory" Version="4.5.4" />
31+
<PackageReference Include="System.Memory" Version="4.5.5" />
3232
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />
3333
</ItemGroup>
3434

@@ -37,11 +37,11 @@
3737
</ItemGroup>
3838

3939
<ItemGroup>
40-
<PackageReference Include="Fody" Version="6.5.1">
40+
<PackageReference Include="Fody" Version="6.6.4">
4141
<PrivateAssets>all</PrivateAssets>
4242
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4343
</PackageReference>
44-
<PackageReference Include="InlineIL.Fody" Version="1.7.0" PrivateAssets="all" />
44+
<PackageReference Include="InlineIL.Fody" Version="1.7.3" PrivateAssets="all" />
4545
<PackageReference Include="InlineMethod.Fody" Version="0.6.2" PrivateAssets="all" />
4646
</ItemGroup>
4747

0 commit comments

Comments
 (0)