1230 {
1231 nuint indexOfFirstNonAsciiByte = ASCIIUtility.GetIndexOfFirstNonAsciiByte(pInputBuffer, (uint)inputLength);
1232 pInputBuffer += indexOfFirstNonAsciiByte;
1233 inputLength -= (int)indexOfFirstNonAsciiByte;
1234 if (inputLength == 0)
1235 {
1236 utf16CodeUnitCountAdjustment = 0;
1237 scalarCountAdjustment = 0;
1238 return pInputBuffer;
1239 }
1240 int num = 0;
1241 int num2 = 0;
1242 nuint num13;
1243 if (inputLength >= 4)
1244 {
1245 byte* ptr = pInputBuffer + (uint)inputLength - 4;
1246 while (pInputBuffer <= ptr)
1247 {
1248 uint num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1249 while (true)
1250 {
1251 IL_0043:
1252 if (ASCIIUtility.AllBytesInUInt32AreAscii(num3))
1253 {
1254 pInputBuffer += 4;
1255 if ((nint)(
void*)
Unsafe.ByteOffset(ref *pInputBuffer, ref *ptr) < (nint)16)
1256 {
1257 break;
1258 }
1259 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1260 if (ASCIIUtility.AllBytesInUInt32AreAscii(num3))
1261 {
1262 pInputBuffer = (byte*)((nuint)(pInputBuffer + 4) & ~(nuint)3u);
1263 byte* ptr2 = ptr - 12;
1265 {
1266 }
1267 uint num4;
1268 while (true)
1269 {
1271 {
1273 if (num4 != 0)
1274 {
1275 break;
1276 }
1277 goto IL_00da;
1278 }
1279 if (ASCIIUtility.AllBytesInUInt32AreAscii(*(uint*)pInputBuffer | *(uint*)(pInputBuffer + 4)))
1280 {
1281 if (ASCIIUtility.AllBytesInUInt32AreAscii(*(uint*)(pInputBuffer + (nint)2 * (nint)4) | *(uint*)(pInputBuffer + (nint)3 * (nint)4)))
1282 {
1283 goto IL_00da;
1284 }
1285 pInputBuffer += 8;
1286 }
1287 num3 = *(uint*)pInputBuffer;
1288 if (ASCIIUtility.AllBytesInUInt32AreAscii(num3))
1289 {
1290 pInputBuffer += 4;
1291 num3 = *(uint*)pInputBuffer;
1292 }
1293 goto IL_011e;
1294 IL_00da:
1295 pInputBuffer += 16;
1296 if (pInputBuffer > ptr2)
1297 {
1298 goto end_IL_0043;
1299 }
1300 }
1302 pInputBuffer += num5;
1303 if (pInputBuffer > ptr)
1304 {
1305 goto end_IL_0428;
1306 }
1307 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1308 goto IL_013d;
1309 }
1310 }
1311 goto IL_011e;
1312 IL_011e:
1313 uint num6 = ASCIIUtility.CountNumberOfLeadingAsciiBytesFromUInt32WithSomeNonAsciiData(num3);
1314 pInputBuffer += num6;
1315 if (ptr < pInputBuffer)
1316 {
1317 goto end_IL_0428;
1318 }
1319 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1320 goto IL_013d;
1321 IL_039e:
1322 pInputBuffer += 6;
1323 num -= 4;
1324 break;
1325 IL_013d:
1326 while (true)
1327 {
1328 uint num7 = num3;
1329 if (!BitConverter.IsLittleEndian)
1330 {
1331 }
1332 num3 = num7 - 32960;
1333 uint num8 = num3;
1334 if (!BitConverter.IsLittleEndian)
1335 {
1336 }
1337 if ((num8 & 0xC0E0u) != 0)
1338 {
1339 break;
1340 }
1341 _ = BitConverter.IsLittleEndian;
1342 if ((uint)(byte)num3 >= 2u)
1343 {
1344 if (!BitConverter.IsLittleEndian)
1345 {
1346 }
1347 while (true)
1348 {
1349 _ = BitConverter.IsLittleEndian;
1351 {
1352 break;
1353 }
1354 pInputBuffer += 4;
1355 num -= 2;
1356 if (pInputBuffer > ptr)
1357 {
1358 goto end_IL_0428;
1359 }
1360 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1361 _ = BitConverter.IsLittleEndian;
1363 {
1364 goto IL_0043;
1365 }
1366 }
1367 num--;
1369 {
1371 {
1372 pInputBuffer += 4;
1373 goto end_IL_0043;
1374 }
1375 pInputBuffer += 3;
1376 if (pInputBuffer > ptr)
1377 {
1378 goto end_IL_0043;
1379 }
1380 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1381 continue;
1382 }
1383 pInputBuffer += 2;
1384 goto end_IL_0043;
1385 }
1386 goto IL_0521;
1387 }
1388 uint num9 = num3;
1389 if (!BitConverter.IsLittleEndian)
1390 {
1391 }
1392 num3 = num9 - 8388640;
1393 uint num10 = num3;
1394 if (!BitConverter.IsLittleEndian)
1395 {
1396 }
1397 if ((num10 & 0xC0C0F0) == 0)
1398 {
1399 while (true)
1400 {
1401 _ = BitConverter.IsLittleEndian;
1402 if ((num3 & 0x200F) == 0 || ((num3 - 8205) & 0x200F) == 0)
1403 {
1404 break;
1405 }
1406 while (true)
1407 {
1408 IL_024a:
1409 _ = BitConverter.IsLittleEndian;
1410 nint num11 = (int)num3 >> 31;
1411 pInputBuffer += 4;
1412 pInputBuffer += num11;
1413 num -= 2;
1414 ulong num12;
1415 while (true)
1416 {
1418 _ = BitConverter.IsLittleEndian;
1419 if ((nint)(ptr - pInputBuffer) < 5)
1420 {
1421 break;
1422 }
1423 num12 =
Unsafe.ReadUnaligned<ulong>(pInputBuffer);
1424 num3 = (uint)num12;
1425 if ((num12 & 0xC0F0C0C0F0C0C0F0uL) == 9286563722648649952uL &&
IsUtf8ContinuationByte(in pInputBuffer[8]))
1426 {
1427 if (((int)num12 & 0x200F) == 0 || (((int)num12 - 8205) & 0x200F) == 0)
1428 {
1429 goto end_IL_0222;
1430 }
1431 num12 >>= 24;
1432 if (((uint)(int)num12 & 0x200Fu) != 0 && ((uint)((int)num12 - 8205) & 0x200Fu) != 0)
1433 {
1434 num12 >>= 24;
1435 if (((uint)(int)num12 & 0x200Fu) != 0 && ((uint)((int)num12 - 8205) & 0x200Fu) != 0)
1436 {
1437 pInputBuffer += 9;
1438 num -= 6;
1439 continue;
1440 }
1441 }
1442 goto IL_024a;
1443 }
1444 goto IL_033c;
1445 }
1446 break;
1447 IL_033c:
1448 if ((num12 & 0xC0C0F0C0C0F0L) == 141291010687200
L)
1449 {
1450 if (((int)num12 & 0x200F) == 0 || (((int)num12 - 8205) & 0x200F) == 0)
1451 {
1452 goto end_IL_0222;
1453 }
1454 num12 >>= 24;
1455 if (((int)num12 & 0x200F) == 0 || (((int)num12 - 8205) & 0x200F) == 0)
1456 {
1457 continue;
1458 }
1459 goto IL_039e;
1460 }
1461 goto IL_03ac;
1462 }
1463 if (pInputBuffer > ptr)
1464 {
1465 goto end_IL_0428;
1466 }
1467 num3 =
Unsafe.ReadUnaligned<uint>(pInputBuffer);
1469 {
1470 goto IL_0043;
1471 }
1472 continue;
1473 IL_03ac:
1475 {
1476 goto IL_0043;
1477 }
1478 continue;
1479 end_IL_0222:
1480 break;
1481 }
1482 }
1483 else
1484 {
1485 _ = BitConverter.IsLittleEndian;
1486 num3 &= 0xC0C0FFFFu;
1487 if ((int)num3 <= -2147467265)
1488 {
1490 if (UnicodeUtility.IsInRangeInclusive(num3, 276824080u, 343932943u))
1491 {
1492 pInputBuffer += 4;
1493 num -= 2;
1494 num2--;
1495 break;
1496 }
1497 }
1498 }
1499 goto IL_0521;
1500 continue;
1501 end_IL_0043:
1502 break;
1503 }
1504 continue;
1505 end_IL_0428:
1506 break;
1507 }
1508 num13 = (nuint)((
byte*)(
void*)
Unsafe.ByteOffset(ref *pInputBuffer, ref *ptr) + 4);
1509 }
1510 else
1511 {
1512 num13 = (uint)inputLength;
1513 }
1514 while (num13 != 0)
1515 {
1516 uint num14 = *pInputBuffer;
1517 if ((uint)(byte)num14 < 128u)
1518 {
1519 pInputBuffer++;
1520 num13--;
1521 continue;
1522 }
1523 if (num13 < 2)
1524 {
1525 break;
1526 }
1527 uint
value = pInputBuffer[1];
1528 if ((uint)(byte)num14 < 224u)
1529 {
1531 {
1532 break;
1533 }
1534 pInputBuffer += 2;
1535 num--;
1536 num13 -= 2;
1537 continue;
1538 }
1539 if (num13 < 3 || (uint)(byte)num14 >= 240u)
1540 {
1541 break;
1542 }
1543 if ((byte)num14 == 224)
1544 {
1545 if (!UnicodeUtility.IsInRangeInclusive(
value, 160u, 191u))
1546 {
1547 break;
1548 }
1549 }
1550 else if ((byte)num14 == 237)
1551 {
1552 if (!UnicodeUtility.IsInRangeInclusive(
value, 128u, 159u))
1553 {
1554 break;
1555 }
1556 }
1558 {
1559 break;
1560 }
1562 {
1563 break;
1564 }
1565 pInputBuffer += 3;
1566 num -= 2;
1567 num13 -= 3;
1568 }
1569 goto IL_0521;
1570 IL_0521:
1571 utf16CodeUnitCountAdjustment = num;
1572 scalarCountAdjustment = num2;
1573 return pInputBuffer;
1574 }
static int TrailingZeroCount(int value)
static uint RotateRight(uint value, int offset)
static new bool IsSupported
static unsafe Vector128< sbyte > LoadVector128(sbyte *address)
static int MoveMask(Vector128< sbyte > value)
static new bool IsSupported
static bool UInt32BeginsWithValidUtf8TwoByteSequenceLittleEndian(uint value)
static bool UInt32FourthByteIsAscii(uint value)
static bool UInt32BeginsWithUtf8ThreeByteMask(uint value)
static bool IsUtf8ContinuationByte(in byte value)
static bool IsLowByteUtf8ContinuationByte(uint value)
static bool UInt32EndsWithValidUtf8TwoByteSequenceLittleEndian(uint value)
static bool UInt32ThirdByteIsAscii(uint value)