我想要一个__m128i变量, 并做一些像这样的操作:
unsigned char* myArray;
__m128i fourValues;
//Do some strange reference assignment, e.g.:
//int32_t& a = *((int32_t*) &fourValues);
//int32_t& b = *(((int32_t*) &fourValues) + 1);
//int32_t& c = *(((int32_t*) &fourValues) + 2);
//int32_t& d = *(((int32_t*) &fourValues) + 3);
for (int i =0; i < someSize; i+=4) {
a = d + myArray[i];
b = a + myArray[i+1];
c = b + myArray[i+2];
d = c + myArray[i+3];
//Do something with fourValues;
}
其中a,b,c,d是(或表现为)int32_t变量,并且是fourValues的第一个,第二个,第三个和第四个32位。这可能吗?
答案 0 :(得分:0)
您可以使用
int _mm_extract_epi32(
__m128i a,
const int ndx
);
看 - http://msdn.microsoft.com/en-us/library/bb531460%28v=vs.90%29.aspx
编辑:请注意,这只适用于int SSE向量,我看到这里有很多争论 - Get member of __m128 by index?,它指的是__m128,但在你的情况下应该可以使用它。尽管如此,总是值得提醒一下,这对于花车来说不够通用。
对于写作,您可以使用等效的_mm_insert_epi32,正如您指出的那样。