第一个尝试   直接使用内联汇编替代intrinsics代码(无效)

    我在某篇博客里看到说intrinsics语法虽然简化了SSE编程的难度,但是他无法直接控制XMM0-XMM7寄存器,很多指令中间都会用内存做中转,所以我就想我如果直接用汇编写效率肯定还能有进一步的提高,于是我首先尝试把GaussBlurFromLeftToRight_SSE优化,仔细观察这个函数,如果弄得好,确实能有效的利用这些寄存器,有关代码如下:

iOS培训,Swift培训,苹果开发培训,移动开发培训

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

网友评论