相关疑难解决方法(0)

如何用最少的指令乘以两个四元数?

经过一番思考,我想出了以下代码,用于使用SSE乘以两个四元数:

#include <pmmintrin.h> /* SSE3 intrinsics */

/* multiplication of two quaternions (x, y, z, w) x (a, b, c, d) */

__m128 _mm_cross4_ps(__m128 xyzw, __m128 abcd)
{
    /* The product of two quaternions is:                                 */
    /* (X,Y,Z,W) = (xd+yc-zb+wa, -xc+yd+za+wb, xb-ya+zd+wc, -xa-yb-zc+wd) */

    __m128 wzyx = _mm_shuffle_ps(xyzw, xyzw, _MM_SHUFFLE(0,1,2,3));
    __m128 baba = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(0,1,0,1));
    __m128 dcdc = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(2,3,2,3));

    /* variable names below are for parts of componens of result (X,Y,Z,W) */
    /* nX stands for -X …
Run Code Online (Sandbox Code Playgroud)

c assembly sse multiplication quaternions

9
推荐指数
1
解决办法
2283
查看次数

标签 统计

assembly ×1

c ×1

multiplication ×1

quaternions ×1

sse ×1