For a library like this, I think the right thing to do would be to pass things as structs. Especially when you are dealing with triangular matrices like this it would help readability to have clearly named types.
As for using arrays vs vectors, I’d suggest to keep using arrays/slices for now, since with vectors there are more performance pitfalls for generic code like this.
And if you do start optimizing, then you shouldn’t use one SIMD vector per math vector anyways, instead ideally you should split the math vector into pieces of std.simd.suggestVectorSize
and operate on those.