我正在尝试使用 SSE2 优化函数。我想知道是否可以比这种方式更好地为我的汇编代码准备数据。我的源数据是来自 pSrcData 的一堆无符号字符。我将其复制到这个 float 数组中,因为我的计算需要在 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
}
是否有一种更快的方法可以将 pSrcData 的所有其他字节转换为 float 并将其存储到 vVectX 中?
谢谢!
最佳答案
(1) AND 使用掩码将奇数字节清零 (PAND
)
(2) 从 16 位解压到 32 位(使用零向量的PUNPCKLWD
)
(3) 将 32 位整数转换为 float (CVTDQ2PS
)
三个说明。
关于assembly - 在汇编中将无符号字符转换为 float (为浮点向量计算做准备),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3991984/