src\runtime\src\libraries\System.Private.CoreLib\src\System\SearchValues\IndexOfAnyAsciiSearcher.cs (49)
212Debug.Assert(searchSpaceLength >= Vector128<short>.Count);
239Debug.Assert(searchSpaceLength >= Vector128<short>.Count);
294if (searchSpaceLength < Vector128<ushort>.Count)
313if (Avx2.IsSupported && searchSpaceLength > 2 * Vector128<short>.Count)
370if (!Avx2.IsSupported && searchSpaceLength > 2 * Vector128<short>.Count)
379ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - (2 * Vector128<short>.Count));
384Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
392currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
399Debug.Assert(searchSpaceLength >= Vector128<short>.Count, "We expect that the input is long enough for us to load a whole vector.");
401ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<short>.Count);
428if (searchSpaceLength < Vector128<ushort>.Count)
445if (Avx2.IsSupported && searchSpaceLength > 2 * Vector128<short>.Count)
501if (!Avx2.IsSupported && searchSpaceLength > 2 * Vector128<short>.Count)
509ref short twoVectorsAfterStart = ref Unsafe.Add(ref searchSpace, 2 * Vector128<short>.Count);
513currentSearchSpace = ref Unsafe.Subtract(ref currentSearchSpace, 2 * Vector128<short>.Count);
516Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
529Debug.Assert(searchSpaceLength >= Vector128<short>.Count, "We expect that the input is long enough for us to load a whole vector.");
531ref short oneVectorAfterStart = ref Unsafe.Add(ref searchSpace, Vector128<short>.Count);
534? ref Unsafe.Subtract(ref currentSearchSpace, Vector128<short>.Count)
598if (Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
628Debug.Assert(searchSpaceLength >= Vector128<byte>.Count, "We expect that the input is long enough for us to load a Vector128.");
630ref byte halfVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<byte>.Count);
652if (!Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
658ref byte vectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<byte>.Count);
670currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<byte>.Count);
723if (Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
753Debug.Assert(searchSpaceLength >= Vector128<byte>.Count, "We expect that the input is long enough for us to load a Vector128.");
755ref byte halfVectorAfterStart = ref Unsafe.Add(ref searchSpace, Vector128<byte>.Count);
758? ref Unsafe.Subtract(ref currentSearchSpace, Vector128<byte>.Count)
777if (!Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
783ref byte vectorAfterStart = ref Unsafe.Add(ref searchSpace, Vector128<byte>.Count);
787currentSearchSpace = ref Unsafe.Subtract(ref currentSearchSpace, Vector128<byte>.Count);
869if (Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
900Debug.Assert(searchSpaceLength >= Vector128<byte>.Count, "We expect that the input is long enough for us to load a Vector128.");
902ref byte halfVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<byte>.Count);
926if (!Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
933ref byte vectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, searchSpaceLength - Vector128<byte>.Count);
945currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<byte>.Count);
997if (Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
1028Debug.Assert(searchSpaceLength >= Vector128<byte>.Count, "We expect that the input is long enough for us to load a Vector128.");
1030ref byte halfVectorAfterStart = ref Unsafe.Add(ref searchSpace, Vector128<byte>.Count);
1033? ref Unsafe.Subtract(ref currentSearchSpace, Vector128<byte>.Count)
1054if (!Avx2.IsSupported && searchSpaceLength > Vector128<byte>.Count)
1061ref byte vectorAfterStart = ref Unsafe.Add(ref searchSpace, Vector128<byte>.Count);
1065currentSearchSpace = ref Unsafe.Subtract(ref currentSearchSpace, Vector128<byte>.Count);
1266if (offsetInVector < Vector128<short>.Count)
1272return offsetInVector - Vector128<short>.Count + (int)((nuint)Unsafe.ByteOffset(ref searchSpace, ref secondVector) / (nuint)sizeof(T));
1517if (offsetInVector >= Vector128<short>.Count)
1521offsetInVector -= Vector128<short>.Count;
src\runtime\src\libraries\System.Private.CoreLib\src\System\SearchValues\Strings\SingleStringSearchValuesPackedThreeChars.cs (8)
185else if ((Sse2.IsSupported || AdvSimd.Arm64.IsSupported) && searchSpaceMinusValueTailLength - Vector128<byte>.Count >= 0)
191ref char lastSearchSpace = ref Unsafe.Add(ref searchSpace, searchSpaceMinusValueTailLength - Vector128<byte>.Count);
195ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<byte>.Count);
196ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<byte>.Count + (int)(_ch2ByteOffset / sizeof(char)));
197ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<byte>.Count + (int)(_ch3ByteOffset / sizeof(char)));
208searchSpace = ref Unsafe.Add(ref searchSpace, Vector128<byte>.Count);
212if (Unsafe.AreSame(ref searchSpace, ref Unsafe.Add(ref lastSearchSpace, Vector128<byte>.Count)))
396Vector128<ushort> input1 = Vector128.LoadUnsafe(ref Unsafe.AddByteOffset(ref searchSpace, byteOffset + (uint)Vector128<byte>.Count));
src\runtime\src\libraries\System.Private.CoreLib\src\System\SearchValues\Strings\SingleStringSearchValuesThreeChars.cs (7)
82if (!Vector128.IsHardwareAccelerated || searchSpaceMinusValueTailLength < Vector128<ushort>.Count)
191ref char lastSearchSpace = ref Unsafe.Add(ref searchSpace, searchSpaceMinusValueTailLength - Vector128<ushort>.Count);
195ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<ushort>.Count);
196ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<ushort>.Count + (int)(_ch2ByteOffset / sizeof(char)));
197ValidateReadPosition(ref searchSpaceStart, searchSpaceLength, ref searchSpace, Vector128<ushort>.Count + (int)(_ch3ByteOffset / sizeof(char)));
208searchSpace = ref Unsafe.Add(ref searchSpace, Vector128<ushort>.Count);
212if (Unsafe.AreSame(ref searchSpace, ref Unsafe.Add(ref lastSearchSpace, Vector128<ushort>.Count)))
src\runtime\src\libraries\System.Private.CoreLib\src\System\SpanHelpers.Packed.cs (32)
114if (length < Vector128<short>.Count)
259if (!Avx2.IsSupported && length > 2 * Vector128<short>.Count)
267ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - (2 * Vector128<short>.Count));
272Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
281currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
289ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<short>.Count);
318if (length < Vector128<short>.Count)
460if (!Avx2.IsSupported && length > 2 * Vector128<short>.Count)
468ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - (2 * Vector128<short>.Count));
473Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
483currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
491ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<short>.Count);
522if (length < Vector128<short>.Count)
674if (!Avx2.IsSupported && length > 2 * Vector128<short>.Count)
682ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - (2 * Vector128<short>.Count));
687Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
697currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
705ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<short>.Count);
736if (length < Vector128<short>.Count)
892if (!Avx2.IsSupported && length > 2 * Vector128<short>.Count)
900ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - (2 * Vector128<short>.Count));
905Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
915currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
923ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<short>.Count);
954if (length < Vector128<short>.Count)
1087if (!Avx2.IsSupported && length > 2 * Vector128<short>.Count)
1095ref short twoVectorsAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - (2 * Vector128<short>.Count));
1100Vector128<short> source1 = Vector128.LoadUnsafe(ref currentSearchSpace, (nuint)Vector128<short>.Count);
1110currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, 2 * Vector128<short>.Count);
1118ref short oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<short>.Count);
1260if (offsetInVector >= Vector128<short>.Count)
1264offsetInVector -= Vector128<short>.Count;
src\runtime\src\libraries\System.Private.CoreLib\src\System\SpanHelpers.T.cs (49)
1477if (!Vector128.IsHardwareAccelerated || length < Vector128<T>.Count)
1592ref T oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, (uint)(length - Vector128<T>.Count));
1600currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<T>.Count);
1609if ((uint)length % Vector128<T>.Count != 0)
1664if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
1811ref TValue oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<TValue>.Count);
1819currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<TValue>.Count);
1828if ((uint)length % Vector128<TValue>.Count != 0)
1898if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
2077ref TValue oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<TValue>.Count);
2086currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<TValue>.Count);
2095if ((uint)length % Vector128<TValue>.Count != 0)
2139if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
2318ref TValue oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<TValue>.Count);
2327currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<TValue>.Count);
2336if ((uint)length % Vector128<TValue>.Count != 0)
2365if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
2489ref TValue oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, length - Vector128<TValue>.Count);
2499currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<TValue>.Count);
2508if ((uint)length % Vector128<TValue>.Count != 0)
2538if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
2665ref TValue oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, (uint)(length - Vector128<TValue>.Count));
2675currentSearchSpace = ref Unsafe.Add(ref currentSearchSpace, Vector128<TValue>.Count);
2684if ((uint)length % Vector128<TValue>.Count != 0)
2714if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
2858if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
3032nint offset = length - Vector128<TValue>.Count;
3041offset -= Vector128<TValue>.Count;
3075if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
3247nint offset = length - Vector128<TValue>.Count;
3257offset -= Vector128<TValue>.Count;
3292if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
3404nint offset = length - Vector128<TValue>.Count;
3413offset -= Vector128<TValue>.Count;
3456if (!Vector128.IsHardwareAccelerated || length < (uint)Vector128<T>.Count)
3472nuint lastVectorIndex = length - (uint)Vector128<T>.Count;
3484idx += (uint)Vector128<T>.Count;
3564if (!Vector128.IsHardwareAccelerated || length < Vector128<TValue>.Count)
3680nint offset = length - Vector128<TValue>.Count;
3691offset -= Vector128<TValue>.Count;
3889if (!Vector128.IsHardwareAccelerated || length < Vector128<T>.Count)
3908ref T oneVectorAwayFromEnd = ref Unsafe.Add(ref searchSpace, (uint)(length - Vector128<T>.Count));
3919current = ref Unsafe.Add(ref current, Vector128<T>.Count);
4036if (!Vector128.IsHardwareAccelerated || length < Vector128<T>.Count)
4054nint offset = length - Vector128<T>.Count;
4065offset -= Vector128<T>.Count;
4171if (Vector128.IsHardwareAccelerated && length >= Vector128<T>.Count)
4206ref T oneVectorAwayFromEnd = ref Unsafe.Subtract(ref end, Vector128<T>.Count);
4210current = ref Unsafe.Add(ref current, Vector128<T>.Count);
src\runtime\src\libraries\System.Private.CoreLib\src\System\Text\Ascii.cs (18)
52if (!Vector128.IsHardwareAccelerated || length < Vector128<T>.Count)
109if (length <= 2 * Vector128<T>.Count)
113Vector128.LoadUnsafe(ref Unsafe.Subtract(ref searchSpaceEnd, Vector128<T>.Count)));
179if (length > 4 * Vector128<T>.Count)
184Vector128.LoadUnsafe(ref searchSpace, (nuint)Vector128<T>.Count) |
185Vector128.LoadUnsafe(ref searchSpace, 2 * (nuint)Vector128<T>.Count) |
186Vector128.LoadUnsafe(ref searchSpace, 3 * (nuint)Vector128<T>.Count)))
191nuint i = 4 * (nuint)Vector128<T>.Count;
196nuint misalignedElements = Unsafe.OpportunisticMisalignment(ref searchSpace, (uint)Vector128<byte>.Count) / (nuint)sizeof(T);
198Debug.Assert((int)i > 3 * Vector128<T>.Count);
200nuint finalStart = (nuint)length - 4 * (nuint)Vector128<T>.Count;
202for (; i < finalStart; i += 4 * (nuint)Vector128<T>.Count)
208Vector128.LoadUnsafe(ref current, (nuint)Vector128<T>.Count) |
209Vector128.LoadUnsafe(ref current, 2 * (nuint)Vector128<T>.Count) |
210Vector128.LoadUnsafe(ref current, 3 * (nuint)Vector128<T>.Count)))
224Vector128.LoadUnsafe(ref searchSpace, (nuint)Vector128<T>.Count) |
225Vector128.LoadUnsafe(ref Unsafe.Subtract(ref searchSpaceEnd, 2 * Vector128<T>.Count)) |
226Vector128.LoadUnsafe(ref Unsafe.Subtract(ref searchSpaceEnd, Vector128<T>.Count)));