第一个尝试 直接使用内联汇编替代intrinsics代码(无效)
我在某篇博客里看到说intrinsics语法虽然简化了SSE编程的难度,但是他无法直接控制XMM0-XMM7寄存器,很多指令中间都会用内存做中转,所以我就想我如果直接用汇编写效率肯定还能有进一步的提高,于是我首先尝试把GaussBlurFromLeftToRight_SSE优化,仔细观察这个函数,如果弄得好,确实能有效的利用这些寄存器,有关代码如下:
void GaussBlurFromLeftToRight_SSE(float *Data, int Width, int Height, float B0, float B1, float B2, float B3)
{ float *MemB3 = (float *)_mm_malloc(4 * sizeof(float), 16);
MemB3[0] = MemB3[1] = MemB3[2] = MemB3[3] = B3; int Stride = Width * 4 * sizeof(float);
_asm
{
mov ecx, Height
movss xmm0, B0
shufps xmm0, xmm0, 0 // xmm0 = B0 movss xmm1, B1
shufps xmm1, xmm1, 0 // xmm1 = B1 movss xmm2, B2
shufps xmm2, xmm2, 0 // xmm2 = B2 mov edi, MemB3
LoopH24 :
&

