第一個嘗試 直接使用內聯(lián)匯編替代intrinsics代碼(無效)
我在某篇博客里看到說intrinsics語法雖然簡化了SSE編程的難度,但是他無法直接控制XMM0-XMM7寄存器,很多指令中間都會用內存做中轉,所以我就想我如果直接用匯編寫效率肯定還能有進一步的提高,于是我首先嘗試把GaussBlurFromLeftToRight_SSE優(yōu)化,仔細觀察這個函數(shù),如果弄得好,確實能有效的利用這些寄存器,有關代碼如下:
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 : &