diff --git a/src/libraries/System.Private.CoreLib/src/System/Text/Ascii.Utility.cs b/src/libraries/System.Private.CoreLib/src/System/Text/Ascii.Utility.cs index eda658e2ce92af..04bcc411865997 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Text/Ascii.Utility.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Text/Ascii.Utility.cs @@ -402,9 +402,10 @@ private static unsafe nuint GetIndexOfFirstNonAsciiByte_Intrinsified(byte* pBuff } else if (AdvSimd.Arm64.IsSupported) { - currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(AdvSimd.LoadVector128(pBuffer), bitmask); // unaligned load - if (ContainsNonAsciiByte_AdvSimd(currentAdvSimdIndex)) + Vector128 vector = AdvSimd.LoadVector128(pBuffer); + if (VectorContainsNonAsciiChar(vector)) { + currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(vector, bitmask); // unaligned load goto FoundNonAsciiDataInCurrentChunk; } } @@ -464,10 +465,10 @@ private static unsafe nuint GetIndexOfFirstNonAsciiByte_Intrinsified(byte* pBuff Vector128 firstVector = AdvSimd.LoadVector128(pBuffer); Vector128 secondVector = AdvSimd.LoadVector128(pBuffer + SizeOfVector128); - currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(firstVector, bitmask); - secondAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(secondVector, bitmask); - if (ContainsNonAsciiByte_AdvSimd(currentAdvSimdIndex) || ContainsNonAsciiByte_AdvSimd(secondAdvSimdIndex)) + if (VectorContainsNonAsciiChar(firstVector) || VectorContainsNonAsciiChar(secondVector)) { + currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(firstVector, bitmask); + secondAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(secondVector, bitmask); goto FoundNonAsciiDataInInnerLoop; } } @@ -507,9 +508,10 @@ private static unsafe nuint GetIndexOfFirstNonAsciiByte_Intrinsified(byte* pBuff } else if (AdvSimd.Arm64.IsSupported) { - currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(AdvSimd.LoadVector128(pBuffer), bitmask); - if (ContainsNonAsciiByte_AdvSimd(currentAdvSimdIndex)) + Vector128 vector = AdvSimd.LoadVector128(pBuffer); + if (VectorContainsNonAsciiChar(vector)) { + currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(vector, bitmask); goto FoundNonAsciiDataInCurrentChunk; } } @@ -542,9 +544,10 @@ private static unsafe nuint GetIndexOfFirstNonAsciiByte_Intrinsified(byte* pBuff } else if (AdvSimd.Arm64.IsSupported) { - currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(AdvSimd.LoadVector128(pBuffer), bitmask); // unaligned load - if (ContainsNonAsciiByte_AdvSimd(currentAdvSimdIndex)) + Vector128 vector = AdvSimd.LoadVector128(pBuffer); + if (VectorContainsNonAsciiChar(vector)) { + currentAdvSimdIndex = (uint)GetIndexOfFirstNonAsciiByteInLane_AdvSimd(vector, bitmask); // unaligned load goto FoundNonAsciiDataInCurrentChunk; }