nb_kernel214_ia32_sse.intel_syntax.s
来自「最著名最快的分子模拟软件」· S 代码 · 共 2,167 行 · 第 1/5 页
S
2,167 行
add edx, 0 mov [esp + nb214_innerk], edx ;# number of innerloop atoms jge .nb214_unroll_loop jmp .nb214_single_check.nb214_unroll_loop: ;# quad-unroll innerloop here mov edx, [esp + nb214_innerjjnr] ;# pointer to jjnr[k] mov eax, [edx] mov ebx, [edx + 4] mov ecx, [edx + 8] mov edx, [edx + 12] ;# eax-edx=jnr1-4 add dword ptr [esp + nb214_innerjjnr], 16 ;# advance pointer (unroll 4) mov esi, [ebp + nb214_pos] ;# base of pos[] lea eax, [eax + eax*2] ;# replace jnr with j3 lea ebx, [ebx + ebx*2] lea ecx, [ecx + ecx*2] ;# replace jnr with j3 lea edx, [edx + edx*2] ;# move j coordinates to local temp variables ;# Load Ox, Oy, Oz, H1x movlps xmm1, [esi + eax*4] ;# Oxa Oya - - movlps xmm4, [esi + ecx*4] ;# Oxc Oyc - - movhps xmm1, [esi + ebx*4] ;# Oxa Oya Oxb Oyb movhps xmm4, [esi + edx*4] ;# Oxc Oyc Oxd Oyd movaps xmm0, xmm1 ;# Oxa Oya Oxb Oyb shufps xmm0, xmm4, 0x88 ;# Oxa Oxb Oxc Oxd 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 + nb214_jxO], xmm0 movaps [esp + nb214_jyO], xmm1 movaps [esp + nb214_jzO], xmm2 movaps [esp + nb214_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 + nb214_jyH1], xmm0 movaps [esp + nb214_jzH1], xmm1 movaps [esp + nb214_jxH2], xmm2 movaps [esp + nb214_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 + nb214_jzH2], xmm0 movaps [esp + nb214_jxM], xmm1 movaps [esp + nb214_jyM], xmm2 movaps [esp + nb214_jzM], xmm3 ;# start calculating pairwise distances movaps xmm0, [esp + nb214_ixO] movaps xmm1, [esp + nb214_iyO] movaps xmm2, [esp + nb214_izO] movaps xmm3, [esp + nb214_ixH1] movaps xmm4, [esp + nb214_iyH1] movaps xmm5, [esp + nb214_izH1] subps xmm0, [esp + nb214_jxO] subps xmm1, [esp + nb214_jyO] subps xmm2, [esp + nb214_jzO] subps xmm3, [esp + nb214_jxH1] subps xmm4, [esp + nb214_jyH1] subps xmm5, [esp + nb214_jzH1] movaps [esp + nb214_dxOO], xmm0 movaps [esp + nb214_dyOO], xmm1 movaps [esp + nb214_dzOO], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb214_dxH1H1], xmm3 movaps [esp + nb214_dyH1H1], xmm4 movaps [esp + nb214_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 + nb214_rsqOO], xmm0 movaps [esp + nb214_rsqH1H1], xmm3 movaps xmm0, [esp + nb214_ixH1] movaps xmm1, [esp + nb214_iyH1] movaps xmm2, [esp + nb214_izH1] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb214_jxH2] subps xmm1, [esp + nb214_jyH2] subps xmm2, [esp + nb214_jzH2] subps xmm3, [esp + nb214_jxM] subps xmm4, [esp + nb214_jyM] subps xmm5, [esp + nb214_jzM] movaps [esp + nb214_dxH1H2], xmm0 movaps [esp + nb214_dyH1H2], xmm1 movaps [esp + nb214_dzH1H2], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb214_dxH1M], xmm3 movaps [esp + nb214_dyH1M], xmm4 movaps [esp + nb214_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 + nb214_rsqH1H2], xmm0 movaps [esp + nb214_rsqH1M], xmm3 movaps xmm0, [esp + nb214_ixH2] movaps xmm1, [esp + nb214_iyH2] movaps xmm2, [esp + nb214_izH2] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb214_jxH1] subps xmm1, [esp + nb214_jyH1] subps xmm2, [esp + nb214_jzH1] subps xmm3, [esp + nb214_jxH2] subps xmm4, [esp + nb214_jyH2] subps xmm5, [esp + nb214_jzH2] movaps [esp + nb214_dxH2H1], xmm0 movaps [esp + nb214_dyH2H1], xmm1 movaps [esp + nb214_dzH2H1], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb214_dxH2H2], xmm3 movaps [esp + nb214_dyH2H2], xmm4 movaps [esp + nb214_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 + nb214_rsqH2H1], xmm0 movaps [esp + nb214_rsqH2H2], xmm3 movaps xmm0, [esp + nb214_ixH2] movaps xmm1, [esp + nb214_iyH2] movaps xmm2, [esp + nb214_izH2] movaps xmm3, [esp + nb214_ixM] movaps xmm4, [esp + nb214_iyM] movaps xmm5, [esp + nb214_izM] subps xmm0, [esp + nb214_jxM] subps xmm1, [esp + nb214_jyM] subps xmm2, [esp + nb214_jzM] subps xmm3, [esp + nb214_jxH1] subps xmm4, [esp + nb214_jyH1] subps xmm5, [esp + nb214_jzH1] movaps [esp + nb214_dxH2M], xmm0 movaps [esp + nb214_dyH2M], xmm1 movaps [esp + nb214_dzH2M], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb214_dxMH1], xmm3 movaps [esp + nb214_dyMH1], xmm4 movaps [esp + nb214_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 + nb214_rsqH2M], xmm0 movaps [esp + nb214_rsqMH1], xmm4 movaps xmm0, [esp + nb214_ixM] movaps xmm1, [esp + nb214_iyM] movaps xmm2, [esp + nb214_izM] movaps xmm3, xmm0 movaps xmm4, xmm1 movaps xmm5, xmm2 subps xmm0, [esp + nb214_jxH2] subps xmm1, [esp + nb214_jyH2] subps xmm2, [esp + nb214_jzH2] subps xmm3, [esp + nb214_jxM] subps xmm4, [esp + nb214_jyM] subps xmm5, [esp + nb214_jzM] movaps [esp + nb214_dxMH2], xmm0 movaps [esp + nb214_dyMH2], xmm1 movaps [esp + nb214_dzMH2], xmm2 mulps xmm0, xmm0 mulps xmm1, xmm1 mulps xmm2, xmm2 movaps [esp + nb214_dxMM], xmm3 movaps [esp + nb214_dyMM], xmm4 movaps [esp + nb214_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 + nb214_rsqMH2], xmm0 movaps [esp + nb214_rsqMM], xmm4 ;# start by doing reciprocal for OO movaps xmm7, [esp + nb214_rsqOO] rcpps xmm2, xmm7 movaps xmm1, [esp + nb214_two] mulps xmm7, xmm2 subps xmm1, xmm7 mulps xmm2, xmm1 ;# rinvsq movaps [esp + nb214_rinvsqOO], xmm2 ;# next step is invsqrt - do two at a time. rsqrtps xmm1, [esp + nb214_rsqH1H1] rsqrtps xmm5, [esp + nb214_rsqH1H2] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb214_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb214_rsqH1H1] mulps xmm5, [esp + nb214_rsqH1H2] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb214_half] ;# rinvH1H1 mulps xmm7, [esp + nb214_half] ;# rinvH1H2 movaps [esp + nb214_rinvH1H1], xmm3 movaps [esp + nb214_rinvH1H2], xmm7 rsqrtps xmm1, [esp + nb214_rsqH1M] rsqrtps xmm5, [esp + nb214_rsqH2H1] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb214_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb214_rsqH1M] mulps xmm5, [esp + nb214_rsqH2H1] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb214_half] mulps xmm7, [esp + nb214_half] movaps [esp + nb214_rinvH1M], xmm3 movaps [esp + nb214_rinvH2H1], xmm7 rsqrtps xmm1, [esp + nb214_rsqH2H2] rsqrtps xmm5, [esp + nb214_rsqH2M] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb214_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb214_rsqH2H2] mulps xmm5, [esp + nb214_rsqH2M] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb214_half] mulps xmm7, [esp + nb214_half] movaps [esp + nb214_rinvH2H2], xmm3 movaps [esp + nb214_rinvH2M], xmm7 rsqrtps xmm1, [esp + nb214_rsqMH1] rsqrtps xmm5, [esp + nb214_rsqMH2] movaps xmm2, xmm1 movaps xmm6, xmm5 mulps xmm1, xmm1 mulps xmm5, xmm5 movaps xmm3, [esp + nb214_three] movaps xmm7, xmm3 mulps xmm1, [esp + nb214_rsqMH1] mulps xmm5, [esp + nb214_rsqMH2] subps xmm3, xmm1 subps xmm7, xmm5 mulps xmm3, xmm2 mulps xmm7, xmm6 mulps xmm3, [esp + nb214_half] mulps xmm7, [esp + nb214_half] movaps [esp + nb214_rinvMH1], xmm3 movaps [esp + nb214_rinvMH2], xmm7 rsqrtps xmm1, [esp + nb214_rsqMM] movaps xmm2, xmm1 mulps xmm1, xmm1 movaps xmm3, [esp + nb214_three] mulps xmm1, [esp + nb214_rsqMM] subps xmm3, xmm1 mulps xmm3, xmm2 mulps xmm3, [esp + nb214_half] movaps [esp + nb214_rinvMM], xmm3 ;# start with OO LJ interaction movaps xmm0, [esp + nb214_rinvsqOO] movaps xmm1, xmm0 mulps xmm1, xmm1 ;# rinv4 mulps xmm1, xmm0 ;# xmm1=rinvsix movaps xmm2, xmm1 mulps xmm2, xmm2 ;# xmm2=rinvtwelve mulps xmm1, [esp + nb214_c6] mulps xmm2, [esp + nb214_c12] movaps xmm4, xmm2 subps xmm4, xmm1 addps xmm4, [esp + nb214_Vvdwtot] mulps xmm1, [esp + nb214_six] mulps xmm2, [esp + nb214_twelve] movaps [esp + nb214_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 + nb214_dxOO] mulps xmm1, [esp + nb214_dyOO] mulps xmm2, [esp + nb214_dzOO] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixO] addps xmm1, [esp + nb214_fiyO] addps xmm2, [esp + nb214_fizO] movaps [esp + nb214_fjxO], xmm3 movaps [esp + nb214_fjyO], xmm4 movaps [esp + nb214_fjzO], xmm5 movaps [esp + nb214_fixO], xmm0 movaps [esp + nb214_fiyO], xmm1 movaps [esp + nb214_fizO], xmm2 ;# Coulomb interactions ;# start with H1-H1 interaction movaps xmm0, [esp + nb214_rinvH1H1] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] mulps xmm0, xmm0 ;# xmm0=rinvsq mulps xmm5, [esp + nb214_rsqH1H1] ;# xmm5=krsq movaps xmm6, xmm5 addps xmm6, xmm7 ;# xmm6=rinv+ krsq subps xmm6, [esp + nb214_crf] mulps xmm6, [esp + nb214_qqHH] ;# xmm6=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqHH] ;# xmm7 = coul part of fscal addps xmm6, [esp + nb214_vctot] ;# local vctot summation variable mulps xmm0, xmm7 movaps xmm1, xmm0 movaps xmm2, xmm0 xorps xmm3, xmm3 movaps xmm4, xmm3 movaps xmm5, xmm3 mulps xmm0, [esp + nb214_dxH1H1] mulps xmm1, [esp + nb214_dyH1H1] mulps xmm2, [esp + nb214_dzH1H1] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixH1] addps xmm1, [esp + nb214_fiyH1] addps xmm2, [esp + nb214_fizH1] movaps [esp + nb214_fjxH1], xmm3 movaps [esp + nb214_fjyH1], xmm4 movaps [esp + nb214_fjzH1], xmm5 movaps [esp + nb214_fixH1], xmm0 movaps [esp + nb214_fiyH1], xmm1 movaps [esp + nb214_fizH1], xmm2 ;# H1-H2 interaction movaps xmm0, [esp + nb214_rinvH1H2] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqH1H2] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqHH] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?