nb_kernel214_ia32_sse.intel_syntax.s
来自「最著名最快的分子模拟软件」· S 代码 · 共 2,167 行 · 第 1/5 页
S
2,167 行
mulps xmm7, [esp + nb214_qqHH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH1 movaps xmm1, xmm0 movaps xmm2, xmm0 xorps xmm3, xmm3 movaps xmm4, xmm3 movaps xmm5, xmm3 mulps xmm0, [esp + nb214_dxH1H2] mulps xmm1, [esp + nb214_dyH1H2] mulps xmm2, [esp + nb214_dzH1H2] 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_fjxH2], xmm3 movaps [esp + nb214_fjyH2], xmm4 movaps [esp + nb214_fjzH2], xmm5 movaps [esp + nb214_fixH1], xmm0 movaps [esp + nb214_fiyH1], xmm1 movaps [esp + nb214_fizH1], xmm2 ;# H1-M interaction movaps xmm0, [esp + nb214_rinvH1M] movaps xmm7, xmm0 ;# xmm7=Rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqH1M] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqMH] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqMH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 xorps xmm3, xmm3 movaps xmm4, xmm3 movaps xmm5, xmm3 mulps xmm0, [esp + nb214_dxH1M] mulps xmm1, [esp + nb214_dyH1M] mulps xmm2, [esp + nb214_dzH1M] 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_fjxM], xmm3 movaps [esp + nb214_fjyM], xmm4 movaps [esp + nb214_fjzM], xmm5 movaps [esp + nb214_fixH1], xmm0 movaps [esp + nb214_fiyH1], xmm1 movaps [esp + nb214_fizH1], xmm2 ;# H2-H1 interaction movaps xmm0, [esp + nb214_rinvH2H1] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqH2H1] ;# 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 mulps xmm7, [esp + nb214_qqHH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxH1] movaps xmm4, [esp + nb214_fjyH1] movaps xmm5, [esp + nb214_fjzH1] mulps xmm0, [esp + nb214_dxH2H1] mulps xmm1, [esp + nb214_dyH2H1] mulps xmm2, [esp + nb214_dzH2H1] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixH2] addps xmm1, [esp + nb214_fiyH2] addps xmm2, [esp + nb214_fizH2] movaps [esp + nb214_fjxH1], xmm3 movaps [esp + nb214_fjyH1], xmm4 movaps [esp + nb214_fjzH1], xmm5 movaps [esp + nb214_fixH2], xmm0 movaps [esp + nb214_fiyH2], xmm1 movaps [esp + nb214_fizH2], xmm2 ;# H2-H2 interaction movaps xmm0, [esp + nb214_rinvH2H2] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqH2H2] ;# 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 mulps xmm7, [esp + nb214_qqHH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxH2] movaps xmm4, [esp + nb214_fjyH2] movaps xmm5, [esp + nb214_fjzH2] mulps xmm0, [esp + nb214_dxH2H2] mulps xmm1, [esp + nb214_dyH2H2] mulps xmm2, [esp + nb214_dzH2H2] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixH2] addps xmm1, [esp + nb214_fiyH2] addps xmm2, [esp + nb214_fizH2] movaps [esp + nb214_fjxH2], xmm3 movaps [esp + nb214_fjyH2], xmm4 movaps [esp + nb214_fjzH2], xmm5 movaps [esp + nb214_fixH2], xmm0 movaps [esp + nb214_fiyH2], xmm1 movaps [esp + nb214_fizH2], xmm2 ;# H2-M interaction movaps xmm0, [esp + nb214_rinvH2M] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqH2M] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqMH] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqMH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxM] movaps xmm4, [esp + nb214_fjyM] movaps xmm5, [esp + nb214_fjzM] mulps xmm0, [esp + nb214_dxH2M] mulps xmm1, [esp + nb214_dyH2M] mulps xmm2, [esp + nb214_dzH2M] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixH2] addps xmm1, [esp + nb214_fiyH2] addps xmm2, [esp + nb214_fizH2] movaps [esp + nb214_fjxM], xmm3 movaps [esp + nb214_fjyM], xmm4 movaps [esp + nb214_fjzM], xmm5 movaps [esp + nb214_fixH2], xmm0 movaps [esp + nb214_fiyH2], xmm1 movaps [esp + nb214_fizH2], xmm2 ;# M-H1 interaction movaps xmm0, [esp + nb214_rinvMH1] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqMH1] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqMH] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqMH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxH1] movaps xmm4, [esp + nb214_fjyH1] movaps xmm5, [esp + nb214_fjzH1] mulps xmm0, [esp + nb214_dxMH1] mulps xmm1, [esp + nb214_dyMH1] mulps xmm2, [esp + nb214_dzMH1] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixM] addps xmm1, [esp + nb214_fiyM] addps xmm2, [esp + nb214_fizM] movaps [esp + nb214_fjxH1], xmm3 movaps [esp + nb214_fjyH1], xmm4 movaps [esp + nb214_fjzH1], xmm5 movaps [esp + nb214_fixM], xmm0 movaps [esp + nb214_fiyM], xmm1 movaps [esp + nb214_fizM], xmm2 ;# M-H2 interaction movaps xmm0, [esp + nb214_rinvMH2] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqMH2] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqMH] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqMH] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxH2] movaps xmm4, [esp + nb214_fjyH2] movaps xmm5, [esp + nb214_fjzH2] mulps xmm0, [esp + nb214_dxMH2] mulps xmm1, [esp + nb214_dyMH2] mulps xmm2, [esp + nb214_dzMH2] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixM] addps xmm1, [esp + nb214_fiyM] addps xmm2, [esp + nb214_fizM] movaps [esp + nb214_fjxH2], xmm3 movaps [esp + nb214_fjyH2], xmm4 movaps [esp + nb214_fjzH2], xmm5 movaps [esp + nb214_fixM], xmm0 movaps [esp + nb214_fiyM], xmm1 movaps [esp + nb214_fizM], xmm2 ;# M-M interaction movaps xmm0, [esp + nb214_rinvMM] movaps xmm7, xmm0 ;# xmm7=rinv movaps xmm5, [esp + nb214_krf] movaps xmm1, xmm0 mulps xmm5, [esp + nb214_rsqMM] ;# xmm5=krsq movaps xmm4, xmm5 addps xmm4, xmm7 ;# xmm4=r inv+ krsq subps xmm4, [esp + nb214_crf] mulps xmm0, xmm0 mulps xmm4, [esp + nb214_qqMM] ;# xmm4=voul=qq*(rinv+ krsq-crf) mulps xmm5, [esp + nb214_two] subps xmm7, xmm5 ;# xmm7=rinv-2*krsq mulps xmm7, [esp + nb214_qqMM] ;# xmm7 = coul part of fscal addps xmm6, xmm4 ;# add to local vctot mulps xmm0, xmm7 ;# fsOH2 movaps xmm1, xmm0 movaps xmm2, xmm0 movaps xmm1, xmm0 movaps [esp + nb214_vctot], xmm6 movaps xmm2, xmm0 movaps xmm3, [esp + nb214_fjxM] movaps xmm4, [esp + nb214_fjyM] movaps xmm5, [esp + nb214_fjzM] mulps xmm0, [esp + nb214_dxMM] mulps xmm1, [esp + nb214_dyMM] mulps xmm2, [esp + nb214_dzMM] subps xmm3, xmm0 subps xmm4, xmm1 subps xmm5, xmm2 addps xmm0, [esp + nb214_fixM] addps xmm1, [esp + nb214_fiyM] addps xmm2, [esp + nb214_fizM] movaps [esp + nb214_fjxM], xmm3 movaps [esp + nb214_fjyM], xmm4 movaps [esp + nb214_fjzM], xmm5 movaps [esp + nb214_fixM], xmm0 movaps [esp + nb214_fiyM], xmm1 movaps [esp + nb214_fizM], xmm2 mov edi, [ebp + nb214_faction] ;# update j forces ;# 4 j waters with four atoms each. ;# step 1 : transpose fjxO, fjyO, fjzO, fjxH1 movaps xmm0, [esp + nb214_fjxO] movaps xmm1, [esp + nb214_fjyO] movaps xmm2, [esp + nb214_fjzO] movaps xmm3, [esp + nb214_fjxH1] movaps xmm4, xmm0 movaps xmm5, xmm1 unpcklps xmm4, xmm2 unpcklps xmm5, xmm3 unpckhps xmm0, xmm2 unpckhps xmm1, xmm3 movaps xmm2, xmm4 movaps xmm3, xmm0 unpcklps xmm4, xmm5 unpckhps xmm2, xmm5 unpcklps xmm0, xmm1 unpckhps xmm3, xmm1 ;# results are now in xmm4, xmm2, xmm0, xmm3 ;# load the corresponding j forces from memory movlps xmm1, [edi + eax*4] movlps xmm5, [edi + ebx*4] movlps xmm6, [edi + ecx*4] movlps xmm7, [edi + edx*4] movhps xmm1, [edi + eax*4 + 8] movhps xmm5, [edi + ebx*4 + 8] movhps xmm6, [edi + ecx*4 + 8] movhps xmm7, [edi + edx*4 + 8] ;# add addps xmm1, xmm4 addps xmm5, xmm2 addps xmm6, xmm0 addps xmm7, xmm3 ;# store back movlps [edi + eax*4], xmm1 movlps [edi + ebx*4], xmm5 movlps [edi + ecx*4], xmm6 movlps [edi + edx*4], xmm7 movhps [edi + eax*4 + 8], xmm1 movhps [edi + ebx*4 + 8], xmm5 movhps [edi + ecx*4 + 8], xmm6 movhps [edi + edx*4 + 8], xmm7 ;# step 2 : transpose fjyH1, fjzH1, fjxH2, fjyH2 movaps xmm0, [esp + nb214_fjyH1] movaps xmm1, [esp + nb214_fjzH1] movaps xmm2, [esp + nb214_fjxH2] movaps xmm3, [esp + nb214_fjyH2] movaps xmm4, xmm0 movaps xmm5, xmm1 unpcklps xmm4, xmm2 unpcklps xmm5, xmm3 unpckhps xmm0, xmm2 unpckhps xmm1, xmm3 movaps xmm2, xmm4 movaps xmm3, xmm0 unpcklps xmm4, xmm5 unpckhps xmm2, xmm5 unpcklps xmm0, xmm1 unpckhps xmm3, xmm1 ;# results are now in xmm4, xmm2, xmm0, xmm3 ;# load the corresponding j forces from memory movlps xmm1, [edi + eax*4 + 16] movlps xmm5, [edi + ebx*4 + 16] movlps xmm6, [edi + ecx*4 + 16] movlps xmm7, [edi + edx*4 + 16] movhps xmm1, [edi + eax*4 + 24] movhps xmm5, [edi + ebx*4 + 24] movhps xmm6, [edi + ecx*4 + 24] movhps xmm7, [edi + edx*4 + 24] ;# add addps xmm1, xmm4 addps xmm5, xmm2 addps xmm6, xmm0 addps xmm7, xmm3 ;# store back movlps [edi + eax*4 + 16], xmm1 movlps [edi + ebx*4 + 16], xmm5 movlps [edi + ecx*4 + 16], xmm6 movlps [edi + edx*4 + 16], xmm7 movhps [edi + eax*4 + 24], xmm1 movhps [edi + ebx*4 + 24], xmm5 movhps [edi + ecx*4 + 24], xmm6 movhps [edi + edx*4 + 24], xmm7 ;# step 3 : transpose fjzH2, fjxM, fjyM, fjzM. xmm4 is scratch movaps xmm0, [esp + nb214_fjzH2] movaps xmm1, [esp + nb214_fjxM] movaps xmm2, [esp + nb214_fjyM] movaps xmm3, [esp + nb214_fjzM] movaps xmm4, xmm0 movaps xmm5, xmm1 unpcklps xmm4, xmm2 unpcklps xmm5, xmm3 unpckhps xmm0, xmm2 unpckhps xmm1, xmm3 movaps xmm2, xmm4 movaps xmm3, xmm0 unpcklps xmm4, xmm5 unpckhps xmm2, xmm5 unpcklps xmm0, xmm1 unpckhps xmm3, xmm1 ;# results are now in xmm0, xmm1, xmm2, xmm3 ;# load the corresponding j forces from memory movlps xmm1, [edi + eax*4 + 32] movlps xmm5, [edi + ebx*4 + 32] movlps xmm6, [edi + ecx*4 + 32] movlps xmm7, [edi + edx*4 + 32] movhps xmm1, [edi + eax*4 + 40] movhps xmm5, [edi + ebx*4 + 40] movhps xmm6, [edi + ecx*4 + 40] movhps xmm7, [edi + edx*4 + 40] ;# add addps xmm1, xmm4 addps xmm5, xmm2 addps xmm6, xmm0 addps xmm7, xmm3 ;# store back movlps [edi + eax*4 + 32], xmm1 movlps [edi + ebx*4 + 32], xmm5 movlps [edi + ecx*4 + 32], xmm6 movlps [edi + edx*4 + 32], xmm7 movhps [edi + eax*4 + 40], xmm1 movhps [edi + ebx*4 + 40], xmm5 movhps [edi + ecx*4 + 40], xmm6 movhps [edi + edx*4 + 40], xmm7 ;# should we do one more iteration? sub dword ptr [esp + nb214_innerk], 4 jl .nb214_single_check jmp .nb214_unroll_loop.nb214_single_check:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?