15 return (
value & 0x8080808080808080uL) == 0;
21 return (
value & 0xFF80FF80u) == 0;
27 return (
value & 0xFF80FF80FF80FF80uL) == 0;
33 if ((
value & 0xFF80u) != 0)
64 byte* ptr2 = pBuffer + bufferLength -
count;
65 pBuffer = (
byte*)((nuint)(pBuffer +
count) & ~(nuint)(
count - 1));
74 bufferLength -= (nuint)pBuffer;
75 bufferLength = (nuint)(bufferLength + ptr);
81 if (bufferLength >= 8)
83 num =
Unsafe.ReadUnaligned<uint>(pBuffer);
84 uint num2 =
Unsafe.ReadUnaligned<uint>(pBuffer + 4);
98 if ((bufferLength & 4) != 0)
100 num =
Unsafe.ReadUnaligned<uint>(pBuffer);
107 if ((bufferLength & 2) != 0)
109 num =
Unsafe.ReadUnaligned<ushort>(pBuffer);
116 if ((bufferLength & 1) != 0 && *pBuffer >= 0)
125 return (nuint)(pBuffer - (nuint)ptr);
137 nuint num2 = num - 1;
142 uint num3 = uint.MaxValue;
143 uint num4 = uint.MaxValue;
144 uint num5 = uint.MaxValue;
145 uint num6 = uint.MaxValue;
147 if (bufferLength >= num)
154 if (bufferLength < 2 * num)
158 pBuffer = (
byte*)((nuint)(pBuffer + num) & ~num2);
159 bufferLength = (nuint)(bufferLength + ptr);
160 bufferLength -= (nuint)pBuffer;
161 if (bufferLength < 2 * num)
165 byte* ptr2 = pBuffer + bufferLength - 2 * num;
210 if ((bufferLength & 8) != 0)
213 ulong num7 =
Unsafe.ReadUnaligned<ulong>(pBuffer);
216 num7 &= 0x8080808080808080uL;
222 if ((bufferLength & 4) != 0)
224 uint value3 =
Unsafe.ReadUnaligned<uint>(pBuffer);
232 if ((bufferLength & 2) != 0)
234 uint value3 =
Unsafe.ReadUnaligned<ushort>(pBuffer);
237 pBuffer += (nuint)(((nint)(sbyte)value3 >> 7) + 1);
242 if ((bufferLength & 1) != 0 && *pBuffer >= 0)
248 if ((bufferLength & num) == 0)
266 return (nuint)(pBuffer - (nuint)ptr);
281 if (((
byte)bufferLength & num2) != 0)
283 pBuffer += (bufferLength & num2) - num;
321 char* ptr2 = pBuffer + bufferLength -
count;
322 pBuffer = (
char*)((nuint)((
byte*)pBuffer + count2) & ~(nuint)(count2 - 1));
331 bufferLength -= (nuint)(nint)(pBuffer - ptr);
337 if (bufferLength >= 4)
339 num =
Unsafe.ReadUnaligned<uint>(pBuffer);
340 uint num2 =
Unsafe.ReadUnaligned<uint>(pBuffer + 2);
354 if ((bufferLength & 2) != 0)
356 num =
Unsafe.ReadUnaligned<uint>(pBuffer);
363 if ((bufferLength & 1) != 0 && *pBuffer <=
'\u007f')
375 nuint num3 = (nuint)((
byte*)pBuffer - (nuint)ptr);
381 if (bufferLength == 0)
392 if (bufferLength >= num2)
398 if ((num3 & 0xAAAA) == 0)
401 if (bufferLength < 2 * num)
405 pBuffer = (
char*)((nuint)((
byte*)pBuffer + num) & ~(nuint)(num - 1));
406 bufferLength = (nuint)(bufferLength + (
byte*)ptr);
407 bufferLength -= (nuint)pBuffer;
408 if (bufferLength < 2 * num)
412 char* ptr2 = (
char*)((
byte*)pBuffer + bufferLength - 2 * num);
429 if ((num3 & 0xAAAAu) != 0)
451 if ((num3 & 0xAAAAu) != 0)
462 if ((bufferLength & 4) != 0)
465 ulong num4 =
Unsafe.ReadUnaligned<ulong>(pBuffer);
468 num4 &= 0xFF80FF80FF80FF80uL;
474 if ((bufferLength & 2) != 0)
487 if ((bufferLength & 1) != 0 && *pBuffer <=
'\u007f')
493 if ((bufferLength & num) != 0)
506 if ((num3 & 0xAAAAu) != 0)
519 if (((
byte)bufferLength & (num - 1)) != 0)
521 pBuffer = (
char*)((
byte*)pBuffer + (bufferLength & (num - 1)) - num);
533 if ((num3 & 0xAAAAu) != 0)
548 return (nuint)(pBuffer - ptr);
565 outputBuffer = (byte)
value;
578 outputBuffer = (byte)
value;
579 Unsafe.Add(ref outputBuffer, 1) = (byte)(
value >> 16);
582 public unsafe
static nuint
NarrowUtf16ToAscii(
char* pUtf16Buffer,
byte* pAsciiBuffer, nuint elementCount)
593 num4 =
Unsafe.ReadUnaligned<ulong>(pUtf16Buffer);
604 if (elementCount >= 2 * num5)
607 num4 =
Unsafe.ReadUnaligned<ulong>(pUtf16Buffer);
613 nuint num6 = elementCount - 2 * num5;
618 if (
Vector.GreaterThanAny(
Vector.BitwiseOr(vector, vector2), right))
629 nuint num7 = elementCount - num;
634 nuint num8 = num + num7 - 4;
638 num4 =
Unsafe.ReadUnaligned<ulong>(pUtf16Buffer + num);
658 pAsciiBuffer[num] = (byte)num2;
665 if (((uint)(
int)num7 & 2u) != 0)
667 num2 =
Unsafe.ReadUnaligned<uint>(pUtf16Buffer + num);
675 if (((uint)(
int)num7 & (
true ? 1u : 0u)) != 0)
677 num2 = pUtf16Buffer[num];
680 pAsciiBuffer[num] = (byte)num2;
693 num2 = (uint)(num4 >> 32);
702 nuint num2 = num - 1;
719 nuint num3 = num / 2;
720 if (((uint)(int)pAsciiBuffer & (num / 2)) != 0)
744 num3 = num - ((nuint)pAsciiBuffer & num2);
745 nuint num4 = elementCount - num;
782 while (num3 <= num4);
786 public unsafe
static nuint
WidenAsciiToUtf16(
byte* pAsciiBuffer,
char* pUtf16Buffer, nuint elementCount)
800 if (elementCount >= num2)
802 nuint num3 = elementCount - num2;
811 Unsafe.WriteUnaligned(pUtf16Buffer + num, low);
818 nuint num4 = elementCount - num;
823 nuint num5 = num + num4 - 4;
827 num6 =
Unsafe.ReadUnaligned<uint>(pAsciiBuffer + num);
845 while (((
byte)num6 & 0x80) == 0)
847 pUtf16Buffer[num] = (char)(
byte)num6;
853 if (((uint)(
int)num4 & 2u) != 0)
855 num6 =
Unsafe.ReadUnaligned<ushort>(pAsciiBuffer + num);
861 pUtf16Buffer[num] = (char)(
byte)num6;
862 pUtf16Buffer[num + 1] = (char)(num6 >> 8);
865 if (((uint)(int)num4 & (
true ? 1u : 0u)) != 0)
867 num6 = pAsciiBuffer[num];
868 if (((
byte)num6 & 0x80) == 0)
870 pUtf16Buffer[num] = (char)num6;
880 nuint num2 = num - 1;
893 nuint num3 = (num >> 1) - (((nuint)pUtf16Buffer >> 1) & (num2 >> 1));
894 nuint num4 = elementCount - num;
895 char* ptr = pUtf16Buffer + num3;
969 outputBuffer = (char)(
byte)
value;
971 Unsafe.Add(ref outputBuffer, 1) = (char)(
byte)
value;
973 Unsafe.Add(ref outputBuffer, 2) = (char)(
byte)
value;
981 return (
value & 0x80808080u) == 0;
static readonly bool IsLittleEndian
static int TrailingZeroCount(int value)
static bool IsHardwareAccelerated
static unsafe void Widen(Vector< byte > source, out Vector< ushort > low, out Vector< ushort > high)
static unsafe Vector< byte > Narrow(Vector< ushort > low, Vector< ushort > high)
static new bool IsSupported
static new bool IsSupported
static Vector128< byte > Create(byte value)
static Vector128< T > Zero
static new bool IsSupported
static Vector128< ulong > ConvertScalarToVector128UInt64(ulong value)
static ulong ConvertToUInt64(Vector128< ulong > value)
static unsafe Vector128< sbyte > LoadVector128(sbyte *address)
static int MoveMask(Vector128< sbyte > value)
static unsafe Vector128< sbyte > LoadAlignedVector128(sbyte *address)
static uint ConvertToUInt32(Vector128< uint > value)
static unsafe void StoreScalar(double *address, Vector128< double > source)
static unsafe void Store(sbyte *address, Vector128< sbyte > source)
static Vector128< byte > PackUnsignedSaturate(Vector128< short > left, Vector128< short > right)
static Vector128< byte > Or(Vector128< byte > left, Vector128< byte > right)
static Vector128< sbyte > AddSaturate(Vector128< sbyte > left, Vector128< sbyte > right)
static unsafe void StoreAligned(sbyte *address, Vector128< sbyte > source)
static Vector128< byte > UnpackLow(Vector128< byte > left, Vector128< byte > right)
static new bool IsSupported
static Vector128< uint > ConvertScalarToVector128UInt32(uint value)
static Vector128< byte > UnpackHigh(Vector128< byte > left, Vector128< byte > right)
static bool TestZ(Vector128< sbyte > left, Vector128< sbyte > right)
static new bool IsSupported
static bool AllCharsInUInt32AreAscii(uint value)
static unsafe nuint GetIndexOfFirstNonAsciiByte_Default(byte *pBuffer, nuint bufferLength)
static unsafe nuint GetIndexOfFirstNonAsciiByte(byte *pBuffer, nuint bufferLength)
static bool AllCharsInUInt64AreAscii(ulong value)
static uint CountNumberOfLeadingAsciiBytesFromUInt32WithSomeNonAsciiData(uint value)
static bool FirstCharInUInt32IsAscii(uint value)
static void WidenFourAsciiBytesToUtf16AndWriteToBuffer(ref char outputBuffer, uint value)
static void NarrowFourUtf16CharsToAsciiAndWriteToBuffer(ref byte outputBuffer, ulong value)
static unsafe nuint GetIndexOfFirstNonAsciiChar_Sse2(char *pBuffer, nuint bufferLength)
static bool ContainsNonAsciiByte_Sse2(uint sseMask)
static unsafe nuint WidenAsciiToUtf16(byte *pAsciiBuffer, char *pUtf16Buffer, nuint elementCount)
static void NarrowTwoUtf16CharsToAsciiAndWriteToBuffer(ref byte outputBuffer, uint value)
static bool AllBytesInUInt32AreAscii(uint value)
static unsafe nuint NarrowUtf16ToAscii(char *pUtf16Buffer, byte *pAsciiBuffer, nuint elementCount)
static unsafe nuint GetIndexOfFirstNonAsciiChar(char *pBuffer, nuint bufferLength)
static unsafe nuint GetIndexOfFirstNonAsciiByte_Intrinsified(byte *pBuffer, nuint bufferLength)
static bool AllBytesInUInt64AreAscii(ulong value)
static unsafe nuint NarrowUtf16ToAscii_Sse2(char *pUtf16Buffer, byte *pAsciiBuffer, nuint elementCount)
static unsafe nuint WidenAsciiToUtf16_Intrinsified(byte *pAsciiBuffer, char *pUtf16Buffer, nuint elementCount)
static unsafe nuint GetIndexOfFirstNonAsciiChar_Default(char *pBuffer, nuint bufferLength)