SSE:从const __m128 *转换为const float *

时间:2013-06-03 20:52:30

标签: c++ floating-point type-conversion const sse

我正在尝试编写一些SSE代码但由于此错误而无法继续:

  

错误C2664:'_ mm_loadu_ps':无法将参数1从'const __m128 *'转换为'const float *'

我要加载未对齐的数据并转换为__m128以使用SSE内在函数。 我正在网上搜索但无法完成这项工作。 这是我的代码:

const Matrix<T> mul_SSE (const Matrix<T>& m)const{
    // ...
    __m128 a = _mm_loadu_ps((__m128 const*)&m(0,0)); //<-Here's the error line
    // ...
}

参数m是浮点矩阵。 有什么建议吗?非常感谢你!

PS。此外,如果我写__m128 a = _mm_loadu_ps((__m128*)&m(0,0));,它会给我同样的错误:

  

错误C2664:'_ mm_loadu_ps':无法将参数1从'__m128 *'转换为'const float *'

解决: 正确的方法:

__m128 a = _mm_loadu_ps(&m(0,0));

1 个答案:

答案 0 :(得分:0)

The documentation on MSDN states that _mm_loadu_ps takes a float* with 4 floats.

你需要传入一个float*指向矩阵中的一个浮点数组(实际上是4个)。

当函数需要__m128 const*时,您将矩阵的引用转换为float*