Hey chaps (and possibly lasses?)<div><br></div><div>I've been slowly working a std.simd library, the aim of which is to provide a lowest-level hardware-independent SIMD interface. core.simd implements SSE currently for x86, other architectures are currently exposed via gcc.builtins.</div>
<div>The purpose of std.simd, is to be the lowest level API that people make direct use of, while still having as-close-to-direct-as-possible mapping to the hardware opcodes, but still being portable. I would expect that custom, more-feature-rich SIMD/vector/matrix/linear algebra libraries should be built on top of std.simd in future, that way being portable to as many systems as possible.</div>
<div><br></div><div>Now I've reached a question in the design of the library, I'd like to take a general consensus.</div><div><br></div><div>lowest level vectors are defined by: __vector(type[width])</div><div>But core.simd also defines a bunch of handy 'nice' aliases for common vector types, ie, float4, int4, short8, etc.</div>
<div><br></div><div>I want to claim those names into std.simd. They should be the lowest level names that people use, and therefore associate with the std.simd functionality.</div><div>I also want to enhance them a bit:</div>
<div>  I want to make them a struct that wraps the primitive rather than an alias. I understand this single-POD struct will be handled the same as the POD its self, is that right? If I pass the wrapper struct byval to a function, it will be passed in a register as it should yeah?</div>
<div>  I then intend to then add CTFE support, and maybe some properties and opDisplatch bits.</div><div><br></div><div>Does this sound reasonable?</div>