nb_kernel030_x86_64_sse.s

来自「最著名最快的分子模拟软件」· S 代码 · 共 1,724 行 · 第 1/4 页

S
1,724
字号
        movq nb030_faction(%rbp),%rsi    mulps  %xmm12,%xmm5 ## VV*c6 = vnb6    mulps  %xmm13,%xmm9 ## VV*c12 = vnb12    addps  %xmm9,%xmm5    addps  nb030_Vvdwtot(%rsp),%xmm5    movaps %xmm5,nb030_Vvdwtot(%rsp)    mulps  %xmm12,%xmm7  ## FF*c6 = fnb6    mulps  %xmm13,%xmm11  ## FF*c12  = fnb12    addps  %xmm11,%xmm7    mulps  nb030_tsc(%rsp),%xmm7    mulps  %xmm2,%xmm7    xorps  %xmm9,%xmm9    subps  %xmm7,%xmm9    movaps %xmm9,%xmm10    movaps %xmm9,%xmm11    movaps nb030_fix(%rsp),%xmm12    movaps nb030_fiy(%rsp),%xmm13    movaps nb030_fiz(%rsp),%xmm14    mulps  nb030_dx(%rsp),%xmm9    mulps  nb030_dy(%rsp),%xmm10    mulps  nb030_dz(%rsp),%xmm11    ## accumulate i forces    addps %xmm9,%xmm12    addps %xmm10,%xmm13    addps %xmm11,%xmm14    movaps %xmm12,nb030_fix(%rsp)    movaps %xmm13,nb030_fiy(%rsp)    movaps %xmm14,nb030_fiz(%rsp)        ## the fj's - start by combining x & y forces from memory         movlps (%rsi,%r12,4),%xmm0 ## x1 y1 - -        movlps (%rsi,%r14,4),%xmm1 ## x3 y3 - -        movhps (%rsi,%r13,4),%xmm0 ## x1 y1 x2 y2        movhps (%rsi,%r15,4),%xmm1 ## x3 y3 x4 y4    movaps %xmm9,%xmm8    unpcklps %xmm10,%xmm9 ## x1 y1 x2 y2    unpckhps %xmm10,%xmm8 ## x3 y3 x4 y4    ## update fjx and fjy        addps  %xmm9,%xmm0        addps  %xmm8,%xmm1        movlps %xmm0,(%rsi,%r12,4)        movlps %xmm1,(%rsi,%r14,4)        movhps %xmm0,(%rsi,%r13,4)        movhps %xmm1,(%rsi,%r15,4)    ## xmm11: fjz1 fjz2 fjz3 fjz4    pshufd $1,%xmm11,%xmm5 ## fjz2 - - -    movhlps %xmm11,%xmm4     ## fjz3 - - -    pshufd $3,%xmm11,%xmm3  ## fjz4 - - -        addss  8(%rsi,%r12,4),%xmm11        addss  8(%rsi,%r13,4),%xmm5        addss  8(%rsi,%r14,4),%xmm4        addss  8(%rsi,%r15,4),%xmm3        movss  %xmm11,8(%rsi,%r12,4)        movss  %xmm5,8(%rsi,%r13,4)        movss  %xmm4,8(%rsi,%r14,4)        movss  %xmm3,8(%rsi,%r15,4)        ## should we do one more iteration?         subl $4,nb030_innerk(%rsp)        jl    _nb_kernel030_x86_64_sse.nb030_finish_inner        jmp   _nb_kernel030_x86_64_sse.nb030_unroll_loop_nb_kernel030_x86_64_sse.nb030_finish_inner:         ## check if at least two particles remain         addl $4,nb030_innerk(%rsp)        movl  nb030_innerk(%rsp),%edx        andl  $2,%edx        jnz   _nb_kernel030_x86_64_sse.nb030_dopair        jmp   _nb_kernel030_x86_64_sse.nb030_checksingle_nb_kernel030_x86_64_sse.nb030_dopair:     movq  nb030_innerjjnr(%rsp),%rcx        movl  (%rcx),%eax        movl  4(%rcx),%ebx        addq $8,nb030_innerjjnr(%rsp)        movq nb030_type(%rbp),%rsi        movl (%rsi,%rax,4),%r12d        movl (%rsi,%rbx,4),%r13d        shll %r12d        shll %r13d    movl nb030_ntia(%rsp),%edi        addl %edi,%r12d        addl %edi,%r13d        movq nb030_vdwparam(%rbp),%rsi        movlps (%rsi,%r12,4),%xmm3        movhps (%rsi,%r13,4),%xmm3    xorps  %xmm7,%xmm7        movaps %xmm3,%xmm0        shufps $136,%xmm7,%xmm0 ## 10001000        shufps $221,%xmm7,%xmm3 ## 11011101    movaps %xmm0,nb030_c6(%rsp)    movaps %xmm3,nb030_c12(%rsp)        lea  (%rax,%rax,2),%rax     ## replace jnr with j3         lea  (%rbx,%rbx,2),%rbx        movq nb030_pos(%rbp),%rdi        ## load coordinates        movlps (%rdi,%rax,4),%xmm1      ## x1 y1  -  -         movlps (%rdi,%rbx,4),%xmm4      ## x2 y2  -  -        movss 8(%rdi,%rax,4),%xmm5      ## z1 - - -         movss 8(%rdi,%rbx,4),%xmm7      ## z2 - - -     unpcklps %xmm4,%xmm1 ## x1 x2 y1 y2    movhlps  %xmm1,%xmm2 ## y1 y2 -  -    unpcklps %xmm7,%xmm5 ## z1 z2 -  -         ## calc dr          subps nb030_ix(%rsp),%xmm1        subps nb030_iy(%rsp),%xmm2        subps nb030_iz(%rsp),%xmm5        ## store dr    movaps %xmm1,nb030_dx(%rsp)    movaps %xmm2,nb030_dy(%rsp)    movaps %xmm5,nb030_dz(%rsp)        ## square it         mulps %xmm1,%xmm1        mulps %xmm2,%xmm2        mulps %xmm5,%xmm5        addps %xmm2,%xmm1        addps %xmm5,%xmm1        ## rsq in xmm1    ## calculate rinv=1/sqrt(rsq)        rsqrtps %xmm1,%xmm5        movaps %xmm5,%xmm2        mulps %xmm5,%xmm5        movaps nb030_three(%rsp),%xmm4        mulps %xmm1,%xmm5       ## rsq*lu*lu        subps %xmm5,%xmm4   ## 30-rsq*lu*lu         mulps %xmm2,%xmm4        mulps nb030_half(%rsp),%xmm4        movaps %xmm4,%xmm2        mulps  %xmm4,%xmm1    ## xmm2=rinv    ## xmm1=r    mulps nb030_tsc(%rsp),%xmm1   ## rtab    ## truncate and convert to integers    cvttps2dq %xmm1,%xmm5    ## convert back to float    cvtdq2ps  %xmm5,%xmm4    ## multiply by 8    pslld   $3,%xmm5    ## calculate eps    subps     %xmm4,%xmm1    ## move to integer registers    movd    %xmm5,%r8d    pshufd $1,%xmm5,%xmm5    movd    %xmm5,%r9d    ## xmm1=eps    ## xmm2=rinv        movq nb030_VFtab(%rbp),%rsi    ## calculate LJ table    movlps (%rsi,%r8,4),%xmm4        movlps (%rsi,%r9,4),%xmm5    unpcklps %xmm5,%xmm4    movhlps  %xmm4,%xmm5    movlps 8(%rsi,%r8,4),%xmm6        movlps 8(%rsi,%r9,4),%xmm7    unpcklps %xmm7,%xmm6    movhlps  %xmm6,%xmm7    movlps 16(%rsi,%r8,4),%xmm8        movlps 16(%rsi,%r9,4),%xmm9    unpcklps %xmm9,%xmm8    movhlps  %xmm8,%xmm9    movlps 24(%rsi,%r8,4),%xmm10        movlps 24(%rsi,%r9,4),%xmm11    unpcklps %xmm11,%xmm10    movhlps  %xmm10,%xmm11    ## dispersion table in xmm4-xmm7, repulsion table in xmm8-xmm11    mulps  %xmm1,%xmm7   ## Heps    mulps  %xmm1,%xmm11    mulps  %xmm1,%xmm6  ## Geps    mulps  %xmm1,%xmm10    mulps  %xmm1,%xmm7  ## Heps2    mulps  %xmm1,%xmm11    addps  %xmm6,%xmm5 ## F+Geps    addps  %xmm10,%xmm9    addps  %xmm7,%xmm5  ## F+Geps+Heps2 = Fp    addps  %xmm11,%xmm9    addps  %xmm7,%xmm7   ## 2*Heps2    addps  %xmm11,%xmm11    addps  %xmm6,%xmm7  ## 2*Heps2+Geps    addps  %xmm10,%xmm11    addps  %xmm5,%xmm7 ## FF = Fp + 2*Heps2 + Geps    addps  %xmm9,%xmm11    mulps  %xmm1,%xmm5 ## eps*Fp    mulps  %xmm1,%xmm9    movaps nb030_c6(%rsp),%xmm12    movaps nb030_c12(%rsp),%xmm13    addps  %xmm4,%xmm5 ## VV    addps  %xmm8,%xmm9    mulps  %xmm12,%xmm5 ## VV*c6 = vnb6    mulps  %xmm13,%xmm9 ## VV*c12 = vnb12    addps  %xmm9,%xmm5    xorps  %xmm8,%xmm8    movlhps %xmm8,%xmm5    addps  nb030_Vvdwtot(%rsp),%xmm5    movaps %xmm5,nb030_Vvdwtot(%rsp)    mulps  %xmm12,%xmm7  ## FF*c6 = fnb6    mulps  %xmm13,%xmm11  ## FF*c12  = fnb12    addps  %xmm11,%xmm7    mulps  nb030_tsc(%rsp),%xmm7    mulps  %xmm2,%xmm7    xorps  %xmm9,%xmm9    subps  %xmm7,%xmm9    movaps %xmm9,%xmm10    movaps %xmm9,%xmm11    movaps nb030_fix(%rsp),%xmm12    movaps nb030_fiy(%rsp),%xmm13    movaps nb030_fiz(%rsp),%xmm14    mulps  nb030_dx(%rsp),%xmm9    mulps  nb030_dy(%rsp),%xmm10    mulps  nb030_dz(%rsp),%xmm11    movlhps %xmm8,%xmm9    movlhps %xmm8,%xmm10    movlhps %xmm8,%xmm11    ## accumulate i forces    addps %xmm9,%xmm12    addps %xmm10,%xmm13    addps %xmm11,%xmm14    movaps %xmm12,nb030_fix(%rsp)    movaps %xmm13,nb030_fiy(%rsp)    movaps %xmm14,nb030_fiz(%rsp)        ## the fj's - start by accumulating x & y forces from memory         movq nb030_faction(%rbp),%rsi        movlps (%rsi,%rax,4),%xmm0 ## x1 y1 - -        movhps (%rsi,%rbx,4),%xmm0 ## x1 y1 x2 y2    unpcklps %xmm10,%xmm9 ## x1 y1 x2 y2    addps    %xmm9,%xmm0        movlps %xmm0,(%rsi,%rax,4)        movhps %xmm0,(%rsi,%rbx,4)    ## z forces    pshufd $1,%xmm11,%xmm8    addss  8(%rsi,%rax,4),%xmm11    addss  8(%rsi,%rbx,4),%xmm8    movss  %xmm11,8(%rsi,%rax,4)    movss  %xmm8,8(%rsi,%rbx,4)_nb_kernel030_x86_64_sse.nb030_checksingle:             movl  nb030_innerk(%rsp),%edx        andl  $1,%edx        jnz    _nb_kernel030_x86_64_sse.nb030_dosingle        jmp    _nb_kernel030_x86_64_sse.nb030_updateouterdata_nb_kernel030_x86_64_sse.nb030_dosingle:         movq nb030_pos(%rbp),%rdi        movq  nb030_innerjjnr(%rsp),%rcx        movl  (%rcx),%eax        movq nb030_type(%rbp),%rsi        movl (%rsi,%rax,4),%r12d        shll %r12d    movl nb030_ntia(%rsp),%edi        addl %edi,%r12d        movq nb030_vdwparam(%rbp),%rsi        movss (%rsi,%r12,4),%xmm0        movss 4(%rsi,%r12,4),%xmm3    movaps %xmm0,nb030_c6(%rsp)    movaps %xmm3,nb030_c12(%rsp)        lea  (%rax,%rax,2),%rax     ## replace jnr with j3         movq nb030_pos(%rbp),%rdi        ## load coordinates        movss (%rdi,%rax,4),%xmm1        movss 4(%rdi,%rax,4),%xmm2        movss 8(%rdi,%rax,4),%xmm5        ## calc dr          subss nb030_ix(%rsp),%xmm1        subss nb030_iy(%rsp),%xmm2        subss nb030_iz(%rsp),%xmm5        ## store dr    movaps %xmm1,nb030_dx(%rsp)    movaps %xmm2,nb030_dy(%rsp)    movaps %xmm5,nb030_dz(%rsp)        ## square it         mulss %xmm1,%xmm1        mulss %xmm2,%xmm2        mulss %xmm5,%xmm5        addss %xmm2,%xmm1        addss %xmm5,%xmm1        ## rsq in xmm1    ## calculate rinv=1/sqrt(rsq)        rsqrtss %xmm1,%xmm5        movaps %xmm5,%xmm2        mulss %xmm5,%xmm5        movaps nb030_three(%rsp),%xmm4        mulss %xmm1,%xmm5       ## rsq*lu*lu        subss %xmm5,%xmm4   ## 30-rsq*lu*lu         mulss %xmm2,%xmm4        mulss nb030_half(%rsp),%xmm4        movaps %xmm4,%xmm2        mulss  %xmm4,%xmm1    ## xmm2=rinv    ## xmm1=r    mulss nb030_tsc(%rsp),%xmm1   ## rtab    ## truncate and convert to integers    cvttss2si %xmm1,%r8d    ## convert back to float    cvtsi2ss  %r8d,%xmm4    ## multiply by 8    shll  $3,%r8d    ## calculate eps    subss     %xmm4,%xmm1    ## xmm1=eps    ## xmm2=rinv        movq nb030_VFtab(%rbp),%rsi    ## calculate LJ table    movss (%rsi,%r8,4),%xmm4        movss 4(%rsi,%r8,4),%xmm5    movss 8(%rsi,%r8,4),%xmm6        movss 12(%rsi,%r8,4),%xmm7    movss 16(%rsi,%r8,4),%xmm8        movss 20(%rsi,%r8,4),%xmm9    movss 24(%rsi,%r8,4),%xmm10        movss 28(%rsi,%r8,4),%xmm11    ## dispersion table in xmm4-xmm7, repulsion table in xmm8-xmm11    mulss  %xmm1,%xmm7   ## Heps    mulss  %xmm1,%xmm11    mulss  %xmm1,%xmm6  ## Geps    mulss  %xmm1,%xmm10    mulss  %xmm1,%xmm7  ## Heps2    mulss  %xmm1,%xmm11    addss  %xmm6,%xmm5 ## F+Geps    addss  %xmm10,%xmm9    addss  %xmm7,%xmm5  ## F+Geps+Heps2 = Fp    addss  %xmm11,%xmm9    addss  %xmm7,%xmm7   ## 2*Heps2    addss  %xmm11,%xmm11    addss  %xmm6,%xmm7  ## 2*Heps2+Geps    addss  %xmm10,%xmm11    addss  %xmm5,%xmm7 ## FF = Fp + 2*Heps2 + Geps    addss  %xmm9,%xmm11    mulss  %xmm1,%xmm5 ## eps*Fp    mulss  %xmm1,%xmm9    movaps nb030_c6(%rsp),%xmm12    movaps nb030_c12(%rsp),%xmm13    addss  %xmm4,%xmm5 ## VV    addss  %xmm8,%xmm9    mulss  %xmm12,%xmm5 ## VV*c6 = vnb6    mulss  %xmm13,%xmm9 ## VV*c12 = vnb12    addss  %xmm9,%xmm5    addss  nb030_Vvdwtot(%rsp),%xmm5    movss %xmm5,nb030_Vvdwtot(%rsp)    mulss  %xmm12,%xmm7  ## FF*c6 = fnb6    mulss  %xmm13,%xmm11  ## FF*c12  = fnb12    addss  %xmm11,%xmm7    mulss  nb030_tsc(%rsp),%xmm7    mulss  %xmm2,%xmm7    xorps  %xmm9,%xmm9    subss  %xmm7,%xmm9    movaps %xmm9,%xmm10    movaps %xmm9,%xmm11    movaps nb030_fix(%rsp),%xmm12    movaps nb030_fiy(%rsp),%xmm13    movaps nb030_fiz(%rsp),%xmm14    mulss  nb030_dx(%rsp),%xmm9

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?