On 8/11/2012 8:23 PM, F i L wrote:
I'm trying to write a Cross and Dot function using core.simd.float4 and DMD

Does anyone know anything about SIMD operations that may be able to help
me translate these functions into a D equivalent? I would very much
appreciate your help.


Some reference:

C++ simd intrinsic for dot product (requires SSE 4.1, very modern)
_mm_dp_ps

C++ simd instrinsic for horizontal add (requires SSE3, also reasonably modern)
_mm_hadd_ps

If you are on SSE2 (which is the base spec for x64) and also the minimum CPU target we use at work for commercial game development, you are stuck doing shuffles and adds for dot product, which effectively process these operations as scalar).

Ideally one of the sides of the dot product is an array and you can vectorize the dot product itself (1 vector vs 4 others, or 4 v 4). This is common when setting up shapes like view frustum culling (point tested against 6-8 extruded planes in an array)


Reply via email to