【问题标题】:How to use SSE intrinsics in MS Visual Studio?如何在 MS Visual Studio 中使用 SSE 内在函数?
【发布时间】:2012-06-05 10:24:34
【问题描述】:

我正在尝试使用 SSE2 指令制作一些优化的代码。目前,我用内联汇编编写它,如下所示:

...
__m128 zero = {0};
__asm {
    ...
LINE_LOOP_1:
    MOVQ        xmm0, QWORD PTR [eax]    ; no problem
    PUNPCKLBW   xmm0, zero               ; PROBLEM IS HERE
    ...
    LOOP        LINE_LOOP_1
}

它工作得很好,但我想用内在函数重写它,这样更容易改变(我有稍微不同的计算版本,我想优化)。

但是,我无法弄清楚要使用哪些内在函数。我找到的任何文档都列出了大约一半的 SSE2 指令,看起来另一半不能作为内在函数使用! MS 似乎不太可能中途放弃 SSE 的实施。

那么,我可以使用哪个内在函数来生成例如PUNPCKLBW 指令?

我使用 MS Visual Studio 2005。

附:一些 MSDN documentation 建议使用_mm_unpacklo_pi8,但它不起作用:

#include "xmmintrin.h"

int main()
{
    __m128 x = {0}, y = {0};
    x = _mm_unpacklo_pi8(x, y);
}

这会导致编译错误:

错误 C2664:“_m_punpcklbw”:无法将参数 1 从“_m128”转换为“_m64”

【问题讨论】:

    标签: c visual-studio-2005 sse inline-assembly intrinsics


    【解决方案1】:

    你必须使用_mm_unpacklo_epi8see here

    epi 后缀内部函数用于 SSE 寄存器,pi 用于 MMX 寄存器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多