⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nb_kernel332_ia32_3dnow.intel_syntax.s

📁 最著名最快的分子模拟软件
💻 S
📖 第 1 页 / 共 4 页
字号:
	;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqOO]	;# vcoul=qq*VV 	;# update vctot directly, use mm3 for fscal sum. 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5		;# dispersion table 	;# load all the table values we need 	movd mm4, [edx + ecx*4 + 16]	movd mm5, [edx + ecx*4 + 20]	movd mm6, [edx + ecx*4 + 24]	movd mm7, [edx + ecx*4 + 28]	pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 	pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 		movq mm4, [esp + nb332nf_c6]	pfmul mm5, mm4	;# Vvdw6            	;# update Vvdwtot to release mm5! 	pfadd mm5, [esp + nb332nf_Vvdwtot]      ;# add the earlier value 	movq [esp + nb332nf_Vvdwtot], mm5       ;# store the sum       	;# repulsion table 	;# load all the table values we need 	movd mm4, [edx + ecx*4 + 32]	movd mm5, [edx + ecx*4 + 36]	movd mm6, [edx + ecx*4 + 40]	movd mm7, [edx + ecx*4 + 44]	pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 	pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	movq mm6, [esp + nb332nf_c12]	pfmul mm5, mm6	;# Vvdw12 	;# change sign of fscal and multiply with rinv   	;# update Vvdwtot  	pfadd mm5, [esp + nb332nf_Vvdwtot]      ;# add the earlier value 	movq [esp + nb332nf_Vvdwtot], mm5       ;# store the sum       		;# Ready with the oxygen - time for hydrogens 		movq mm0, [esp + nb332nf_tmprsqH]	pfrsqrt mm1, mm0	pswapd mm0,mm0	pfrsqrt mm2, mm0	pswapd mm0,mm0	punpckldq mm1,mm2	;# seeds are in mm1 now, and rsq in mm0. 	movq mm2, mm1	pfmul mm1,mm1    pfrsqit1 mm1,mm0				    pfrcpit2 mm1,mm2	;# mm1=invsqrt 		pfmul mm0,mm1		;# mm0=r 	pfmul mm0, [esp + nb332nf_tsc]	pf2iw mm4, mm0	movq [esp + nb332nf_n1], mm4	pi2fd mm4,mm4	pfsub mm0, mm4               ;# now mm0 is eps and mm4 n0 	movq  mm2, mm0	pfmul mm2, mm2		;# mm0 is eps, mm2 eps2 		;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]	mov ecx, [esp + nb332nf_n1+4]	lea ecx, [ecx + ecx*2]	shl ecx, 2	punpckldq mm4, [edx + ecx*4]	punpckldq mm5, [edx + ecx*4 + 4]	punpckldq mm6, [edx + ecx*4 + 8]	punpckldq mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqOH]	;# vcoul=qq*VV 	;# update vctot 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5	;# interactions with j H1 	movq  mm0, [esi + eax*4 + 12]	movd  mm1, [esi + eax*4 + 20]	;# copy & expand to mm2-mm4 for the H interactions 	movq  mm2, mm0	movq  mm3, mm0	movq  mm4, mm1	punpckldq mm2,mm2	punpckhdq mm3,mm3	punpckldq mm4,mm4		pfsubr mm0, [esp + nb332nf_ixO]	pfsubr mm1, [esp + nb332nf_izO]			pfmul mm0,mm0	pfmul mm1,mm1	pfacc mm0, mm1	pfadd mm0, mm1		;# mm0=rsqO 		punpckldq mm2, mm2	punpckldq mm3, mm3	punpckldq mm4, mm4  ;# mm2-mm4 is jx-jz 	pfsubr mm2, [esp + nb332nf_ixH]	pfsubr mm3, [esp + nb332nf_iyH]	pfsubr mm4, [esp + nb332nf_izH] ;# mm2-mm4 is dxH-dzH 		pfmul mm2,mm2	pfmul mm3,mm3	pfmul mm4,mm4	pfadd mm3,mm2	pfadd mm3,mm4		;# mm3=rsqH 	movq [esp + nb332nf_tmprsqH], mm3    pfrsqrt mm1,mm0    movq mm2,mm1    pfmul mm1,mm1    pfrsqit1 mm1,mm0				    pfrcpit2 mm1,mm2	;# mm1=invsqrt 	pfmul mm0, mm1		;# mm0=rsq  		pfmul mm0, [esp + nb332nf_tsc]	pf2iw mm4, mm0	movd [esp + nb332nf_n1], mm4	pi2fd mm4,mm4	pfsub mm0, mm4               ;# now mm0 is eps and mm4 n0 	movq  mm2, mm0	pfmul mm2, mm2		;# mm0 is eps, mm2 eps2 	;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqOH]	;# vcoul=qq*VV 	;# update vctot directly 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5		movq mm0, [esp + nb332nf_tmprsqH]	pfrsqrt mm1, mm0	pswapd mm0,mm0	pfrsqrt mm2, mm0	pswapd mm0,mm0	punpckldq mm1,mm2	;# seeds are in mm1 now, and rsq in mm0. 	movq mm2, mm1	pfmul mm1,mm1    pfrsqit1 mm1,mm0				    pfrcpit2 mm1,mm2	;# mm1=invsqrt 		pfmul mm0,mm1		;# mm0=r 	pfmul mm0, [esp + nb332nf_tsc]	pf2iw mm4, mm0	movq [esp + nb332nf_n1], mm4	pi2fd mm4,mm4	pfsub mm0, mm4               ;# now mm0 is eps and mm4 n0 	movq  mm2, mm0	pfmul mm2, mm2		;# mm0 is eps, mm2 eps2 		;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]	mov ecx, [esp + nb332nf_n1+4]	lea ecx, [ecx + ecx*2]	shl ecx, 2	punpckldq mm4, [edx + ecx*4]	punpckldq mm5, [edx + ecx*4 + 4]	punpckldq mm6, [edx + ecx*4 + 8]	punpckldq mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqHH]	;# vcoul=qq*VV 	;# update vctot 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5		;# interactions with j H2 	movq  mm0, [esi + eax*4 + 24]	movd  mm1, [esi + eax*4 + 32]	;# copy & expand to mm2-mm4 for the H interactions 	movq  mm2, mm0	movq  mm3, mm0	movq  mm4, mm1	punpckldq mm2,mm2	punpckhdq mm3,mm3	punpckldq mm4,mm4	pfsubr mm0, [esp + nb332nf_ixO]	pfsubr mm1, [esp + nb332nf_izO]			pfmul mm0,mm0	pfmul mm1,mm1	pfacc mm0, mm1	pfadd mm0, mm1		;# mm0=rsqO 		punpckldq mm2, mm2	punpckldq mm3, mm3	punpckldq mm4, mm4  ;# mm2-mm4 is jx-jz 	pfsubr mm2, [esp + nb332nf_ixH]	pfsubr mm3, [esp + nb332nf_iyH]	pfsubr mm4, [esp + nb332nf_izH] ;# mm2-mm4 is dxH-dzH 		pfmul mm2,mm2	pfmul mm3,mm3	pfmul mm4,mm4	pfadd mm3,mm2	pfadd mm3,mm4		;# mm3=rsqH 	movq [esp + nb332nf_tmprsqH], mm3    pfrsqrt mm1,mm0    movq mm2,mm1    pfmul mm1,mm1    pfrsqit1 mm1,mm0				    pfrcpit2 mm1,mm2	;# mm1=invsqrt 	pfmul mm0, mm1	pfmul mm0, [esp + nb332nf_tsc]	pf2iw mm4, mm0	movd [esp + nb332nf_n1], mm4	pi2fd mm4,mm4	pfsub mm0, mm4               ;# now mm0 is eps and mm4 n0 	movq  mm2, mm0	pfmul mm2, mm2		;# mm0 is eps, mm2 eps2 	;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqOH]	;# vcoul=qq*VV 	;# update vctot directly 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5		movq mm0, [esp + nb332nf_tmprsqH]	pfrsqrt mm1, mm0	pswapd mm0,mm0	pfrsqrt mm2, mm0	pswapd mm0,mm0	punpckldq mm1,mm2	;# seeds are in mm1 now, and rsq in mm0. 	movq mm2, mm1	pfmul mm1,mm1    pfrsqit1 mm1,mm0				    pfrcpit2 mm1,mm2	;# mm1=invsqrt 		pfmul mm0,mm1		;# mm0=r 	pfmul mm0, [esp + nb332nf_tsc]	pf2iw mm4, mm0	movq [esp + nb332nf_n1], mm4	pi2fd mm4,mm4	pfsub mm0, mm4               ;# now mm0 is eps and mm4 n0 	movq  mm2, mm0	pfmul mm2, mm2		;# mm0 is eps, mm2 eps2 		;# coulomb table 	mov edx, [ebp + nb332nf_VFtab]	mov ecx, [esp + nb332nf_n1]	lea ecx, [ecx + ecx*2]	shl ecx, 2	;# load all values we need 	movd mm4, [edx + ecx*4]	movd mm5, [edx + ecx*4 + 4]	movd mm6, [edx + ecx*4 + 8]	movd mm7, [edx + ecx*4 + 12]	mov ecx, [esp + nb332nf_n1+4] ;# mm5 = Fp 	lea ecx, [ecx + ecx*2]	shl ecx, 2	punpckldq mm4, [edx + ecx*4]	punpckldq mm5, [edx + ecx*4 + 4]	punpckldq mm6, [edx + ecx*4 + 8]	punpckldq mm7, [edx + ecx*4 + 12]		pfmul mm6, mm0  ;# mm6 = Geps 			pfmul mm7, mm2	;# mm7 = Heps2 		pfadd mm5, mm6	pfadd mm5, mm7	;# mm5 = Fp 	pfmul mm5, mm0  ;# mm5=eps*Fp 	pfadd mm5, mm4	;#  mm5= VV 	pfmul mm5, [esp + nb332nf_qqHH]	;# vcoul=qq*VV 	;# update vctot 	pfadd mm5, [esp + nb332nf_vctot]	movq [esp + nb332nf_vctot], mm5			;#  done  - one more? 	dec dword ptr [esp + nb332nf_innerk]	jz  .nb332nf_updateouterdata	jmp .nb332nf_inner_loop	.nb332nf_updateouterdata:		;# get n from stack	mov esi, [esp + nb332nf_n]        ;# get group index for i particle         mov   edx, [ebp + nb332nf_gid]      	;# base of gid[]        mov   edx, [edx + esi*4]		;# ggid=gid[n]	movq  mm7, [esp + nb332nf_vctot]     	pfacc mm7,mm7	          ;# get and sum the two parts of total potential 	mov   eax, [ebp + nb332nf_Vc]	movd  mm6, [eax + edx*4] 	pfadd mm6, mm7	movd  [eax + edx*4], mm6          ;# increment vc[gid] 	movq  mm7, [esp + nb332nf_Vvdwtot]     	pfacc mm7,mm7	          ;# get and sum the two parts of total potential 	mov   eax, [ebp + nb332nf_Vvdw]	movd  mm6, [eax + edx*4] 	pfadd mm6, mm7	movd  [eax + edx*4], mm6          ;# increment Vvdwtot[gid]        	;# finish if last         mov ecx, [esp + nb332nf_nn1]	;# esi already loaded with n	inc esi        sub ecx, esi        jecxz .nb332nf_outerend        ;# not last, iterate outer loop once more!          mov [esp + nb332nf_n], esi        jmp .nb332nf_outer.nb332nf_outerend:        ;# check if more outer neighborlists remain        mov   ecx, [esp + nb332nf_nri]	;# esi already loaded with n above        sub   ecx, esi        jecxz .nb332nf_end        ;# non-zero, do one more workunit        jmp   .nb332nf_threadloop.nb332nf_end:	femms	mov eax, [esp + nb332nf_nouter] 		mov ebx, [esp + nb332nf_ninner]	mov ecx, [ebp + nb332nf_outeriter]	mov edx, [ebp + nb332nf_inneriter]	mov [ecx], eax	mov [edx], ebx	add esp, 152	pop edi	pop esi    	pop edx    	pop ecx    	pop ebx    	pop eax	leave	ret 

⌨️ 快捷键说明

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