simba icon indicating copy to clipboard operation
simba copied to clipboard

Add as_array to SimdValue?

Open RReverser opened this issue 10 months ago • 2 comments

Often it would be convenient to be able to cast the entire SIMD value to an array reference instead of extracting lanes one by one, in a generic code over any SimdValue.

As far as I can tell, all implementations of SimdValue should be able to support this - AutoSimd<[T; N]> has array easily accessed via .0, primitives can be casted via std::slice::from_ref, num_complex::Complex has repr(C) compatible with [T; 2], std::simd-based implementation has its own as_array, and wide-based implementation has as_array_ref.

With that in mind, can we add as_array to SimdValue trait itself to make writing generic code easier?

RReverser avatar Feb 18 '25 13:02 RReverser

As far as I can tell, this already fails at trying to add as_array to the SimdValue trait, because the return type [Self::Element; Self::LANES] would require the rustc feature generic_const_exprs. And if you add an associated type and fill it in as an array via macro impls, you can't make use of the array in a generic context.

tilpner avatar Feb 19 '25 09:02 tilpner

Oh, the name is misleading, I meant for it to just return slice. I should have called it as_slice.

Proper arrays would be nice too, but I agree not feasible at the moment.

RReverser avatar Feb 19 '25 11:02 RReverser