Skip to content
Prev Previous commit
Next Next commit
perform more than 3 Or at once, observe perf boost on ARM64
  • Loading branch information
adamsitnik committed Aug 5, 2022
commit fba7d16a74202d2ed3518da47f5ac95a3a7b2bc1
Original file line number Diff line number Diff line change
Expand Up @@ -1373,8 +1373,8 @@ public static unsafe int IndexOfAny(ref char searchStart, char value0, char valu
{
search = Vector128.LoadUnsafe(ref ushortSearchStart, offset);

compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search);
compareResult |= Vector128.Equals(values2, search) | Vector128.Equals(values3, search);
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search)
| Vector128.Equals(values2, search) | Vector128.Equals(values3, search);
if (compareResult == Vector128<ushort>.Zero)
{
// None matched
Expand All @@ -1391,8 +1391,8 @@ public static unsafe int IndexOfAny(ref char searchStart, char value0, char valu
search = Vector128.LoadUnsafe(ref ushortSearchStart, lengthToExamine);
offset = lengthToExamine;
// Same as method as above
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search);
compareResult |= Vector128.Equals(values2, search) | Vector128.Equals(values3, search);
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search)
| Vector128.Equals(values2, search) | Vector128.Equals(values3, search);
if (compareResult == Vector128<ushort>.Zero)
{
// None matched
Expand Down Expand Up @@ -1593,6 +1593,7 @@ public static unsafe int IndexOfAny(ref char searchStart, char value0, char valu
// Same as method as above
matches = (Vector256.Equals(values0, search) | Vector256.Equals(values1, search) | Vector256.Equals(values2, search)
| Vector256.Equals(values3, search) | Vector256.Equals(values4, search))
.AsByte().ExtractMostSignificantBits();
if (matches == 0)
{
// None matched
Expand All @@ -1617,8 +1618,8 @@ public static unsafe int IndexOfAny(ref char searchStart, char value0, char valu
{
search = Vector128.LoadUnsafe(ref ushortSearchStart, offset);

compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search) | Vector128.Equals(values2, search);
compareResult |= Vector128.Equals(values3, search) | Vector128.Equals(values4, search);
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search) | Vector128.Equals(values2, search)
| Vector128.Equals(values3, search) | Vector128.Equals(values4, search);
if (compareResult == Vector128<ushort>.Zero)
{
// None matched
Expand All @@ -1635,8 +1636,8 @@ public static unsafe int IndexOfAny(ref char searchStart, char value0, char valu
search = Vector128.LoadUnsafe(ref ushortSearchStart, lengthToExamine);
offset = lengthToExamine;
// Same as method as above
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search) | Vector128.Equals(values2, search);
compareResult |= Vector128.Equals(values3, search) | Vector128.Equals(values4, search);
compareResult = Vector128.Equals(values0, search) | Vector128.Equals(values1, search) | Vector128.Equals(values2, search)
| Vector128.Equals(values3, search) | Vector128.Equals(values4, search);
if (compareResult == Vector128<ushort>.Zero)
{
// None matched
Expand Down