为什么我的SSE矩阵乘法返回矩阵全0?

时间:2014-02-12 21:30:51

标签: c++ matrix sse

我正在编写一个基于SSE的Matrix类,并且在乘法时遇到了一些奇怪的问题。最奇怪的部分是它似乎以前工作,但现在它没有。我乘以的任何矩阵都会变成全零矩阵,即使乘以两个身份也是如此。

矩阵是4x4,列为主,在内部定义为__m128 col0, col1, col2, col3;

这是我的乘法函数:

inline static mat4 multiply(const mat4& lhs, const mat4& rhs)
{
    mat4 result;

    for (int i = 0; i < 4; ++i)
    {
        result.col[i] = _mm_add_ps(
            _mm_add_ps(
                _mm_mul_ps(_mm_shuffle_ps(rhs.col[i], rhs.col[i], _MM_SHUFFLE(0, 0, 0, 0)), lhs.col0),
                _mm_mul_ps(_mm_shuffle_ps(rhs.col[i], rhs.col[i], _MM_SHUFFLE(1, 1, 1, 1)), lhs.col1)),
            _mm_add_ps(
                _mm_mul_ps(_mm_shuffle_ps(rhs.col[i], rhs.col[i], _MM_SHUFFLE(2, 2, 2, 2)), lhs.col2),
                _mm_mul_ps(_mm_shuffle_ps(rhs.col[i], rhs.col[i], _MM_SHUFFLE(3, 3, 3, 3)), lhs.col3)));
    }

    return result;
}

最奇怪的是它在2天前工作时起作用了,现在却没有。到底是什么?

(编辑:在有人要求之前,他们使用工会,所以col[i] == coli

以下是一个例子:

mat4 C, D;
C.identity(); // mat4::identity() correctly sets the matrix to be an identity matrix.
D.identity();
C = mat4::multiply(C, D); // C now contains all 0's, when it should be an identity matrix.

0 个答案:

没有答案