将unsigned chars转换为在程序集中浮动(以准备浮点向量计算)

War*_*pin 4 assembly sse2

我正在尝试使用SSE2优化函数.我想知道我是否可以比这种方式更好地为汇编代码准备数据.我的源数据是来自pSrcData的一堆无符号字符.我将它复制到这个浮点数组,因为我的计算需要在float中进行.


unsigned char *pSrcData = GetSourceDataPointer();

__declspec(align(16)) float vVectX[4];

vVectX[0] = (float)pSrcData[0];
vVectX[1] = (float)pSrcData[2];
vVectX[2] = (float)pSrcData[4];
vVectX[3] = (float)pSrcData[6];

__asm 
{
     movaps xmm0, [vVectX]
     [...]  // do some floating point calculations on float vectors using addps, mulps, etc
}

Run Code Online (Sandbox Code Playgroud)

有没有更快的方法让我将pSrcData的每个其他字节转换为float并将其存储到vVectX中?

谢谢!

Pau*_*l R 5

(1)AND用掩码将奇数字节清零(PAND)

(2)从16位解包到32位(PUNPCKLWD带零向量)

(3)将32位整数转换为浮点数(CVTDQ2PS)

三条指示.