nb_kernel314_ia32_sse.intel_syntax.s
来自「最著名最快的分子模拟软件」· S 代码 · 共 2,300 行 · 第 1/5 页
S
2,300 行
shufps xmm1, xmm4, 0xDD ;# Oya Oyb Oyc Oyd movlps xmm3, [esi + eax*4 + 8] ;# Oza H1xa - - movlps xmm5, [esi + ecx*4 + 8] ;# Ozc H1xc - - movhps xmm3, [esi + ebx*4 + 8] ;# Oza H1xa Ozb H1xb movhps xmm5, [esi + edx*4 + 8] ;# Ozc H1xc Ozd H1xd movaps xmm2, xmm3 ;# Oza H1xa Ozb H1xb shufps xmm2, xmm5, 0x88 ;# Oza Ozb Ozc Ozd shufps xmm3, xmm5, 0xDD ;# H1xa H1xb H1xc H1xd ;# coordinates in xmm0-xmm3 ;# store movaps [esp + nb314_jxO], xmm0 movaps [esp + nb314_jyO], xmm1 movaps [esp + nb314_jzO], xmm2 movaps [esp + nb314_jxH1], xmm3 ;# Load H1y H1z H2x H2y movlps xmm1, [esi + eax*4 + 16] movlps xmm4, [esi + ecx*4 + 16] movhps xmm1, [esi + ebx*4 + 16] movhps xmm4, [esi + edx*4 + 16] movaps xmm0, xmm1 shufps xmm0, xmm4, 0x88 shufps xmm1, xmm4, 0xDD movlps xmm3, [esi + eax*4 + 24] movlps xmm5, [esi + ecx*4 + 24] movhps xmm3, [esi + ebx*4 + 24] movhps xmm5, [esi + edx*4 + 24] movaps xmm2, xmm3 shufps xmm2, xmm5, 0x88 shufps xmm3, xmm5, 0xDD ;# coordinates in xmm0-xmm3 ;# store movaps [esp + nb314_jyH1], xmm0 movaps [esp + nb314_jzH1], xmm1 movaps [esp + nb314_jxH2], xmm2 movaps [esp + nb314_jyH2], xmm3 ;# Load H2z Mx My Mz movlps xmm1, [esi + eax*4 + 32] movlps xmm4, [esi + ecx*4 + 32] movhps xmm1, [esi + ebx*4 + 32] movhps xmm4, [esi + edx*4 + 32] movaps xmm0, xmm1 shufps xmm0, xmm4, 0x88 shufps xmm1, xmm4, 0xDD movlps xmm3, [esi + eax*4 + 40] movlps xmm5, [esi + ecx*4 + 40] movhps xmm3, [esi + ebx*4 + 40] movhps xmm5, [esi + edx*4 + 40] movaps xmm2, xmm3 shufps xmm2, xmm5, 0x88 shufps xmm3, xmm5, 0xDD ;# coordinates in xmm0-xmm3 ;# store movaps [esp + nb314_jzH2], xmm0 movaps [esp + nb314_jxM], xmm1 movaps [esp + nb314_jyM], xmm2 movaps [esp + nb314_jzM], xmm3 ;# start calculating pairwise distances movaps xmm0, [esp + nb314_ixO] movaps xmm1, [esp + nb314_iyO] movaps xmm2, [esp + nb314_izO] movaps xmm3, [esp + nb314_ixH1] movaps xmm4, [esp + nb314_iyH1] movaps xmm5, [esp + nb314_izH1] subps xmm0, [esp + nb314_jxO] subps xmm1, [esp + nb314_jyO] subps xmm2, [esp + nb314_jzO] subps xmm3, [esp + nb314_jxH1] subps xmm4, [esp + nb314_jyH1] subps xmm5, [esp + nb314_jzH1] movaps [esp + nb314_dxOO], xmm0 movaps [esp + nb314_dyOO], xmm1 movaps [esp + nb314_dzOO], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb314_dxH1H1], xmm3 movaps [esp + nb314_dyH1H1], xmm4 movaps [esp + nb314_dzH1H1], xmm5 mulps xmm3, xmm3 mulps xmm4, xmm4 mulps xmm5, xmm5 addps xmm0, xmm1 addps xmm0, xmm2 addps xmm3, xmm4 addps xmm3, xmm5 movaps [esp + nb314_rsqOO], xmm0 movaps [esp + nb314_rsqH1H1], xmm3 movaps xmm0, [esp + nb314_ixH1] movaps xmm1, [esp + nb314_iyH1] movaps xmm2, [esp + nb314_izH1] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb314_jxH2] subps xmm1, [esp + nb314_jyH2] subps xmm2, [esp + nb314_jzH2] subps xmm3, [esp + nb314_jxM] subps xmm4, [esp + nb314_jyM] subps xmm5, [esp + nb314_jzM] movaps [esp + nb314_dxH1H2], xmm0 movaps [esp + nb314_dyH1H2], xmm1 movaps [esp + nb314_dzH1H2], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb314_dxH1M], xmm3 movaps [esp + nb314_dyH1M], xmm4 movaps [esp + nb314_dzH1M], xmm5 mulps xmm3, xmm3 mulps xmm4, xmm4 mulps xmm5, xmm5 addps xmm0, xmm1 addps xmm0, xmm2 addps xmm3, xmm4 addps xmm3, xmm5 movaps [esp + nb314_rsqH1H2], xmm0 movaps [esp + nb314_rsqH1M], xmm3 movaps xmm0, [esp + nb314_ixH2] movaps xmm1, [esp + nb314_iyH2] movaps xmm2, [esp + nb314_izH2] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb314_jxH1] subps xmm1, [esp + nb314_jyH1] subps xmm2, [esp + nb314_jzH1] subps xmm3, [esp + nb314_jxH2] subps xmm4, [esp + nb314_jyH2] subps xmm5, [esp + nb314_jzH2] movaps [esp + nb314_dxH2H1], xmm0 movaps [esp + nb314_dyH2H1], xmm1 movaps [esp + nb314_dzH2H1], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb314_dxH2H2], xmm3 movaps [esp + nb314_dyH2H2], xmm4 movaps [esp + nb314_dzH2H2], xmm5 mulps xmm3, xmm3 mulps xmm4, xmm4 mulps xmm5, xmm5 addps xmm0, xmm1 addps xmm0, xmm2 addps xmm3, xmm4 addps xmm3, xmm5 movaps [esp + nb314_rsqH2H1], xmm0 movaps [esp + nb314_rsqH2H2], xmm3 movaps xmm0, [esp + nb314_ixH2] movaps xmm1, [esp + nb314_iyH2] movaps xmm2, [esp + nb314_izH2] movaps xmm3, [esp + nb314_ixM] movaps xmm4, [esp + nb314_iyM] movaps xmm5, [esp + nb314_izM] subps xmm0, [esp + nb314_jxM] subps xmm1, [esp + nb314_jyM] subps xmm2, [esp + nb314_jzM] subps xmm3, [esp + nb314_jxH1] subps xmm4, [esp + nb314_jyH1] subps xmm5, [esp + nb314_jzH1] movaps [esp + nb314_dxH2M], xmm0 movaps [esp + nb314_dyH2M], xmm1 movaps [esp + nb314_dzH2M], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb314_dxMH1], xmm3 movaps [esp + nb314_dyMH1], xmm4 movaps [esp + nb314_dzMH1], xmm5 mulps xmm3, xmm3 mulps xmm4, xmm4 mulps xmm5, xmm5 addps xmm0, xmm1 addps xmm0, xmm2 addps xmm4, xmm3 addps xmm4, xmm5 movaps [esp + nb314_rsqH2M], xmm0 movaps [esp + nb314_rsqMH1], xmm4 movaps xmm0, [esp + nb314_ixM] movaps xmm1, [esp + nb314_iyM] movaps xmm2, [esp + nb314_izM] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb314_jxH2] subps xmm1, [esp + nb314_jyH2] subps xmm2, [esp + nb314_jzH2] subps xmm3, [esp + nb314_jxM] subps xmm4, [esp + nb314_jyM] subps xmm5, [esp + nb314_jzM] movaps [esp + nb314_dxMH2], xmm0 movaps [esp + nb314_dyMH2], xmm1 movaps [esp + nb314_dzMH2], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb314_dxMM], xmm3 movaps [esp + nb314_dyMM], xmm4 movaps [esp + nb314_dzMM], xmm5 mulps xmm3, xmm3 mulps xmm4, xmm4 mulps xmm5, xmm5 addps xmm0, xmm1 addps xmm0, xmm2 addps xmm4, xmm3 addps xmm4, xmm5 movaps [esp + nb314_rsqMH2], xmm0 movaps [esp + nb314_rsqMM], xmm4 ;# start by doing reciprocal for OO movaps xmm7, [esp + nb314_rsqOO] rcpps xmm2, xmm7 movaps xmm1, [esp + nb314_two] mulps xmm7, xmm2 subps xmm1, xmm7 mulps xmm2, xmm1 ;# rinvsq movaps [esp + nb314_rinvsqOO], xmm2 ;# next step is invsqrt - do two at a time. rsqrtps xmm1, [esp + nb314_rsqH1H1] rsqrtps xmm5, [esp + nb314_rsqH1H2] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb314_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb314_rsqH1H1] mulps xmm5, [esp + nb314_rsqH1H2] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb314_half] ;# rinvH1H1 mulps xmm7, [esp + nb314_half] ;# rinvH1H2 movaps [esp + nb314_rinvH1H1], xmm3 movaps [esp + nb314_rinvH1H2], xmm7 rsqrtps xmm1, [esp + nb314_rsqH1M] rsqrtps xmm5, [esp + nb314_rsqH2H1] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb314_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb314_rsqH1M] mulps xmm5, [esp + nb314_rsqH2H1] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb314_half] mulps xmm7, [esp + nb314_half] movaps [esp + nb314_rinvH1M], xmm3 movaps [esp + nb314_rinvH2H1], xmm7 rsqrtps xmm1, [esp + nb314_rsqH2H2] rsqrtps xmm5, [esp + nb314_rsqH2M] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb314_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb314_rsqH2H2] mulps xmm5, [esp + nb314_rsqH2M] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb314_half] mulps xmm7, [esp + nb314_half] movaps [esp + nb314_rinvH2H2], xmm3 movaps [esp + nb314_rinvH2M], xmm7 rsqrtps xmm1, [esp + nb314_rsqMH1] rsqrtps xmm5, [esp + nb314_rsqMH2] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb314_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb314_rsqMH1] mulps xmm5, [esp + nb314_rsqMH2] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb314_half] mulps xmm7, [esp + nb314_half] movaps [esp + nb314_rinvMH1], xmm3 movaps [esp + nb314_rinvMH2], xmm7 rsqrtps xmm1, [esp + nb314_rsqMM] movaps xmm2, xmm1 mulps xmm1, xmm1 movaps xmm3, [esp + nb314_three] mulps xmm1, [esp + nb314_rsqMM] subps xmm3, xmm1 mulps xmm3, xmm2 mulps xmm3, [esp + nb314_half] movaps [esp + nb314_rinvMM], xmm3 ;# start with OO LJ interaction movaps xmm0, [esp + nb314_rinvsqOO] movaps xmm1, xmm0 mulps xmm1, xmm1 ;# rinv4 mulps xmm1, xmm0 ;# xmm1=rinvsix movaps xmm2, xmm1 mulps xmm2, xmm2 ;# xmm2=rinvtwelve mulps xmm1, [esp + nb314_c6] mulps xmm2, [esp + nb314_c12] movaps xmm4, xmm2 subps xmm4, xmm1 addps xmm4, [esp + nb314_Vvdwtot] mulps xmm1, [esp + nb314_six] mulps xmm2, [esp + nb314_twelve] movaps [esp + nb314_Vvdwtot], xmm4 subps xmm2, xmm1 mulps xmm0, xmm2 ;# fscal movaps xmm1, xmm0 movaps xmm2, xmm0 xorps xmm3, xmm3 movaps xmm4, xmm3 movaps xmm5, xmm3 mulps xmm0, [esp + nb314_dxOO] mulps xmm1, [esp + nb314_dyOO] mulps xmm2, [esp + nb314_dzOO] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb314_fixO] addps xmm1, [esp + nb314_fiyO] addps xmm2, [esp + nb314_fizO] movaps [esp + nb314_fjxO], xmm3 movaps [esp + nb314_fjyO], xmm4 movaps [esp + nb314_fjzO], xmm5 movaps [esp + nb314_fixO], xmm0 movaps [esp + nb314_fiyO], xmm1 movaps [esp + nb314_fizO], xmm2 ;# Coulomb interactions - first H1H1 movaps xmm0, [esp + nb314_rinvH1H1] movaps xmm1, xmm0 mulps xmm1, [esp + nb314_rsqH1H1] ;# xmm1=r mulps xmm1, [esp + nb314_tsc] movhlps xmm2, xmm1 cvttps2pi mm6, xmm1 cvttps2pi mm7, xmm2 ;# mm6/mm7 contain lu indices cvtpi2ps xmm3, mm6 cvtpi2ps xmm2, mm7 movlhps xmm3, xmm2 subps xmm1, xmm3 ;# xmm1=eps movaps xmm2, xmm1 mulps xmm2, xmm2 ;# xmm2=eps2 pslld mm6, 2 pslld mm7, 2 movd mm0, eax movd mm1, ebx movd mm2, ecx movd mm3, edx mov esi, [ebp + nb314_VFtab] movd eax, mm6 psrlq mm6, 32 movd ecx, mm7 psrlq mm7, 32 movd ebx, mm6 movd edx, mm7 movlps xmm5, [esi + eax*4] movlps xmm7, [esi + ecx*4] movhps xmm5, [esi + ebx*4] movhps xmm7, [esi + edx*4] ;# got half coulomb table movaps xmm4, xmm5 shufps xmm4, xmm7, 136 ;# constant 10001000 shufps xmm5, xmm7, 221 ;# constant 11011101 movlps xmm7, [esi + eax*4 + 8] movlps xmm3, [esi + ecx*4 + 8] movhps xmm7, [esi + ebx*4 + 8] movhps xmm3, [esi + edx*4 + 8] ;# other half of coulomb table movaps xmm6, xmm7 shufps xmm6, xmm3, 136 ;# constant 10001000 shufps xmm7, xmm3, 221 ;# constant 11011101 ;# coulomb table ready, in xmm4-xmm7 mulps xmm6, xmm1 ;# xmm6=Geps mulps xmm7, xmm2 ;# xmm7=Heps2 addps xmm5, xmm6 addps xmm5, xmm7 ;# xmm5=Fp mulps xmm7, [esp + nb314_two] ;# two*Heps2 movaps xmm3, [esp + nb314_qqHH] addps xmm7, xmm6 addps xmm7, xmm5 ;# xmm7=FF mulps xmm5, xmm1 ;# xmm5=eps*Fp addps xmm5, xmm4 ;# xmm5=VV mulps xmm5, xmm3 ;# vcoul=qq*VV mulps xmm3, xmm7 ;# fijC=FF*qq ;# at this point mm5 contains vcoul and mm3 fijC ;# update vctot addps xmm5, [esp + nb314_vctot] movaps [esp + nb314_vctot], xmm5 xorps xmm1, xmm1 mulps xmm3, [esp + nb314_tsc] mulps xmm3, xmm0 subps xmm1, xmm3 movaps xmm0, xmm1 movaps xmm2, xmm1 xorps xmm3, xmm3 movaps xmm4, xmm3 movaps xmm5, xmm3 mulps xmm0, [esp + nb314_dxH1H1] mulps xmm1, [esp + nb314_dyH1H1] mulps xmm2, [esp + nb314_dzH1H1] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb314_fixH1] addps xmm1, [esp + nb314_fiyH1] addps xmm2, [esp + nb314_fizH1] movaps [esp + nb314_fjxH1], xmm3 movaps [esp + nb314_fjyH1], xmm4 movaps [esp + nb314_fjzH1], xmm5 movaps [esp + nb314_fixH1], xmm0 movaps [esp + nb314_fiyH1], xmm1 movaps [esp + nb314_fizH1], xmm2 ;# H1-H2 interaction movaps xmm0, [esp + nb314_rinvH1H2] movaps xmm1, xmm0 mulps xmm1, [esp + nb314_rsqH1H2] ;# xmm1=r mulps xmm1, [esp + nb314_tsc] movhlps xmm2, xmm1 cvttps2pi mm6, xmm1 cvttps2pi mm7, xmm2 ;# mm6/mm7 contain lu indices cvtpi2ps xmm3, mm6 cvtpi2ps xmm2, mm7 movlhps xmm3, xmm2 subps xmm1, xmm3 ;# xmm1=eps movaps xmm2, xmm1 mulps xmm2, xmm2 ;# xmm2=eps2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?