第一個嘗試   直接使用內聯(lián)匯編替代intrinsics代碼(無效)

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

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

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 :
&