nb_kernel313_x86_64_sse2.s

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

S
2,129
字号
        movlpd 8(%rsi,%rax,8),%xmm5        movlpd 16(%rsi,%rax,8),%xmm6    movapd %xmm4,%xmm0    movapd %xmm5,%xmm1    movapd %xmm6,%xmm2        ## calc dr         subsd nb313_ixO(%rsp),%xmm4        subsd nb313_iyO(%rsp),%xmm5        subsd nb313_izO(%rsp),%xmm6        ## store dr         movapd %xmm4,nb313_dxO(%rsp)        movapd %xmm5,nb313_dyO(%rsp)        movapd %xmm6,nb313_dzO(%rsp)        ## square it         mulsd %xmm4,%xmm4        mulsd %xmm5,%xmm5        mulsd %xmm6,%xmm6        addsd %xmm5,%xmm4        addsd %xmm6,%xmm4        movapd %xmm4,%xmm7        ## rsqO in xmm7         ## move j coords to xmm4-xmm6         movapd %xmm0,%xmm4        movapd %xmm1,%xmm5        movapd %xmm2,%xmm6        ## calc dr         subsd nb313_ixH1(%rsp),%xmm4        subsd nb313_iyH1(%rsp),%xmm5        subsd nb313_izH1(%rsp),%xmm6        ## store dr         movapd %xmm4,nb313_dxH1(%rsp)        movapd %xmm5,nb313_dyH1(%rsp)        movapd %xmm6,nb313_dzH1(%rsp)        ## square it         mulsd %xmm4,%xmm4        mulsd %xmm5,%xmm5        mulsd %xmm6,%xmm6        addsd %xmm5,%xmm6        addsd %xmm4,%xmm6        ## rsqH1 in xmm6         ## move j coords to xmm3-xmm5         movapd %xmm0,%xmm3        movapd %xmm1,%xmm4        movapd %xmm2,%xmm5        ## calc dr         subsd nb313_ixH2(%rsp),%xmm3        subsd nb313_iyH2(%rsp),%xmm4        subsd nb313_izH2(%rsp),%xmm5        ## store dr         movapd %xmm3,nb313_dxH2(%rsp)        movapd %xmm4,nb313_dyH2(%rsp)        movapd %xmm5,nb313_dzH2(%rsp)        ## square it         mulsd %xmm3,%xmm3        mulsd %xmm4,%xmm4        mulsd %xmm5,%xmm5        addsd %xmm4,%xmm5        addsd %xmm3,%xmm5        ## move j coords to xmm4-xmm2        movapd %xmm0,%xmm4        movapd %xmm1,%xmm3    ## xmm2 already contains z        ## calc dr         subsd nb313_ixM(%rsp),%xmm4        subsd nb313_iyM(%rsp),%xmm3        subsd nb313_izM(%rsp),%xmm2        ## store dr         movapd %xmm4,nb313_dxM(%rsp)        movapd %xmm3,nb313_dyM(%rsp)        movapd %xmm2,nb313_dzM(%rsp)        ## square it         mulpd %xmm2,%xmm2        mulpd %xmm3,%xmm3        mulpd %xmm4,%xmm4        addpd %xmm3,%xmm4        addpd %xmm2,%xmm4        ## rsqM in xmm4, rsqH2 in xmm5, rsqH1 in xmm6, rsqO in xmm7         ## 1/x for O - rsqO is in xmm7        cvtsd2ss %xmm7,%xmm2        movsd   %xmm7,%xmm3        rcpps    %xmm2,%xmm2        cvtss2sd %xmm2,%xmm2        movsd   nb313_two(%rsp),%xmm1        movsd   %xmm1,%xmm0        mulsd   %xmm2,%xmm7        subsd   %xmm7,%xmm1        mulsd   %xmm1,%xmm2 ## iter1         mulsd   %xmm2,%xmm3        subsd   %xmm3,%xmm0        mulsd   %xmm2,%xmm0 ## xmm0=rinvsq        movsd  %xmm0,nb313_rinvsqO(%rsp)        ## rsqH1 - seed in xmm2         cvtsd2ss %xmm6,%xmm2        rsqrtss %xmm2,%xmm2        cvtss2sd %xmm2,%xmm2        movapd  %xmm2,%xmm3        mulsd   %xmm2,%xmm2        movapd  nb313_three(%rsp),%xmm0        mulsd   %xmm6,%xmm2     ## rsq*lu*lu         subsd   %xmm2,%xmm0     ## 30-rsq*lu*lu         mulsd   %xmm3,%xmm0     ## lu*(3-rsq*lu*lu)         mulsd   nb313_half(%rsp),%xmm0   ## iter1 ( new lu)         movapd %xmm6,%xmm2        movapd %xmm0,%xmm3        mulsd %xmm0,%xmm0       ## lu*lu         mulsd %xmm0,%xmm2       ## rsq*lu*lu         movapd nb313_three(%rsp),%xmm0        subsd %xmm2,%xmm0       ## 3-rsq*lu*lu         mulsd %xmm3,%xmm0       ## lu*( 3-rsq*lu*lu)         mulsd nb313_half(%rsp),%xmm0   ## rinv         movapd %xmm0,nb313_rinvH1(%rsp)         ## rinvH1         mulsd  %xmm0,%xmm6        movapd %xmm6,nb313_rH1(%rsp)    ## rH1         ## rsqH2 - seed in xmm2         cvtsd2ss %xmm5,%xmm2        rsqrtss %xmm2,%xmm2        cvtss2sd %xmm2,%xmm2        movapd  %xmm2,%xmm3        mulsd   %xmm2,%xmm2        movapd  nb313_three(%rsp),%xmm0        mulsd   %xmm5,%xmm2     ## rsq*lu*lu         subsd   %xmm2,%xmm0     ## 30-rsq*lu*lu         mulsd   %xmm3,%xmm0     ## lu*(3-rsq*lu*lu)         mulsd   nb313_half(%rsp),%xmm0   ## iter1 ( new lu)         movapd %xmm5,%xmm2        movapd %xmm0,%xmm3        mulsd %xmm0,%xmm0       ## lu*lu         mulsd %xmm0,%xmm2       ## rsq*lu*lu         movapd nb313_three(%rsp),%xmm0        subsd %xmm2,%xmm0       ## 3-rsq*lu*lu         mulsd %xmm3,%xmm0       ## lu*( 3-rsq*lu*lu)         mulsd nb313_half(%rsp),%xmm0   ## rinv         movapd %xmm0,nb313_rinvH2(%rsp)   ## rinv         mulsd %xmm0,%xmm5        movapd %xmm5,nb313_rH2(%rsp)   ## r         ## rsqM - seed in xmm2         cvtsd2ss %xmm4,%xmm2        rsqrtss %xmm2,%xmm2        cvtss2sd %xmm2,%xmm2        movapd  %xmm2,%xmm3        mulsd   %xmm2,%xmm2        movapd  nb313_three(%rsp),%xmm0        mulsd   %xmm4,%xmm2     ## rsq*lu*lu         subsd   %xmm2,%xmm0     ## 30-rsq*lu*lu         mulsd   %xmm3,%xmm0     ## lu*(3-rsq*lu*lu)         mulsd   nb313_half(%rsp),%xmm0   ## iter1 ( new lu)         movapd %xmm4,%xmm2        movapd %xmm0,%xmm3        mulsd %xmm0,%xmm0       ## lu*lu         mulsd %xmm0,%xmm2       ## rsq*lu*lu         movapd nb313_three(%rsp),%xmm0        subsd %xmm2,%xmm0       ## 3-rsq*lu*lu         mulsd %xmm3,%xmm0       ## lu*( 3-rsq*lu*lu)         mulsd nb313_half(%rsp),%xmm0   ## rinv         movapd %xmm0,nb313_rinvM(%rsp)   ## rinv         mulsd %xmm0,%xmm4        movapd %xmm4,nb313_rM(%rsp)   ## r         ## do O interactions         movapd  nb313_rinvsqO(%rsp),%xmm0        movapd  %xmm0,%xmm1        mulsd   %xmm1,%xmm1 ## rinv4        mulsd   %xmm0,%xmm1 ##rinvsix        movapd  %xmm1,%xmm2        mulsd   %xmm2,%xmm2 ## rinvtwelve        mulsd  nb313_c6(%rsp),%xmm1        mulsd  nb313_c12(%rsp),%xmm2        movapd %xmm2,%xmm3        subsd  %xmm1,%xmm3      ## Vvdw=Vvdw12-Vvdw6                    addsd  nb313_Vvdwtot(%rsp),%xmm3        mulsd  nb313_six(%rsp),%xmm1        mulsd  nb313_twelve(%rsp),%xmm2        subsd  %xmm1,%xmm2        mulsd  %xmm0,%xmm2        movapd %xmm2,%xmm4 ## total fsO         movsd %xmm3,nb313_Vvdwtot(%rsp)        movapd nb313_dxO(%rsp),%xmm0        movapd nb313_dyO(%rsp),%xmm1        movapd nb313_dzO(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## tx in xmm0-xmm2         ## update O forces         movapd nb313_fixO(%rsp),%xmm3        movapd nb313_fiyO(%rsp),%xmm4        movapd nb313_fizO(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb313_fixO(%rsp)        movlpd %xmm4,nb313_fiyO(%rsp)        movlpd %xmm7,nb313_fizO(%rsp)        ## update j forces with water O         movlpd %xmm0,nb313_fjx(%rsp)        movlpd %xmm1,nb313_fjy(%rsp)        movlpd %xmm2,nb313_fjz(%rsp)        ## Done with O interactions - now H1!         movapd nb313_rH1(%rsp),%xmm7        mulpd nb313_tsc(%rsp),%xmm7        cvttsd2si %xmm7,%r8d    ## mm6 = lu idx         cvtsi2sd %r8d,%xmm6        subpd %xmm6,%xmm7        movapd %xmm7,%xmm1      ## xmm1=eps         movapd %xmm1,%xmm2        mulpd  %xmm2,%xmm2      ## xmm2=eps2         shll $2,%r8d            ## idx *= 4         movq nb313_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  nb313_two(%rsp),%xmm7    ## two*Heps2         movapd nb313_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  nb313_vctot(%rsp),%xmm5        mulsd  nb313_rinvH1(%rsp),%xmm3    movlpd %xmm5,nb313_vctot(%rsp)        mulsd  nb313_tsc(%rsp),%xmm3        subsd %xmm3,%xmm4        movapd nb313_dxH1(%rsp),%xmm0        movapd nb313_dyH1(%rsp),%xmm1        movapd nb313_dzH1(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## update H1 forces         movapd nb313_fixH1(%rsp),%xmm3        movapd nb313_fiyH1(%rsp),%xmm4        movapd nb313_fizH1(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb313_fixH1(%rsp)        movlpd %xmm4,nb313_fiyH1(%rsp)        movlpd %xmm7,nb313_fizH1(%rsp)        ## update j forces with water H1         addsd  nb313_fjx(%rsp),%xmm0        addsd  nb313_fjy(%rsp),%xmm1        addsd  nb313_fjz(%rsp),%xmm2        movlpd %xmm0,nb313_fjx(%rsp)        movlpd %xmm1,nb313_fjy(%rsp)        movlpd %xmm2,nb313_fjz(%rsp)        ##  H2 interactions         movapd nb313_rH2(%rsp),%xmm7        mulsd   nb313_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 nb313_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  nb313_two(%rsp),%xmm7    ## two*Heps2         movapd nb313_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  nb313_vctot(%rsp),%xmm5        mulsd  nb313_rinvH2(%rsp),%xmm3        movlpd %xmm5,nb313_vctot(%rsp)        mulsd  nb313_tsc(%rsp),%xmm3        subsd  %xmm3,%xmm4        movapd nb313_dxH2(%rsp),%xmm0        movapd nb313_dyH2(%rsp),%xmm1        movapd nb313_dzH2(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## update H2 forces         movapd nb313_fixH2(%rsp),%xmm3        movapd nb313_fiyH2(%rsp),%xmm4        movapd nb313_fizH2(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb313_fixH2(%rsp)        movlpd %xmm4,nb313_fiyH2(%rsp)        movlpd %xmm7,nb313_fizH2(%rsp)        ## update j forces with water H1         addsd  nb313_fjx(%rsp),%xmm0        addsd  nb313_fjy(%rsp),%xmm1        addsd  nb313_fjz(%rsp),%xmm2        movlpd %xmm0,nb313_fjx(%rsp)        movlpd %xmm1,nb313_fjy(%rsp)        movlpd %xmm2,nb313_fjz(%rsp)        ## M interactions         movapd nb313_rM(%rsp),%xmm7        mulsd   nb313_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 nb313_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  nb313_two(%rsp),%xmm7    ## two*Heps2         movapd nb313_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         xorpd  %xmm4,%xmm4        addsd  nb313_vctot(%rsp),%xmm5        mulsd  nb313_rinvM(%rsp),%xmm3        movlpd %xmm5,nb313_vctot(%rsp)        mulsd  nb313_tsc(%rsp),%xmm3        subsd  %xmm3,%xmm4        movapd nb313_dxM(%rsp),%xmm0        movapd nb313_dyM(%rsp),%xmm1        movapd nb313_dzM(%rsp),%xmm2        mulsd  %xmm4,%xmm0        mulsd  %xmm4,%xmm1        mulsd  %xmm4,%xmm2        ## update M forces         movapd nb313_fixM(%rsp),%xmm3        movapd nb313_fiyM(%rsp),%xmm4        movapd nb313_fizM(%rsp),%xmm7        addsd  %xmm0,%xmm3        addsd  %xmm1,%xmm4        addsd  %xmm2,%xmm7        movlpd %xmm3,nb313_fixM(%rsp)        movlpd %xmm4,nb313_fiyM(%rsp)

⌨️ 快捷键说明

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