nb_kernel313_ia32_sse.intel_syntax.s

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

S
2,372
字号
	movaps [esp + nb313_dzO], xmm6	;# square it 	mulps xmm4,xmm4	mulps xmm5,xmm5	mulps xmm6,xmm6	addps xmm4, xmm5	addps xmm4, xmm6	movaps xmm7, xmm4	;# rsqO in xmm7 	;# move ixH1-izH1 to xmm4-xmm6 	movaps xmm4, [esp + nb313_ixH1]	movaps xmm5, [esp + nb313_iyH1]	movaps xmm6, [esp + nb313_izH1]	;# calc dr 	subps xmm4, xmm0	subps xmm5, xmm1	subps xmm6, xmm2	;# store dr 	movaps [esp + nb313_dxH1], xmm4	movaps [esp + nb313_dyH1], xmm5	movaps [esp + nb313_dzH1], xmm6	;# square it 	mulps xmm4,xmm4	mulps xmm5,xmm5	mulps xmm6,xmm6	addps xmm6, xmm5	addps xmm6, xmm4	;# rsqH1 in xmm6 	;# move ixH2-izH2 to xmm3-xmm5  	movaps xmm3, [esp + nb313_ixH2]	movaps xmm4, [esp + nb313_iyH2]	movaps xmm5, [esp + nb313_izH2]	;# calc dr 	subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	;# store dr 	movaps [esp + nb313_dxH2], xmm3	movaps [esp + nb313_dyH2], xmm4	movaps [esp + nb313_dzH2], xmm5	;# square it 	mulps xmm3,xmm3	mulps xmm4,xmm4	mulps xmm5,xmm5	addps xmm5, xmm4	addps xmm5, xmm3		;# move ixM-izM to xmm2-xmm4  	movaps xmm3, [esp + nb313_iyM]	movaps xmm4, [esp + nb313_izM]	subps  xmm3, xmm1	subps  xmm4, xmm2	movaps xmm2, [esp + nb313_ixM]	subps  xmm2, xmm0		;# store dr 	movaps [esp + nb313_dxM], xmm2	movaps [esp + nb313_dyM], xmm3	movaps [esp + nb313_dzM], xmm4	;# square it 	mulps xmm2,xmm2	mulps xmm3,xmm3	mulps xmm4,xmm4	addps xmm4, xmm3	addps xmm4, xmm2		;# rsqM in xmm4, rsqH2 in xmm5, rsqH1 in xmm6, rsqO in xmm7 	;# rsqH1 - seed in xmm2 	rsqrtps xmm2, xmm6	movaps  xmm3, xmm2	mulps   xmm2, xmm2	movaps  xmm0, [esp + nb313_three]	mulps   xmm2, xmm6	;# rsq*lu*lu 	subps   xmm0, xmm2	;# constant 30-rsq*lu*lu 	mulps   xmm0, xmm3	;# lu*(3-rsq*lu*lu) 	mulps   xmm0, [esp + nb313_half]	movaps  [esp + nb313_rinvH1], xmm0	;# rinvH1 in xmm4 	mulps   xmm6, xmm0	movaps  [esp + nb313_rH1], xmm6	;# rsqH2 - seed to xmm2 	rsqrtps xmm2, xmm5	movaps  xmm3, xmm2	mulps   xmm2, xmm2	movaps  xmm0, [esp + nb313_three]	mulps   xmm2, xmm5	;# rsq*lu*lu 	subps   xmm0, xmm2	;# constant 30-rsq*lu*lu 	mulps   xmm0, xmm3	;# lu*(3-rsq*lu*lu) 	mulps   xmm0, [esp + nb313_half]	movaps  [esp + nb313_rinvH2], xmm0	;# rinvH2 in xmm4 	mulps   xmm5, xmm0	movaps  [esp + nb313_rH2], xmm5	;# rsqM - seed to xmm2 	rsqrtps xmm2, xmm4	movaps  xmm3, xmm2	mulps   xmm2, xmm2	movaps  xmm0, [esp + nb313_three]	mulps   xmm2, xmm4	;# rsq*lu*lu 	subps   xmm0, xmm2	;# constant 30-rsq*lu*lu 	mulps   xmm0, xmm3	;# lu*(3-rsq*lu*lu) 	mulps   xmm0, [esp + nb313_half]	movaps  [esp + nb313_rinvM], xmm0	;# rinvM in xmm5 	mulps   xmm4, xmm0	movaps  [esp + nb313_rM], xmm4			;# Do the O LJ-only interaction directly.		rcpps   xmm2, xmm7	movaps  xmm1, [esp + nb313_two]	mulps   xmm7, xmm2	subps   xmm1, xmm7	mulps   xmm2, xmm1 ;# rinvsq 	movaps  xmm0, xmm2	mulps   xmm0, xmm2  	;# r4	mulps   xmm0, xmm2 	;# r6	movaps  xmm1, xmm0	mulps   xmm1, xmm1  	;# r12	mulps   xmm0, [esp + nb313_c6]	mulps   xmm1, [esp + nb313_c12]	movaps  xmm3, xmm1	subps   xmm3, xmm0  	;# Vvdw12-Vvdw6	addps   xmm3, [esp + nb313_Vvdwtot]	movaps  [esp + nb313_Vvdwtot], xmm3	mulps   xmm0, [esp + nb313_six]	mulps   xmm1, [esp + nb313_twelve]	subps   xmm1, xmm0	mulps   xmm1, xmm2 	;# fscal	movaps xmm3, [esp + nb313_dxO]	movaps xmm4, [esp + nb313_dyO]	movaps xmm5, [esp + nb313_dzO]	mulps  xmm3, xmm1	mulps  xmm4, xmm1	mulps  xmm5, xmm1	;# tx in xmm3-xmm5	;# update O forces 	movaps xmm0, [esp + nb313_fixO]	movaps xmm1, [esp + nb313_fiyO]	movaps xmm2, [esp + nb313_fizO]	addps  xmm0, xmm3	addps  xmm1, xmm4	addps  xmm2, xmm5	movaps [esp + nb313_fixO], xmm0	movaps [esp + nb313_fiyO], xmm1	movaps [esp + nb313_fizO], xmm2	;# update j forces with water O 	movaps [esp + nb313_fjx], xmm3	movaps [esp + nb313_fjy], xmm4	movaps [esp + nb313_fjz], xmm5	;# Do H1 interaction	mov  esi, [ebp + nb313_VFtab]		movaps xmm7, [esp + nb313_rH1]	mulps   xmm7, [esp + nb313_tsc]	movhlps xmm4, xmm7	cvttps2pi mm6, xmm7	cvttps2pi mm7, xmm4	;# mm6/mm7 contain lu indices 		cvtpi2ps xmm3, mm6	cvtpi2ps xmm4, mm7	movlhps xmm3, xmm4		subps xmm7, xmm3	movaps xmm1, xmm7	;# 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				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 + nb313_two]   	;# two*Heps2 	movaps xmm0, [esp + nb313_qqH]	addps  xmm7, xmm6	addps  xmm7, xmm5 ;# xmm7=FF 	mulps  xmm5, xmm1 ;# xmm5=eps*Fp 	addps  xmm5, xmm4 ;# xmm5=VV 	mulps  xmm5, xmm0 ;# vcoul=qq*VV  	mulps  xmm7, xmm0 ;# fijC=FF*qq 	;# at this point mm5 contains vcoul and xmm7 fijC 	;# increment vcoul 	xorps  xmm4, xmm4	addps  xmm5, [esp + nb313_vctot]	mulps  xmm7, [esp + nb313_rinvH1]	movaps [esp + nb313_vctot], xmm5 	mulps  xmm7, [esp + nb313_tsc]	subps xmm4, xmm7	movaps xmm0, [esp + nb313_dxH1]	movaps xmm1, [esp + nb313_dyH1]	movaps xmm2, [esp + nb313_dzH1]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4	;# update H1 forces 	movaps xmm3, [esp + nb313_fixH1]	movaps xmm4, [esp + nb313_fiyH1]	movaps xmm7, [esp + nb313_fizH1]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb313_fixH1], xmm3	movaps [esp + nb313_fiyH1], xmm4	movaps [esp + nb313_fizH1], xmm7	;# update j forces with water H1 	addps  xmm0, [esp + nb313_fjx]	addps  xmm1, [esp + nb313_fjy]	addps  xmm2, [esp + nb313_fjz]	movaps [esp + nb313_fjx], xmm0	movaps [esp + nb313_fjy], xmm1	movaps [esp + nb313_fjz], xmm2	;# Done with H1, do H2 interactions 	movaps xmm7, [esp + nb313_rH2]	mulps   xmm7, [esp + nb313_tsc]	movhlps xmm4, xmm7	cvttps2pi mm6, xmm7	cvttps2pi mm7, xmm4	;# mm6/mm7 contain lu indices 		cvtpi2ps xmm3, mm6	cvtpi2ps xmm4, mm7	movlhps xmm3, xmm4		subps xmm7, xmm3	movaps xmm1, xmm7	;# 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  ;# shuffle 10001000	shufps xmm5, xmm7, 221  ;# shuffle 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  ;# shuf 10001000	shufps xmm7, xmm3, 221  ;# shuf 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 + nb313_two]   	;# two*Heps2 	movaps xmm0, [esp + nb313_qqH]	addps  xmm7, xmm6	addps  xmm7, xmm5 ;# xmm7=FF 	mulps  xmm5, xmm1 ;# xmm5=eps*Fp 	addps  xmm5, xmm4 ;# xmm5=VV 	mulps  xmm5, xmm0 ;# vcoul=qq*VV  	mulps  xmm7, xmm0 ;# fijC=FF*qq 	;# at this point mm5 contains vcoul and xmm0 fijC 	;# increment vcoul 	xorps  xmm4, xmm4	addps  xmm5, [esp + nb313_vctot]	mulps  xmm7, [esp + nb313_rinvH2]	movaps [esp + nb313_vctot], xmm5 	mulps  xmm7, [esp + nb313_tsc]	subps  xmm4, xmm7	movaps xmm0, [esp + nb313_dxH2]	movaps xmm1, [esp + nb313_dyH2]	movaps xmm2, [esp + nb313_dzH2]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4	movd eax, mm0   	movd ebx, mm1	movd ecx, mm2	movd edx, mm3		;# update H2 forces 	movaps xmm3, [esp + nb313_fixH2]	movaps xmm4, [esp + nb313_fiyH2]	movaps xmm7, [esp + nb313_fizH2]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb313_fixH2], xmm3	movaps [esp + nb313_fiyH2], xmm4	movaps [esp + nb313_fizH2], xmm7	addps xmm0, [esp + nb313_fjx]        addps xmm1, [esp + nb313_fjy]        addps xmm2, [esp + nb313_fjz]	movaps [esp + nb313_fjx], xmm0	movaps [esp + nb313_fjy], xmm1	movaps [esp + nb313_fjz], xmm2	;# Done with H2, do M interactions 	movaps xmm7, [esp + nb313_rM]	mulps   xmm7, [esp + nb313_tsc]	movhlps xmm4, xmm7	cvttps2pi mm6, xmm7	cvttps2pi mm7, xmm4	;# mm6/mm7 contain lu indices 		cvtpi2ps xmm3, mm6	cvtpi2ps xmm4, mm7	movlhps xmm3, xmm4		subps xmm7, xmm3	movaps xmm1, xmm7	;# 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 + nb313_two]   	;# two*Heps2 	movaps xmm0, [esp + nb313_qqM]	addps  xmm7, xmm6	addps  xmm7, xmm5 ;# xmm7=FF 	mulps  xmm5, xmm1 ;# xmm5=eps*Fp 	addps  xmm5, xmm4 ;# xmm5=VV 	mulps  xmm5, xmm0 ;# vcoul=qq*VV  	mulps  xmm7, xmm0 ;# fijC=FF*qq 	;# at this point mm5 contains vcoul and xmm0 fijC 	;# increment vcoul 	xorps  xmm4, xmm4	addps  xmm5, [esp + nb313_vctot]	mulps  xmm7, [esp + nb313_rinvM]	movaps [esp + nb313_vctot], xmm5 	mulps  xmm7, [esp + nb313_tsc]	subps  xmm4, xmm7	movaps xmm0, [esp + nb313_dxM]	movaps xmm1, [esp + nb313_dyM]	movaps xmm2, [esp + nb313_dzM]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4	movd eax, mm0   	movd ebx, mm1	movd ecx, mm2	movd edx, mm3		;# update M forces 	movaps xmm3, [esp + nb313_fixM]	movaps xmm4, [esp + nb313_fiyM]	movaps xmm7, [esp + nb313_fizM]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb313_fixM], xmm3	movaps [esp + nb313_fiyM], xmm4	movaps [esp + nb313_fizM], xmm7	mov edi, [ebp + nb313_faction]	;# update j forces from stored values	addps xmm0, [esp + nb313_fjx]	addps xmm1, [esp + nb313_fjy]	addps xmm2, [esp + nb313_fjz]	movlps xmm4, [edi + eax*4]	movlps xmm7, [edi + ecx*4]	movhps xmm4, [edi + ebx*4]	movhps xmm7, [edi + edx*4]	movd eax, mm0	movd ebx, mm1	movd ecx, mm2	movd edx, mm3			movaps xmm3, xmm4	shufps xmm3, xmm7, 136  ;# constant 10001000	shufps xmm4, xmm7, 221  ;# constant 11011101		;# xmm3 has fjx, xmm4 has fjy 	subps xmm3, xmm0	subps xmm4, xmm1	;# unpack them back for storing 	movaps xmm7, xmm3	unpcklps xmm7, xmm4	unpckhps xmm3, xmm4		movlps [edi + eax*4], xmm7	movlps [edi + ecx*4], xmm3	movhps [edi + ebx*4], xmm7	movhps [edi + edx*4], xmm3	;# finally z forces 	movss  xmm0, [edi + eax*4 + 8]	movss  xmm1, [edi + ebx*4 + 8]	movss  xmm3, [edi + ecx*4 + 8]	movss  xmm4, [edi + edx*4 + 8]	subss  xmm0, xmm2	shufps xmm2, xmm2, 229  ;# constant 11100101	subss  xmm1, xmm2	shufps xmm2, xmm2, 234  ;# constant 11101010	subss  xmm3, xmm2	shufps xmm2, xmm2, 255  ;# constant 11111111	subss  xmm4, xmm2	movss  [edi + eax*4 + 8], xmm0

⌨️ 快捷键说明

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