787 {
788 nuint num = 0u;
789 _ = BitConverter.IsLittleEndian;
791 {
793 {
795 }
796 }
798 {
800 if (elementCount >= num2)
801 {
802 nuint num3 = elementCount - num2;
803 do
804 {
807 {
808 break;
809 }
811 Unsafe.WriteUnaligned(pUtf16Buffer + num, low);
813 num += num2;
814 }
815 while (num <= num3);
816 }
817 }
818 nuint num4 = elementCount - num;
819 if (num4 < 4)
820 {
821 goto IL_00df;
822 }
823 nuint num5 = num + num4 - 4;
824 uint num6;
825 while (true)
826 {
827 num6 =
Unsafe.ReadUnaligned<uint>(pAsciiBuffer + num);
829 {
830 break;
831 }
833 num += 4;
834 if (num <= num5)
835 {
836 continue;
837 }
838 goto IL_00df;
839 }
840 goto IL_014f;
841 IL_014d:
842 return num;
843 IL_014f:
844 _ = BitConverter.IsLittleEndian;
845 while (((byte)num6 & 0x80) == 0)
846 {
847 pUtf16Buffer[num] = (char)(byte)num6;
848 num++;
849 num6 >>= 8;
850 }
851 goto IL_014d;
852 IL_00df:
853 if (((uint)(int)num4 & 2u) != 0)
854 {
855 num6 =
Unsafe.ReadUnaligned<ushort>(pAsciiBuffer + num);
857 {
858 goto IL_014f;
859 }
860 _ = BitConverter.IsLittleEndian;
861 pUtf16Buffer[num] = (char)(byte)num6;
862 pUtf16Buffer[num + 1] = (char)(num6 >> 8);
863 num += 2;
864 }
865 if (((uint)(int)num4 & (true ? 1u : 0u)) != 0)
866 {
867 num6 = pAsciiBuffer[num];
868 if (((byte)num6 & 0x80) == 0)
869 {
870 pUtf16Buffer[num] = (char)num6;
871 num++;
872 }
873 }
874 goto IL_014d;
875 }
static bool IsHardwareAccelerated
static unsafe void Widen(Vector< byte > source, out Vector< ushort > low, out Vector< ushort > high)
static new bool IsSupported
static new bool IsSupported
static void WidenFourAsciiBytesToUtf16AndWriteToBuffer(ref char outputBuffer, uint value)
static bool AllBytesInUInt32AreAscii(uint value)
static unsafe nuint WidenAsciiToUtf16_Intrinsified(byte *pAsciiBuffer, char *pUtf16Buffer, nuint elementCount)