Vectorise BitArray (dotnet/corefx#41896)
authorGanbarukamo41 <ganbarukamo@gmail.com>
Thu, 7 Nov 2019 05:58:11 +0000 (14:58 +0900)
committerAdam Sitnik <adam.sitnik@gmail.com>
Thu, 7 Nov 2019 05:58:11 +0000 (21:58 -0800)
commit5fdc262c0f657e6e27935fd7179d78c73e12be2a
tree9c1a654cc1d3d209c60f3b2c207d434732f6c227
parenta3b4c5fcb8bd04d17d7ccd6a2914c6a35c49a52a
Vectorise BitArray (dotnet/corefx#41896)

* Speed up BitArray

1. Use AVX2, if available, for And/Or/Xor
2. Vectorize Not
3. Use Span<T>.Fill() for SetAll()
4. Add more test sizes to account for And/Or/Xor/Not loop unrolling cases

* Vectorise BitArray(bool[])

* Vectorise BitArray further

* Vectorise CopyTo(Array, int) when copying to a bool[]

* Use Vector128/256.Create and store it in static readonly field instead of loading from PE header

* Add some random test data for BitArray

Commit migrated from https://github.com/dotnet/corefx/commit/a4f04476ea74c61a52168cf0b31c0281822ecad3
src/libraries/System.Collections/src/System/Collections/BitArray.cs
src/libraries/System.Collections/tests/BitArray/BitArray_CtorTests.cs
src/libraries/System.Collections/tests/BitArray/BitArray_GetSetTests.cs
src/libraries/System.Collections/tests/BitArray/BitArray_OperatorsTests.cs