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 + -
显示快捷键?