用SSE汇编求向量的点积

用SSE汇编求向量的点积 class  __declspec(align( 16 )) vector4  {
用SSE汇编求向量的点积
public:
用SSE汇编求向量的点积    union 
{
用SSE汇编求向量的点积        
struct float x, y, z, w; };
用SSE汇编求向量的点积        __m128 mm;
用SSE汇编求向量的点积    }
;
用SSE汇编求向量的点积}
;
用SSE汇编求向量的点积
用SSE汇编求向量的点积inline 
void  dot3( vector4  &  r,  const  vector4  &  x,  const  vector4  &  y )
用SSE汇编求向量的点积
{
用SSE汇编求向量的点积    
/*register vector4    s;
用SSE汇编求向量的点积    s.mm = _mm_mul_ps( x.mm , y.mm );
用SSE汇编求向量的点积    r.mm = _mm_add_ss( s.mm , _mm_movehl_ps( s.mm , s.mm ) );
用SSE汇编求向量的点积    r.mm = _mm_add_ss( r.mm , _mm_shuffle_ps( r.mm , r.mm , 1 ) );
*/

用SSE汇编求向量的点积    __asm 
{
用SSE汇编求向量的点积        mov        ecx, y
用SSE汇编求向量的点积        mov        edx, x
用SSE汇编求向量的点积        mov        eax, r
用SSE汇编求向量的点积        movaps    xmm0, xmmword ptr [ecx]
用SSE汇编求向量的点积        movaps    xmm1, xmmword ptr [edx]
用SSE汇编求向量的点积        mulps    xmm1, xmm0        
//    xmm1 = s0, s1, s2, s3
用SSE汇编求向量的点积
        movhlps    xmm0, xmm1        //    xmm0 = s2, s3, *, *
用SSE汇编求向量的点积
        addss    xmm0, xmm1        //    xmm0 = s0+s2, s3, *, *
用SSE汇编求向量的点积
        shufps    xmm1, xmm1, 1    //    xmm1 = s1, s0, s0, s0
用SSE汇编求向量的点积
        addss    xmm0, xmm1        //    xmm0 = s0+s2+s1, s3, *, *
用SSE汇编求向量的点积
        movaps    xmmword ptr [eax], xmm0
用SSE汇编求向量的点积    }

用SSE汇编求向量的点积}

用SSE汇编求向量的点积
用SSE汇编求向量的点积inline 
void  dot4( vector4  * r,  const  vector4  * x,  const  vector4  * y )
用SSE汇编求向量的点积
{
用SSE汇编求向量的点积    
/*register vector4    s;
用SSE汇编求向量的点积    s.mm = _mm_mul_ps( x->mm , y->mm );
用SSE汇编求向量的点积    r->mm = _mm_add_ss( s.mm , _mm_movehl_ps( s.mm , s.mm ) );
用SSE汇编求向量的点积    r->mm = _mm_add_ss( r->mm , _mm_shuffle_ps( r->mm , r->mm , 1 ) );
用SSE汇编求向量的点积    r->mm = _mm_add_ss( r->mm , _mm_shuffle_ps( r->mm , r->mm , 3 ) );
*/

用SSE汇编求向量的点积    __asm 
{
用SSE汇编求向量的点积        mov        ecx, y
用SSE汇编求向量的点积        mov        edx, x
用SSE汇编求向量的点积        mov        eax, r
用SSE汇编求向量的点积        movaps    xmm0, xmmword ptr [ecx]
用SSE汇编求向量的点积        movaps    xmm1, xmmword ptr [edx]
用SSE汇编求向量的点积        mulps    xmm1, xmm0        
//    xmm1 = s0, s1, s2, s3
用SSE汇编求向量的点积
        movhlps    xmm0, xmm1        //    xmm0 = s2, s3, *, *
用SSE汇编求向量的点积
        addss    xmm0, xmm1        //    xmm0 = s0+s2, s3, *, *
用SSE汇编求向量的点积
        shufps    xmm1, xmm1, 253    //    xmm1 = s1, s3, s3, s3
用SSE汇编求向量的点积
        addss    xmm0, xmm1        //    xmm0 = s0+s2+s1, s3, *, *
用SSE汇编求向量的点积
        movhlps    xmm1, xmm1        //    xmm1 = s3, s3, s3, s3
用SSE汇编求向量的点积
        addss    xmm0, xmm1        //    xmm0 = s0+s2+s1+s3, s3, *, *
用SSE汇编求向量的点积
        movaps    xmmword ptr [eax], xmm0
用SSE汇编求向量的点积    }

用SSE汇编求向量的点积}

你可能感兴趣的:(汇编)