1

我想从 128 位寄存器中提取值(第一个字 16 位),我得到了这个命令,但这不起作用。设置 a 的值后会有一些算术运算,而不是变量内的结果会有一些算术运算最后会改变我想提取第一个单词...我该怎么做...

int r;
int inm=0;

__m128i a=_mm_setr_epi16(8,9,3,2,4,5,6,11);

_asm{
    r = _mm_extract_epi16(a,inm);    
}
4

2 回答 2

8

您不要将内在函数放在 _asm 块中。它们的行为与任何其他功能一样。这将正常工作:

#include <emmintrin.h>

__m128i a = _mm_setr_epi16(8,9,3,2,4,5,6,11);
int r = _mm_extract_epi16(a, 0);
于 2011-05-11T22:56:51.803 回答
6

pextrw指令仅适用于立即数。在 C 中,这意味着该值需要是编译时间常数。

int r;
static const int inm=0;

__m128i a=_mm_setr_epi16(8,9,3,2,4,5,6,11);

r = _mm_extract_epi16(a,inm);    
于 2011-05-11T22:58:26.323 回答