1

来自英特尔的文章

整数格式转换通常用于成像和视频应用程序中。例如,它们可以用于在计算像素之前将 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

有人可以给我看一个完整的例子吗?非常感谢!

4

1 回答 1

2

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

__m128 convert_RGBA_to_float(float* rgba) {
    return  _mm_cvtepi32_ps( _mm_cvtepu8_epi32 ( *(__m128i*)rgba) );
}
于 2012-06-21T07:56:30.393 回答