nb_kernel312_ia32_sse.intel_syntax.s

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

S
2,216
字号
		movaps xmm0, xmm2	movaps xmm1, xmm3	unpcklps xmm0, xmm5	;# xmm0= jxOa  jxOb  jyOa  jyOb 	unpcklps xmm1, xmm6	;# xmm1= jxH1a jxH1b jyH1a jyH1b 	unpckhps xmm2, xmm5	;# xmm2= jxOc  jxOd  jyOc  jyOd 	unpckhps xmm3, xmm6	;# xmm3= jxH1c jxH1d jyH1c jyH1d 	movaps xmm5, xmm4	movaps   xmm6, xmm0	unpcklps xmm4, xmm7	;# xmm4= jxH2a jxH2b jyH2a jyH2b 			unpckhps xmm5, xmm7	;# xmm5= jxH2c jxH2d jyH2c jyH2d 	movaps   xmm7, xmm1	movlhps  xmm0, xmm2	;# xmm0= jxOa  jxOb  jxOc  jxOd 	movaps [esp + nb312_jxO], xmm0	movhlps  xmm2, xmm6	;# xmm2= jyOa  jyOb  jyOc  jyOd 	movaps [esp + nb312_jyO], xmm2	movlhps  xmm1, xmm3	movaps [esp + nb312_jxH1], xmm1	movhlps  xmm3, xmm7	movaps   xmm6, xmm4	movaps [esp + nb312_jyH1], xmm3	movlhps  xmm4, xmm5	movaps [esp + nb312_jxH2], xmm4	movhlps  xmm5, xmm6	movaps [esp + nb312_jyH2], xmm5	movss  xmm0, [esi + eax*4 + 8]	movss  xmm1, [esi + eax*4 + 20]	movss  xmm2, [esi + eax*4 + 32]	movss  xmm3, [esi + ecx*4 + 8]	movss  xmm4, [esi + ecx*4 + 20]	movss  xmm5, [esi + ecx*4 + 32]	movhps xmm0, [esi + ebx*4 + 4]	movhps xmm1, [esi + ebx*4 + 16]	movhps xmm2, [esi + ebx*4 + 28]		movhps xmm3, [esi + edx*4 + 4]	movhps xmm4, [esi + edx*4 + 16]	movhps xmm5, [esi + edx*4 + 28]		shufps xmm0, xmm3, 204  ;# constant 11001100	shufps xmm1, xmm4, 204  ;# constant 11001100	shufps xmm2, xmm5, 204  ;# constant 11001100	movaps [esp + nb312_jzO],  xmm0	movaps [esp + nb312_jzH1],  xmm1	movaps [esp + nb312_jzH2],  xmm2	movaps xmm0, [esp + nb312_ixO]	movaps xmm1, [esp + nb312_iyO]	movaps xmm2, [esp + nb312_izO]	movaps xmm3, [esp + nb312_ixO]	movaps xmm4, [esp + nb312_iyO]	movaps xmm5, [esp + nb312_izO]	subps  xmm0, [esp + nb312_jxO]	subps  xmm1, [esp + nb312_jyO]	subps  xmm2, [esp + nb312_jzO]	subps  xmm3, [esp + nb312_jxH1]	subps  xmm4, [esp + nb312_jyH1]	subps  xmm5, [esp + nb312_jzH1]	movaps [esp + nb312_dxOO], xmm0	movaps [esp + nb312_dyOO], xmm1	movaps [esp + nb312_dzOO], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb312_dxOH1], xmm3	movaps [esp + nb312_dyOH1], xmm4	movaps [esp + nb312_dzOH1], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	addps  xmm0, xmm1	addps  xmm0, xmm2	addps  xmm3, xmm4	addps  xmm3, xmm5	movaps [esp + nb312_rsqOO], xmm0	movaps [esp + nb312_rsqOH1], xmm3	movaps xmm0, [esp + nb312_ixO]	movaps xmm1, [esp + nb312_iyO]	movaps xmm2, [esp + nb312_izO]	movaps xmm3, [esp + nb312_ixH1]	movaps xmm4, [esp + nb312_iyH1]	movaps xmm5, [esp + nb312_izH1]	subps  xmm0, [esp + nb312_jxH2]	subps  xmm1, [esp + nb312_jyH2]	subps  xmm2, [esp + nb312_jzH2]	subps  xmm3, [esp + nb312_jxO]	subps  xmm4, [esp + nb312_jyO]	subps  xmm5, [esp + nb312_jzO]	movaps [esp + nb312_dxOH2], xmm0	movaps [esp + nb312_dyOH2], xmm1	movaps [esp + nb312_dzOH2], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb312_dxH1O], xmm3	movaps [esp + nb312_dyH1O], xmm4	movaps [esp + nb312_dzH1O], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	addps  xmm0, xmm1	addps  xmm0, xmm2	addps  xmm3, xmm4	addps  xmm3, xmm5	movaps [esp + nb312_rsqOH2], xmm0	movaps [esp + nb312_rsqH1O], xmm3	movaps xmm0, [esp + nb312_ixH1]	movaps xmm1, [esp + nb312_iyH1]	movaps xmm2, [esp + nb312_izH1]	movaps xmm3, [esp + nb312_ixH1]	movaps xmm4, [esp + nb312_iyH1]	movaps xmm5, [esp + nb312_izH1]	subps  xmm0, [esp + nb312_jxH1]	subps  xmm1, [esp + nb312_jyH1]	subps  xmm2, [esp + nb312_jzH1]	subps  xmm3, [esp + nb312_jxH2]	subps  xmm4, [esp + nb312_jyH2]	subps  xmm5, [esp + nb312_jzH2]	movaps [esp + nb312_dxH1H1], xmm0	movaps [esp + nb312_dyH1H1], xmm1	movaps [esp + nb312_dzH1H1], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb312_dxH1H2], xmm3	movaps [esp + nb312_dyH1H2], xmm4	movaps [esp + nb312_dzH1H2], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	addps  xmm0, xmm1	addps  xmm0, xmm2	addps  xmm3, xmm4	addps  xmm3, xmm5	movaps [esp + nb312_rsqH1H1], xmm0	movaps [esp + nb312_rsqH1H2], xmm3	movaps xmm0, [esp + nb312_ixH2]	movaps xmm1, [esp + nb312_iyH2]	movaps xmm2, [esp + nb312_izH2]	movaps xmm3, [esp + nb312_ixH2]	movaps xmm4, [esp + nb312_iyH2]	movaps xmm5, [esp + nb312_izH2]	subps  xmm0, [esp + nb312_jxO]	subps  xmm1, [esp + nb312_jyO]	subps  xmm2, [esp + nb312_jzO]	subps  xmm3, [esp + nb312_jxH1]	subps  xmm4, [esp + nb312_jyH1]	subps  xmm5, [esp + nb312_jzH1]	movaps [esp + nb312_dxH2O], xmm0	movaps [esp + nb312_dyH2O], xmm1	movaps [esp + nb312_dzH2O], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb312_dxH2H1], xmm3	movaps [esp + nb312_dyH2H1], xmm4	movaps [esp + nb312_dzH2H1], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	addps  xmm0, xmm1	addps  xmm0, xmm2	addps  xmm4, xmm3	addps  xmm4, xmm5	movaps [esp + nb312_rsqH2O], xmm0	movaps [esp + nb312_rsqH2H1], xmm4	movaps xmm0, [esp + nb312_ixH2]	movaps xmm1, [esp + nb312_iyH2]	movaps xmm2, [esp + nb312_izH2]	subps  xmm0, [esp + nb312_jxH2]	subps  xmm1, [esp + nb312_jyH2]	subps  xmm2, [esp + nb312_jzH2]	movaps [esp + nb312_dxH2H2], xmm0	movaps [esp + nb312_dyH2H2], xmm1	movaps [esp + nb312_dzH2H2], xmm2	mulps xmm0, xmm0	mulps xmm1, xmm1	mulps xmm2, xmm2	addps xmm0, xmm1	addps xmm0, xmm2	movaps [esp + nb312_rsqH2H2], xmm0			;# start doing invsqrt use rsq values in xmm0, xmm4 	rsqrtps xmm1, xmm0	rsqrtps xmm5, xmm4	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb312_three]	movaps  xmm7, xmm3	mulps   xmm1, xmm0	mulps   xmm5, xmm4	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb312_half] ;# rinvH2H2 	mulps   xmm7, [esp + nb312_half] ;# rinvH2H1 	movaps  [esp + nb312_rinvH2H2], xmm3	movaps  [esp + nb312_rinvH2H1], xmm7			rsqrtps xmm1, [esp + nb312_rsqOO]	rsqrtps xmm5, [esp + nb312_rsqOH1]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb312_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb312_rsqOO]	mulps   xmm5, [esp + nb312_rsqOH1]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb312_half] 	mulps   xmm7, [esp + nb312_half]	movaps  [esp + nb312_rinvOO], xmm3	movaps  [esp + nb312_rinvOH1], xmm7		rsqrtps xmm1, [esp + nb312_rsqOH2]	rsqrtps xmm5, [esp + nb312_rsqH1O]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb312_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb312_rsqOH2]	mulps   xmm5, [esp + nb312_rsqH1O]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb312_half] 	mulps   xmm7, [esp + nb312_half]	movaps  [esp + nb312_rinvOH2], xmm3	movaps  [esp + nb312_rinvH1O], xmm7		rsqrtps xmm1, [esp + nb312_rsqH1H1]	rsqrtps xmm5, [esp + nb312_rsqH1H2]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb312_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb312_rsqH1H1]	mulps   xmm5, [esp + nb312_rsqH1H2]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb312_half] 	mulps   xmm7, [esp + nb312_half]	movaps  [esp + nb312_rinvH1H1], xmm3	movaps  [esp + nb312_rinvH1H2], xmm7		rsqrtps xmm1, [esp + nb312_rsqH2O]	movaps  xmm2, xmm1	mulps   xmm1, xmm1	movaps  xmm3, [esp + nb312_three]	mulps   xmm1, [esp + nb312_rsqH2O]	subps   xmm3, xmm1	mulps   xmm3, xmm2	mulps   xmm3, [esp + nb312_half] 	movaps  [esp + nb312_rinvH2O], xmm3	;# start with OO interaction 	movaps xmm0, [esp + nb312_rinvOO]	movaps xmm1, xmm0	mulps  xmm1, [esp + nb312_rsqOO] ;# xmm1=r 	mulps  xmm1, [esp + nb312_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 + nb312_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 + nb312_two]       ;# two*Heps2     movaps xmm3, [esp + nb312_qqOO]    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     ;# increment vcoul - then we can get rid of mm5     ;# update vctot     addps  xmm5, [esp + nb312_vctot]    movaps [esp + nb312_vctot], xmm5	mulps  xmm3, [esp + nb312_tsc]		;# start doing lj 	movaps xmm2, xmm0	mulps  xmm2, xmm2	movaps xmm1, xmm2	mulps  xmm1, xmm2	mulps  xmm1, xmm2	;# xmm1=rinvsix 	movaps xmm2, xmm1	mulps  xmm2, xmm2	;# xmm2=rinvtwelve 	mulps  xmm1, [esp + nb312_c6]	mulps  xmm2, [esp + nb312_c12]	movaps xmm4, xmm2	subps  xmm4, xmm1	addps  xmm4, [esp + nb312_Vvdwtot]	mulps  xmm1, [esp + nb312_six]	mulps  xmm2, [esp + nb312_twelve]	movaps [esp + nb312_Vvdwtot], xmm4	subps  xmm2, xmm1	mulps  xmm2, xmm0	subps  xmm2, xmm3	mulps  xmm0, xmm2		movaps xmm1, xmm0	movaps xmm2, xmm0			xorps xmm3, xmm3	movaps xmm4, xmm3	movaps xmm5, xmm3	mulps xmm0, [esp + nb312_dxOO]	mulps xmm1, [esp + nb312_dyOO]	mulps xmm2, [esp + nb312_dzOO]	subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	addps xmm0, [esp + nb312_fixO]	addps xmm1, [esp + nb312_fiyO]	addps xmm2, [esp + nb312_fizO]	movaps [esp + nb312_fjxO], xmm3	movaps [esp + nb312_fjyO], xmm4	movaps [esp + nb312_fjzO], xmm5	movaps [esp + nb312_fixO], xmm0	movaps [esp + nb312_fiyO], xmm1	movaps [esp + nb312_fizO], xmm2	;# O-H1 interaction 	movaps xmm0, [esp + nb312_rinvOH1]	movaps xmm1, xmm0	mulps  xmm1, [esp + nb312_rsqOH1] ;# xmm1=r 	mulps  xmm1, [esp + nb312_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 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 + nb312_two]       ;# two*Heps2     movaps xmm3, [esp + nb312_qqOH]    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 

⌨️ 快捷键说明

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