来自英特尔article
整数格式转换通常用于图像和视频应用程序。例如,当在像素上计算之前将RGBA从四个字节转换为四个浮点时,可以使用它们。如图所示,一条SSE4转换指令可以执行与四条SIMD指令相同的操作。

SSE2:
pmovd xmm0, m32
pxor xmm7, xmm7
punpcklbw xmm0, xmm7
punpcklwd xmm0, xmm7
cvtdq2ps xmm0, xmm0

SSE4:
pmovzxbd xmm0, m32
cvtdq2ps xmm0, xmm0

有人能给我举个完整的例子吗?谢谢!

最佳答案

因为pmovzxbd只适用于32位内存操作数或128位sse寄存器,而不适用于通用寄存器,所以需要插入一些类型转换或从GPR到sse的显式加载。

__m128 convert_RGBA_to_float(float* rgba) {
    return  _mm_cvtepi32_ps( _mm_cvtepu8_epi32 ( *(__m128i*)rgba) );
}

10-08 04:44