In exploratory work for SIMD support in Odin, we were wondering if FFI should accept SIMD arguments and return SIMD values.
Returning SIMD values from FFI is quite easy: it will only mean that we need to take an interpreter representation of a SIMD value and spill components into a register.
Passing SIMD value arguments to FFI is more tricky: we need to re-materialize interpreter’s SIMD values, and that means re-constructing objects, which involves garbage collection and has a cost for each SIMD argument.
For Float32, we finally decided to avoid having Float FFI arguments and return values, to keep things simpler. Any opinions about that?