String can provide you a `ReadOnlySpan<char>`, out of which you can either take `ref readonly char` "byref" pointer, which all vectors work with, or you can use the unsafe variant and make this byref mutable (just don't write to it) with `Unsafe.AsRef`.
Because pretty much every type that has linear memory can be represented as span, it means that every span is amenable to pointer (byref) arithmetics which you then use to write a SIMD routine. e.g.:
var text = "Hello, World! Hello, World!";
var span = MemoryMarshal.Cast<char, ushort>(text);
ref readonly var ptr = ref span[0];
var chunk = Vector128.LoadUnsafe(in ptr);
var needle = Vector128.Create((ushort)',');
var comparison = Vector128.Equals(chunk, needle);
var offset = uint.TrailingZeroCount(comparison.ExtractMostSignificantBits());
Console.WriteLine(text[..(int)offset]);
If you have doubts regarding codegen quality, take a look at:
https://godbolt.org/z/b97zjfTP7
The above vector API calls are lowered to lines 17-22.