diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameHeaders.Generated.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameHeaders.Generated.cs index 5ca0e5fc12..63eb6db9ad 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/FrameHeaders.Generated.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/FrameHeaders.Generated.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; -using Microsoft.AspNet.Server.Kestrel.Extensions; using Microsoft.Extensions.Primitives; namespace Microsoft.AspNet.Server.Kestrel.Http @@ -587,10 +586,25 @@ namespace Microsoft.AspNet.Server.Kestrel.Http } } + private static int BitCount(long value) + { + // see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/src/System/Reflection/Internal/Utilities/BitArithmetic.cs + + const ulong Mask01010101 = 0x5555555555555555UL; + const ulong Mask00110011 = 0x3333333333333333UL; + const ulong Mask00001111 = 0x0F0F0F0F0F0F0F0FUL; + const ulong Mask00000001 = 0x0101010101010101UL; + + var v = (ulong)value; + + v = v - ((v >> 1) & Mask01010101); + v = (v & Mask00110011) + ((v >> 2) & Mask00110011); + return (int)(unchecked(((v + (v >> 4)) & Mask00001111) * Mask00000001) >> 56); + } protected override int GetCountFast() { - return _bits.BitCount() + (MaybeUnknown?.Count ?? 0); + return BitCount(_bits) + (MaybeUnknown?.Count ?? 0); } protected override StringValues GetValueFast(string key) @@ -5414,10 +5428,25 @@ namespace Microsoft.AspNet.Server.Kestrel.Http } } + private static int BitCount(long value) + { + // see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/src/System/Reflection/Internal/Utilities/BitArithmetic.cs + + const ulong Mask01010101 = 0x5555555555555555UL; + const ulong Mask00110011 = 0x3333333333333333UL; + const ulong Mask00001111 = 0x0F0F0F0F0F0F0F0FUL; + const ulong Mask00000001 = 0x0101010101010101UL; + + var v = (ulong)value; + + v = v - ((v >> 1) & Mask01010101); + v = (v & Mask00110011) + ((v >> 2) & Mask00110011); + return (int)(unchecked(((v + (v >> 4)) & Mask00001111) * Mask00000001) >> 56); + } protected override int GetCountFast() { - return _bits.BitCount() + (MaybeUnknown?.Count ?? 0); + return BitCount(_bits) + (MaybeUnknown?.Count ?? 0); } protected override StringValues GetValueFast(string key) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/LongExtensions.cs b/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/LongExtensions.cs deleted file mode 100644 index 3b79425172..0000000000 --- a/src/Microsoft.AspNet.Server.Kestrel/Infrastructure/LongExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Microsoft.AspNet.Server.Kestrel.Extensions -{ - public static class LongExtensions - { - public static int BitCount(this long value) - { - // see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/src/System/Reflection/Internal/Utilities/BitArithmetic.cs - - const ulong Mask01010101 = 0x5555555555555555UL; - const ulong Mask00110011 = 0x3333333333333333UL; - const ulong Mask00001111 = 0x0F0F0F0F0F0F0F0FUL; - const ulong Mask00000001 = 0x0101010101010101UL; - - var v = (ulong)value; - - v = v - ((v >> 1) & Mask01010101); - v = (v & Mask00110011) + ((v >> 2) & Mask00110011); - return (int)(unchecked(((v + (v >> 4)) & Mask00001111) * Mask00000001) >> 56); - } - } -} diff --git a/tools/Microsoft.AspNet.Server.Kestrel.GeneratedCode/KnownHeaders.cs b/tools/Microsoft.AspNet.Server.Kestrel.GeneratedCode/KnownHeaders.cs index 6dbad61a7c..ed50e3cc1f 100644 --- a/tools/Microsoft.AspNet.Server.Kestrel.GeneratedCode/KnownHeaders.cs +++ b/tools/Microsoft.AspNet.Server.Kestrel.GeneratedCode/KnownHeaders.cs @@ -167,7 +167,6 @@ namespace Microsoft.AspNet.Server.Kestrel.GeneratedCode return $@" using System; using System.Collections.Generic; -using Microsoft.AspNet.Server.Kestrel.Extensions; using Microsoft.Extensions.Primitives; namespace Microsoft.AspNet.Server.Kestrel.Http @@ -193,10 +192,25 @@ namespace Microsoft.AspNet.Server.Kestrel.Http }} }} ")} + private static int BitCount(long value) + {{ + // see https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/src/System/Reflection/Internal/Utilities/BitArithmetic.cs + + const ulong Mask01010101 = 0x5555555555555555UL; + const ulong Mask00110011 = 0x3333333333333333UL; + const ulong Mask00001111 = 0x0F0F0F0F0F0F0F0FUL; + const ulong Mask00000001 = 0x0101010101010101UL; + + var v = (ulong)value; + + v = v - ((v >> 1) & Mask01010101); + v = (v & Mask00110011) + ((v >> 2) & Mask00110011); + return (int)(unchecked(((v + (v >> 4)) & Mask00001111) * Mask00000001) >> 56); + }} protected override int GetCountFast() {{ - return _bits.BitCount() + (MaybeUnknown?.Count ?? 0); + return BitCount(_bits) + (MaybeUnknown?.Count ?? 0); }} protected override StringValues GetValueFast(string key)