短于int数据重新对齐 [英] short to int data re-alignment
问题描述
如何将b1加载为4行数组?
b1 = -114 -113 -113 -112第0行
-93 -95 -90 -92
-25 -26 -23 -25
36 35 35 38第3行
在我的代码中,f0加载了8个元素(b1的第1列和第2列)
和f1也加载了8个元素(第3列和第4列).我要根据行将加载更改为4个元素.
f0 = 114 -113 -113 -112
f1 = -93 -95 -90 -92
f2 = -25 -26 -23 -25
f3 = 36 35 35 38
给定我的代码段代码,我该如何实现
how do a load b1 as an array of 4 rows?
b1 = -114 -113 -113 -112 row 0
-93 -95 -90 -92
-25 -26 -23 -25
36 35 35 38 row 3
in my codes f0 is loaded with 8 elements (column 1 and 2 of b1)
and f1 is loaded with 8 elements as well(columns 3 and 4).what i want is to change the loading to 4 elements according to rows.something like:
f0 =114 -113 -113 -112
f1 =-93 -95 -90 -92
f2 = -25 -26 -23 -25
f3 =36 35 35 38
how do i achieve this given my snippet codes
void tom::add(void* btr)
{
__declspec(align(16))short* b =(short*)btr;
_declspec(align(16))__m128i* b1=(__m128i*)b;
__m128i f0,f1,f2,f3,temp;
temp = (_mm_set_epi32(0,0,0,0));
f0 = _mm_load_si128(b1);//-114,-93,-25,36,-113,-95,-26,35
f1 = _mm_load_si128(b1+1);//-113,-90,-23,35,-112,-92,-25,38<</xml>
推荐答案
可能是一个变体:):
May be a variant :) :
void tom::add(short* pshData, int iCount)
{
if (4 * 4 <= iCount) {
int* piData = new int[iCount];
while (iCount--) {
piData[iCount] = pshData[iCount];
}
_m128i* p128Data = (_m128i*) piData;
_m128i f0 = _mm_load_si128(p128Data++);
_m128i f1 = _mm_load_si128(p128Data++);
_m128i f2 = _mm_load_si128(p128Data++);
_m128i f3 = _mm_load_si128(p128Data);
//..
delete[] piData;
}
}
这篇关于短于int数据重新对齐的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!