nb_kernel303_x86_64_sse2.s

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

S
2,073
字号
        mulsd   nb303_tsc(%rsp),%xmm7        cvttsd2si %xmm7,%r8d    ## mm6 = lu idx         cvtsi2sd %r8d,%xmm6        subsd %xmm6,%xmm7        movapd %xmm7,%xmm1      ## xmm1=eps         movapd %xmm1,%xmm2        mulsd  %xmm2,%xmm2      ## xmm2=eps2         shll $2,%r8d            ## idx *= 4         movq nb303_VFtab(%rbp),%rsi        movapd (%rsi,%r8,8),%xmm4       ## Y1 F1         xorpd %xmm3,%xmm3        movapd %xmm4,%xmm5        unpcklpd %xmm3,%xmm4    ## Y1         unpckhpd %xmm3,%xmm5    ## F1          movapd 16(%rsi,%r8,8),%xmm6     ## G1 H1         xorpd %xmm3,%xmm3        movapd %xmm6,%xmm7        unpcklpd %xmm3,%xmm6    ## G1         unpckhpd %xmm3,%xmm7    ## H1         ## coulomb table ready, in xmm4-xmm7                    mulsd  %xmm1,%xmm6      ## xmm6=Geps         mulsd  %xmm2,%xmm7      ## xmm7=Heps2         addsd  %xmm6,%xmm5        addsd  %xmm7,%xmm5      ## xmm5=Fp              mulsd  nb303_two(%rsp),%xmm7    ## two*Heps2         movapd nb303_qqM(%rsp),%xmm3        addsd  %xmm6,%xmm7        addsd  %xmm5,%xmm7 ## xmm7=FF         mulsd  %xmm1,%xmm5 ## xmm5=eps*Fp         addsd  %xmm4,%xmm5 ## xmm5=VV         mulsd  %xmm3,%xmm5 ## vcoul=qq*VV          mulsd  %xmm7,%xmm3 ## fijC=FF*qq     ## at this point mm5 contains vcoul and xmm3 fijC     ## increment vcoul - then we can get rid of mm5     addsd  nb303_vctot(%rsp),%xmm5    movlpd %xmm5,nb303_vctot(%rsp)        xorpd  %xmm4,%xmm4        mulsd  nb303_tsc(%rsp),%xmm3        mulsd  nb303_rinvM(%rsp),%xmm3        subsd  %xmm3,%xmm4        movapd nb303_dxM(%rsp),%xmm0        movapd nb303_dyM(%rsp),%xmm1        movapd nb303_dzM(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2      ## tx in xmm0-xmm2         ## update M forces         movapd nb303_fixM(%rsp),%xmm3        movapd nb303_fiyM(%rsp),%xmm4        movapd nb303_fizM(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb303_fixM(%rsp)        movlpd %xmm4,nb303_fiyM(%rsp)        movlpd %xmm7,nb303_fizM(%rsp)        ## update j forces with water M         movlpd %xmm0,nb303_fjx(%rsp)        movlpd %xmm1,nb303_fjy(%rsp)        movlpd %xmm2,nb303_fjz(%rsp)        ## Done with M interactions - now H1!         movapd nb303_rH1(%rsp),%xmm7        mulsd nb303_tsc(%rsp),%xmm7        cvttsd2si %xmm7,%r8d    ## mm6 = lu idx         cvtsi2sd %r8d,%xmm6        subsd %xmm6,%xmm7        movapd %xmm7,%xmm1      ## xmm1=eps         movapd %xmm1,%xmm2        mulsd  %xmm2,%xmm2      ## xmm2=eps2         shll $2,%r8d            ## idx *= 4         movq nb303_VFtab(%rbp),%rsi        movapd (%rsi,%r8,8),%xmm4       ## Y1 F1         xorpd %xmm3,%xmm3        movapd %xmm4,%xmm5        unpcklpd %xmm3,%xmm4    ## Y1          unpckhpd %xmm3,%xmm5    ## F1          movapd 16(%rsi,%r8,8),%xmm6     ## G1 H1         xorpd %xmm3,%xmm3        movapd %xmm6,%xmm7        unpcklpd %xmm3,%xmm6    ## G1         unpckhpd %xmm3,%xmm7    ## H1         ## coulomb table ready, in xmm4-xmm7                    mulsd  %xmm1,%xmm6      ## xmm6=Geps         mulsd  %xmm2,%xmm7      ## xmm7=Heps2         addsd  %xmm6,%xmm5        addsd  %xmm7,%xmm5      ## xmm5=Fp              mulsd  nb303_two(%rsp),%xmm7    ## two*Heps2         movapd nb303_qqH(%rsp),%xmm3        addsd  %xmm6,%xmm7        addsd  %xmm5,%xmm7 ## xmm7=FF         mulsd  %xmm1,%xmm5 ## xmm5=eps*Fp         addsd  %xmm4,%xmm5 ## xmm5=VV         mulsd  %xmm3,%xmm5 ## vcoul=qq*VV          mulsd  %xmm7,%xmm3 ## fijC=FF*qq     ## at this point mm5 contains vcoul and xmm3 fijC     ## increment vcoul         xorpd  %xmm4,%xmm4    addsd  nb303_vctot(%rsp),%xmm5        mulsd  nb303_rinvH1(%rsp),%xmm3    movlpd %xmm5,nb303_vctot(%rsp)        mulsd  nb303_tsc(%rsp),%xmm3        subsd %xmm3,%xmm4        movapd nb303_dxH1(%rsp),%xmm0        movapd nb303_dyH1(%rsp),%xmm1        movapd nb303_dzH1(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## update H1 forces         movapd nb303_fixH1(%rsp),%xmm3        movapd nb303_fiyH1(%rsp),%xmm4        movapd nb303_fizH1(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb303_fixH1(%rsp)        movlpd %xmm4,nb303_fiyH1(%rsp)        movlpd %xmm7,nb303_fizH1(%rsp)        ## update j forces with water H1         addsd  nb303_fjx(%rsp),%xmm0        addsd  nb303_fjy(%rsp),%xmm1        addsd  nb303_fjz(%rsp),%xmm2        movlpd %xmm0,nb303_fjx(%rsp)        movlpd %xmm1,nb303_fjy(%rsp)        movlpd %xmm2,nb303_fjz(%rsp)        ## Done with H1, finally we do H2 interactions         movapd nb303_rH2(%rsp),%xmm7        mulsd   nb303_tsc(%rsp),%xmm7        cvttsd2si %xmm7,%r8d    ## mm6 = lu idx         cvtsi2sd %r8d,%xmm6        subsd %xmm6,%xmm7        movapd %xmm7,%xmm1      ## xmm1=eps         movapd %xmm1,%xmm2        mulsd  %xmm2,%xmm2      ## xmm2=eps2         shll $2,%r8d            ## idx *= 4         movq nb303_VFtab(%rbp),%rsi        movapd (%rsi,%r8,8),%xmm4       ## Y1 F1         xorpd %xmm3,%xmm3        movapd %xmm4,%xmm5        unpcklpd %xmm3,%xmm4    ## Y1         unpckhpd %xmm3,%xmm5    ## F1         movapd 16(%rsi,%r8,8),%xmm6     ## G1 H1         xorpd %xmm3,%xmm3        movapd %xmm6,%xmm7        unpcklpd %xmm3,%xmm6    ## G1         unpckhpd %xmm3,%xmm7    ## H1         ## coulomb table ready, in xmm4-xmm7                    mulsd  %xmm1,%xmm6      ## xmm6=Geps         mulsd  %xmm2,%xmm7      ## xmm7=Heps2         addsd  %xmm6,%xmm5        addsd  %xmm7,%xmm5      ## xmm5=Fp              mulsd  nb303_two(%rsp),%xmm7    ## two*Heps2         movapd nb303_qqH(%rsp),%xmm3        addsd  %xmm6,%xmm7        addsd  %xmm5,%xmm7 ## xmm7=FF         mulsd  %xmm1,%xmm5 ## xmm5=eps*Fp         addsd  %xmm4,%xmm5 ## xmm5=VV         mulsd  %xmm3,%xmm5 ## vcoul=qq*VV          mulsd  %xmm7,%xmm3 ## fijC=FF*qq     ## at this point mm5 contains vcoul and xmm3 fijC     ## increment vcoul         xorpd  %xmm4,%xmm4    addsd  nb303_vctot(%rsp),%xmm5        mulsd  nb303_rinvH2(%rsp),%xmm3    movlpd %xmm5,nb303_vctot(%rsp)        mulsd  nb303_tsc(%rsp),%xmm3        subsd  %xmm3,%xmm4        movapd nb303_dxH2(%rsp),%xmm0        movapd nb303_dyH2(%rsp),%xmm1        movapd nb303_dzH2(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## update H2 forces         movapd nb303_fixH2(%rsp),%xmm3        movapd nb303_fiyH2(%rsp),%xmm4        movapd nb303_fizH2(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb303_fixH2(%rsp)        movlpd %xmm4,nb303_fiyH2(%rsp)        movlpd %xmm7,nb303_fizH2(%rsp)        movq nb303_faction(%rbp),%rdi        ## update j forces         ## update j forces with water H1         addsd  nb303_fjx(%rsp),%xmm0        addsd  nb303_fjy(%rsp),%xmm1        addsd  nb303_fjz(%rsp),%xmm2        ## the fj's - start by accumulating forces from memory         movlpd (%rdi,%rax,8),%xmm3        movlpd 8(%rdi,%rax,8),%xmm4        movlpd 16(%rdi,%rax,8),%xmm5        addsd %xmm0,%xmm3        addsd %xmm1,%xmm4        addsd %xmm2,%xmm5        movlpd %xmm3,(%rdi,%rax,8)        movlpd %xmm4,8(%rdi,%rax,8)        movlpd %xmm5,16(%rdi,%rax,8)_nb_kernel303_x86_64_sse2.nb303_updateouterdata:         movl  nb303_ii3(%rsp),%ecx        movq  nb303_faction(%rbp),%rdi        movq  nb303_fshift(%rbp),%rsi        movl  nb303_is3(%rsp),%edx        ## accumulate H1i forces in xmm0, xmm1, xmm2         movapd nb303_fixH1(%rsp),%xmm0        movapd nb303_fiyH1(%rsp),%xmm1        movapd nb303_fizH1(%rsp),%xmm2        movhlps %xmm0,%xmm3        movhlps %xmm1,%xmm4        movhlps %xmm2,%xmm5        addsd  %xmm3,%xmm0        addsd  %xmm4,%xmm1        addsd  %xmm5,%xmm2 ## sum is in low xmm0-xmm2         ## increment i force         movsd  24(%rdi,%rcx,8),%xmm3        movsd  32(%rdi,%rcx,8),%xmm4        movsd  40(%rdi,%rcx,8),%xmm5        subsd  %xmm0,%xmm3        subsd  %xmm1,%xmm4        subsd  %xmm2,%xmm5        movsd  %xmm3,24(%rdi,%rcx,8)        movsd  %xmm4,32(%rdi,%rcx,8)        movsd  %xmm5,40(%rdi,%rcx,8)        ## accumulate force in xmm6/xmm7 for fshift         movapd %xmm0,%xmm6        movsd %xmm2,%xmm7        unpcklpd %xmm1,%xmm6        ## accumulate H2i forces in xmm0, xmm1, xmm2         movapd nb303_fixH2(%rsp),%xmm0        movapd nb303_fiyH2(%rsp),%xmm1        movapd nb303_fizH2(%rsp),%xmm2        movhlps %xmm0,%xmm3        movhlps %xmm1,%xmm4        movhlps %xmm2,%xmm5        addsd  %xmm3,%xmm0        addsd  %xmm4,%xmm1        addsd  %xmm5,%xmm2 ## sum is in low xmm0-xmm2         ## increment i force         movsd  48(%rdi,%rcx,8),%xmm3        movsd  56(%rdi,%rcx,8),%xmm4        movsd  64(%rdi,%rcx,8),%xmm5        subsd  %xmm0,%xmm3        subsd  %xmm1,%xmm4        subsd  %xmm2,%xmm5        movsd  %xmm3,48(%rdi,%rcx,8)        movsd  %xmm4,56(%rdi,%rcx,8)        movsd  %xmm5,64(%rdi,%rcx,8)        ## accumulate force in xmm6/xmm7 for fshift         addsd %xmm2,%xmm7        unpcklpd %xmm1,%xmm0        addpd %xmm0,%xmm6        ## accumulate H2i forces in xmm0, xmm1, xmm2         movapd nb303_fixM(%rsp),%xmm0        movapd nb303_fiyM(%rsp),%xmm1        movapd nb303_fizM(%rsp),%xmm2        movhlps %xmm0,%xmm3        movhlps %xmm1,%xmm4        movhlps %xmm2,%xmm5        addsd  %xmm3,%xmm0        addsd  %xmm4,%xmm1        addsd  %xmm5,%xmm2 ## sum is in low xmm0-xmm2         movapd %xmm0,%xmm3        movapd %xmm1,%xmm4        movapd %xmm2,%xmm5        ## increment i force         movsd  72(%rdi,%rcx,8),%xmm3        movsd  80(%rdi,%rcx,8),%xmm4        movsd  88(%rdi,%rcx,8),%xmm5        subsd  %xmm0,%xmm3        subsd  %xmm1,%xmm4        subsd  %xmm2,%xmm5        movsd  %xmm3,72(%rdi,%rcx,8)        movsd  %xmm4,80(%rdi,%rcx,8)        movsd  %xmm5,88(%rdi,%rcx,8)        ## accumulate force in xmm6/xmm7 for fshift         addsd %xmm2,%xmm7        unpcklpd %xmm1,%xmm0        addpd %xmm0,%xmm6        ## increment fshift force         movlpd (%rsi,%rdx,8),%xmm3        movhpd 8(%rsi,%rdx,8),%xmm3        movsd  16(%rsi,%rdx,8),%xmm4        subpd  %xmm6,%xmm3        subsd  %xmm7,%xmm4        movlpd %xmm3,(%rsi,%rdx,8)        movhpd %xmm3,8(%rsi,%rdx,8)        movsd  %xmm4,16(%rsi,%rdx,8)        ## get n from stack        movl nb303_n(%rsp),%esi        ## get group index for i particle         movq  nb303_gid(%rbp),%rdx              ## base of gid[]        movl  (%rdx,%rsi,4),%edx                ## ggid=gid[n]        ## accumulate total potential energy and update it         movapd nb303_vctot(%rsp),%xmm7        ## accumulate         movhlps %xmm7,%xmm6        addsd  %xmm6,%xmm7      ## low xmm7 has the sum now         ## add earlier value from mem         movq  nb303_Vc(%rbp),%rax        addsd (%rax,%rdx,8),%xmm7        ## move back to mem         movsd %xmm7,(%rax,%rdx,8)        ## finish if last         movl nb303_nn1(%rsp),%ecx        ## esi already loaded with n        incl %esi        subl %esi,%ecx        jz _nb_kernel303_x86_64_sse2.nb303_outerend        ## not last, iterate outer loop once more!          movl %esi,nb303_n(%rsp)        jmp _nb_kernel303_x86_64_sse2.nb303_outer_nb_kernel303_x86_64_sse2.nb303_outerend:         ## check if more outer neighborlists remain        movl  nb303_nri(%rsp),%ecx        ## esi already loaded with n above        subl  %esi,%ecx        jz _nb_kernel303_x86_64_sse2.nb303_end        ## non-zero, do one more workunit        jmp   _nb_kernel303_x86_64_sse2.nb303_threadloop_nb_kernel303_x86_64_sse2.nb303_end:         movl nb303_nouter(%rsp),%eax        movl nb303_ninner(%rsp),%ebx        movq nb303_outeriter(%rbp),%rcx        movq nb303_inneriter(%rbp),%rdx        movl %eax,(%rcx)        movl %ebx,(%rdx)        addq $824,%rsp        emms        pop %r15        pop %r14        pop %r13        pop %r12        pop %rbx        pop    %rbp        ret.globl nb_kernel303nf_x86_64_sse2.globl _nb_kernel303nf_x86_64_sse2nb_kernel303nf_x86_64_sse2:     _nb_kernel303nf_x86_64_sse2:    ##      Room for return address and rbp (16 bytes).set nb303nf_fshift, 16.set nb303nf_gid, 24.set nb303nf_pos, 32.set nb303nf_faction, 40.set nb303nf_charge, 48.set nb303nf_p_facel, 56.set nb303nf_argkrf, 64.set nb303nf_argcrf, 72.set nb303nf_Vc, 80.set nb303nf_type, 88.set nb303nf_p_ntype, 96.set nb303nf_vdwparam, 104.set nb303nf_Vvdw, 112.set nb303nf_p_tabscale, 120.set nb303nf_VFtab, 128.set nb303nf_invsqrta, 136.set nb303nf_dvda, 144.set nb303nf_p_gbtabscale, 152.set nb303nf_GBtab, 160.set nb303nf_p_nthreads, 168.set nb303nf_count, 176.set nb303nf_mtx, 184.set nb303nf_outeriter, 192.set nb303nf_inneriter, 200.set nb303nf_work, 208        ## stack offsets for local variables  

⌨️ 快捷键说明

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