nb_kernel130_x86_64_sse.s

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

S
1,895
字号
    movaps %xmm3,%xmm11    movaps nb130_fix(%rsp),%xmm12    movaps nb130_fiy(%rsp),%xmm13    movaps nb130_fiz(%rsp),%xmm14    mulps  nb130_dx(%rsp),%xmm9    mulps  nb130_dy(%rsp),%xmm10    mulps  nb130_dz(%rsp),%xmm11    ## accumulate i forces    addps %xmm9,%xmm12    addps %xmm10,%xmm13    addps %xmm11,%xmm14    movaps %xmm12,nb130_fix(%rsp)    movaps %xmm13,nb130_fiy(%rsp)    movaps %xmm14,nb130_fiz(%rsp)        movq nb130_faction(%rbp),%rsi        ## the fj's - start by accumulating x & y forces from memory         movlps (%rsi,%rax,4),%xmm0 ## x1 y1 - -        movlps (%rsi,%rcx,4),%xmm1 ## x3 y3 - -        movhps (%rsi,%rbx,4),%xmm0 ## x1 y1 x2 y2        movhps (%rsi,%rdx,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,%rax,4)        movlps %xmm1,(%rsi,%rcx,4)        movhps %xmm0,(%rsi,%rbx,4)        movhps %xmm1,(%rsi,%rdx,4)    ## xmm11: fjz1 fjz2 fjz3 fjz4    pshufd $1,%xmm11,%xmm10 ## fjz2 - - -    movhlps %xmm11,%xmm9     ## fjz3 - - -    pshufd $3,%xmm11,%xmm8  ## fjz4 - - -        addss  8(%rsi,%rax,4),%xmm11        addss  8(%rsi,%rbx,4),%xmm10        addss  8(%rsi,%rcx,4),%xmm9        addss  8(%rsi,%rdx,4),%xmm8        movss  %xmm11,8(%rsi,%rax,4)        movss  %xmm10,8(%rsi,%rbx,4)        movss  %xmm9,8(%rsi,%rcx,4)        movss  %xmm8,8(%rsi,%rdx,4)        ## should we do one more iteration?         subl $4,nb130_innerk(%rsp)        jl    _nb_kernel130_x86_64_sse.nb130_finish_inner        jmp   _nb_kernel130_x86_64_sse.nb130_unroll_loop_nb_kernel130_x86_64_sse.nb130_finish_inner:         ## check if at least two particles remain         addl $4,nb130_innerk(%rsp)        movl  nb130_innerk(%rsp),%edx        andl  $2,%edx        jnz   _nb_kernel130_x86_64_sse.nb130_dopair        jmp   _nb_kernel130_x86_64_sse.nb130_checksingle_nb_kernel130_x86_64_sse.nb130_dopair:     movq  nb130_innerjjnr(%rsp),%rcx        movl  (%rcx),%eax        movl  4(%rcx),%ebx        addq $8,nb130_innerjjnr(%rsp)        movq nb130_charge(%rbp),%rsi        movss (%rsi,%rax,4),%xmm0        movss (%rsi,%rbx,4),%xmm2    unpcklps %xmm2,%xmm0 ## jqa jqb         mulps nb130_iq(%rsp),%xmm0    movaps %xmm0,nb130_qq(%rsp)        movq nb130_type(%rbp),%rsi    ## vdw parameters        movl (%rsi,%rax,4),%r12d        movl (%rsi,%rbx,4),%r13d        shll %r12d        shll %r13d    movl nb130_ntia(%rsp),%edi        addl %edi,%r12d        addl %edi,%r13d        movq nb130_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,nb130_c6(%rsp)    movaps %xmm3,nb130_c12(%rsp)        lea  (%rax,%rax,2),%rax     ## replace jnr with j3         lea  (%rbx,%rbx,2),%rbx        ## load coordinates        movq nb130_pos(%rbp),%rdi        movlps (%rdi,%rax,4),%xmm1      ## x1 y1 - -         movlps (%rdi,%rbx,4),%xmm2      ## x2 y2 - -         movss 8(%rdi,%rax,4),%xmm5      ## z1 - - -         movss 8(%rdi,%rbx,4),%xmm6      ## z2 - - -     unpcklps %xmm2,%xmm1 ## x1 x2 y1 y2    movhlps  %xmm1,%xmm2 ## y1 y2 -  -    unpcklps %xmm6,%xmm5 ## z1 z2 -  -        ## calc dr          subps nb130_ix(%rsp),%xmm1        subps nb130_iy(%rsp),%xmm2        subps nb130_iz(%rsp),%xmm5        ## store dr    movaps %xmm1,nb130_dx(%rsp)    movaps %xmm2,nb130_dy(%rsp)    movaps %xmm5,nb130_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 nb130_three(%rsp),%xmm4        mulps %xmm1,%xmm5       ## rsq*lu*lu        subps %xmm5,%xmm4   ## 30-rsq*lu*lu         mulps %xmm2,%xmm4        mulps nb130_half(%rsp),%xmm4        movaps %xmm4,%xmm2        mulps  %xmm4,%xmm1    ## xmm2=rinv    ## xmm1=r    mulps nb130_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 nb130_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    movaps  %xmm2,%xmm0            ## rinv    mulps   nb130_qq(%rsp),%xmm2   ## vcoul=rinv*qq    movaps  %xmm2,%xmm3            ## copy of vcoul (to calc fscal)    mulps   %xmm0,%xmm3            ## vcoul*rinv    unpcklps %xmm7,%xmm6    movhlps  %xmm6,%xmm7    movlps 16(%rsi,%r8,4),%xmm8        movlps 16(%rsi,%r9,4),%xmm9    unpcklps %xmm9,%xmm8    movhlps  %xmm8,%xmm9    addps   nb130_vctot(%rsp),%xmm2    movlps  %xmm2,nb130_vctot(%rsp)    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 nb130_c6(%rsp),%xmm12    movaps nb130_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    addps  nb130_Vvdwtot(%rsp),%xmm5    movlps %xmm5,nb130_Vvdwtot(%rsp)    mulps  %xmm12,%xmm7  ## FF*c6 = fnb6    mulps  %xmm13,%xmm11  ## FF*c12  = fnb12    addps  %xmm11,%xmm7    mulps  nb130_tsc(%rsp),%xmm7    subps  %xmm7,%xmm3    mulps  %xmm0,%xmm3  ## fscal    movaps %xmm3,%xmm9    movaps %xmm3,%xmm10    movaps %xmm3,%xmm11    xorps  %xmm8,%xmm8    movaps nb130_fix(%rsp),%xmm12    movaps nb130_fiy(%rsp),%xmm13    movaps nb130_fiz(%rsp),%xmm14    mulps  nb130_dx(%rsp),%xmm9    mulps  nb130_dy(%rsp),%xmm10    mulps  nb130_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,nb130_fix(%rsp)    movaps %xmm13,nb130_fiy(%rsp)    movaps %xmm14,nb130_fiz(%rsp)        movq nb130_faction(%rbp),%rsi        ## the fj's - start by accumulating x & y forces from memory         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_kernel130_x86_64_sse.nb130_checksingle:             movl  nb130_innerk(%rsp),%edx        andl  $1,%edx        jnz    _nb_kernel130_x86_64_sse.nb130_dosingle        jmp    _nb_kernel130_x86_64_sse.nb130_updateouterdata_nb_kernel130_x86_64_sse.nb130_dosingle:         movq nb130_pos(%rbp),%rdi        movq  nb130_innerjjnr(%rsp),%rcx        movl  (%rcx),%eax        movq nb130_charge(%rbp),%rsi        movss (%rsi,%rax,4),%xmm0        mulss nb130_iq(%rsp),%xmm0    movaps %xmm0,nb130_qq(%rsp)        movq nb130_type(%rbp),%rsi    ## vdw parameters        movl (%rsi,%rax,4),%r12d        shll %r12d    movl nb130_ntia(%rsp),%edi        addl %edi,%r12d        movq nb130_vdwparam(%rbp),%rsi        movss (%rsi,%r12,4),%xmm0        movss 4(%rsi,%r12,4),%xmm3    movaps %xmm0,nb130_c6(%rsp)    movaps %xmm3,nb130_c12(%rsp)        lea  (%rax,%rax,2),%rax     ## replace jnr with j3         movq nb130_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 nb130_ix(%rsp),%xmm1        subss nb130_iy(%rsp),%xmm2        subss nb130_iz(%rsp),%xmm5        ## store dr    movaps %xmm1,nb130_dx(%rsp)    movaps %xmm2,nb130_dy(%rsp)    movaps %xmm5,nb130_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 nb130_three(%rsp),%xmm4        mulss %xmm1,%xmm5       ## rsq*lu*lu        subss %xmm5,%xmm4   ## 30-rsq*lu*lu         mulss %xmm2,%xmm4        mulss nb130_half(%rsp),%xmm4        movaps %xmm4,%xmm2        mulss  %xmm4,%xmm1    ## xmm2=rinv    ## xmm1=r    mulss nb130_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 nb130_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    ## coulomb interaction    movaps  %xmm2,%xmm0            ## rinv    mulss   nb130_qq(%rsp),%xmm2   ## vcoul=rinv*qq    movaps  %xmm2,%xmm3            ## copy of vcoul (to calc fscal)    mulss   %xmm0,%xmm3            ## vcoul*rinv    addss   nb130_vctot(%rsp),%xmm2    movss   %xmm2,nb130_vctot(%rsp)    ## calculate table interaction    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 nb130_c6(%rsp),%xmm12    movaps nb130_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  nb130_Vvdwtot(%rsp),%xmm5    movss  %xmm5,nb130_Vvdwtot(%rsp)    mulss  %xmm12,%xmm7  ## FF*c6 = fnb6    mulss  %xmm13,%xmm11  ## FF*c12  = fnb12    addss  %xmm11,%xmm7    mulss  nb130_tsc(%rsp),%xmm7    subss  %xmm7,%xmm3    mulss  %xmm0,%xmm3  ## fscal    movaps %xmm3,%xmm9    movaps %xmm3,%xmm10    movaps %xmm3,%xmm11    movaps nb130_fix(%rsp),%xmm12    movaps nb130_fiy(%rsp),%xmm13    movaps nb130_fiz(%rsp),%xmm14    mulss  nb130_dx(%rsp),%xmm9    mulss  nb130_dy(%rsp),%xmm10    mulss  nb130_dz(%rsp),%xmm11    ## accumulate i forces    addss %xmm9,%xmm12    addss %xmm10,%xmm13    addss %xmm11,%xmm14    movaps %xmm12,nb130_fix(%rsp)    movaps %xmm13,nb130_fiy(%rsp)    movaps %xmm14,nb130_fiz(%rsp)        movq nb130_faction(%rbp),%rsi    ## add to j forces    addss  (%rsi,%rax,4),%xmm9    addss  4(%rsi,%rax,4),%xmm10    addss  8(%rsi,%rax,4),%xmm11    movss  %xmm9,(%rsi,%rax,4)    movss  %xmm10,4(%rsi,%rax,4)    movss  %xmm11,8(%rsi,%rax,4)_nb_kernel130_x86_64_sse.nb130_updateouterdata:         movl  nb130_ii3(%rsp),%ecx        movq  nb130_faction(%rbp),%rdi        movq  nb130_fshift(%rbp),%rsi        movl  nb130_is3(%rsp),%edx        ## accumulate i forces in xmm0, xmm1, xmm2         movaps nb130_fix(%rsp),%xmm0        movaps nb130_fiy(%rsp),%xmm1

⌨️ 快捷键说明

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