you can probably make an unrolling impl by recursion + inlining
you can probably make an unrolling impl by recursion + inlining

int, JIT attemps to lower it, but doesn't realize that int.IsCanonical always returns true, so the entire method should become mov eax, 1; ret 0xcStoredPtr type (or add a Untracked variant of each type so you can just do PtrPtr<T>.Untracked)mov eax, 1; ret 0xcStoredPtrUntrackedPtrPtr<T>.Untrackedstatic unsafe bool IsCanonical<T>(Vector3D<T> value) where T : INumberBase<T> => FastAndDelegateForScalarEntries<Vector3D<T>, T>(value, &T.IsCanonical);
internal static unsafe bool FastAndDelegateForScalarEntries<T, TElem>(in T self, delegate*<TElem, bool> toCall)
{
... etc
}