-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Open
Labels
arch-arm64area-System.Collectionstenet-performancePerformance related issuePerformance related issue
Milestone
Description
Evaluate if
runtime/src/libraries/System.Collections/src/System/Collections/BitArray.cs
Lines 190 to 216 in 8511b5b
| { | |
| // Same logic as SSE2 path, however we lack MoveMask (equivalent) instruction | |
| // As a workaround, mask out the relevant bit after comparison | |
| // and combine by ORing all of them together (In this case, adding all of them does the same thing) | |
| Vector128<byte> lowerVector = AdvSimd.LoadVector128((byte*)ptr + i); | |
| Vector128<byte> lowerIsFalse = AdvSimd.CompareEqual(lowerVector, zero); | |
| Vector128<byte> bitsExtracted1 = AdvSimd.And(lowerIsFalse, s_bitMask128); | |
| bitsExtracted1 = AdvSimd.Arm64.AddPairwise(bitsExtracted1, bitsExtracted1); | |
| bitsExtracted1 = AdvSimd.Arm64.AddPairwise(bitsExtracted1, bitsExtracted1); | |
| bitsExtracted1 = AdvSimd.Arm64.AddPairwise(bitsExtracted1, bitsExtracted1); | |
| Vector128<short> lowerPackedIsFalse = bitsExtracted1.AsInt16(); | |
| Vector128<byte> upperVector = AdvSimd.LoadVector128((byte*)ptr + i + Vector128<byte>.Count); | |
| Vector128<byte> upperIsFalse = AdvSimd.CompareEqual(upperVector, zero); | |
| Vector128<byte> bitsExtracted2 = AdvSimd.And(upperIsFalse, s_bitMask128); | |
| bitsExtracted2 = AdvSimd.Arm64.AddPairwise(bitsExtracted2, bitsExtracted2); | |
| bitsExtracted2 = AdvSimd.Arm64.AddPairwise(bitsExtracted2, bitsExtracted2); | |
| bitsExtracted2 = AdvSimd.Arm64.AddPairwise(bitsExtracted2, bitsExtracted2); | |
| Vector128<short> upperPackedIsFalse = bitsExtracted2.AsInt16(); | |
| int result = AdvSimd.Arm64.ZipLow(lowerPackedIsFalse, upperPackedIsFalse).AsInt32().ToScalar(); | |
| if (!BitConverter.IsLittleEndian) | |
| { | |
| result = BinaryPrimitives.ReverseEndianness(result); | |
| } | |
| m_array[i / 32u] = ~result; | |
| } |
AddPairwise with better mask, the way it is done in TryFindFirstMatchedLane.Metadata
Metadata
Assignees
Labels
arch-arm64area-System.Collectionstenet-performancePerformance related issuePerformance related issue