短于int数据重新对齐 [英] short to int data re-alignment

查看:90
本文介绍了短于int数据重新对齐的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆