nb_kernel113_ia32_sse.intel_syntax.s

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

S
1,895
字号
	;# rsqO in xmm7 	;# move ixH1-izH1 to xmm4-xmm6 	movaps xmm4, [esp + nb113_ixH1]	movaps xmm5, [esp + nb113_iyH1]	movaps xmm6, [esp + nb113_izH1]	;# calc dr 	subps xmm4, xmm0	subps xmm5, xmm1	subps xmm6, xmm2	;# store dr 	movaps [esp + nb113_dxH1], xmm4	movaps [esp + nb113_dyH1], xmm5	movaps [esp + nb113_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 + nb113_ixH2]	movaps xmm4, [esp + nb113_iyH2]	movaps xmm5, [esp + nb113_izH2]	;# calc dr 	subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	;# store dr 	movaps [esp + nb113_dxH2], xmm3	movaps [esp + nb113_dyH2], xmm4	movaps [esp + nb113_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 + nb113_iyM]	movaps xmm4, [esp + nb113_izM]	subps  xmm3, xmm1	subps  xmm4, xmm2	movaps xmm2, [esp + nb113_ixM]	subps  xmm2, xmm0		;# store dr 	movaps [esp + nb113_dxM], xmm2	movaps [esp + nb113_dyM], xmm3	movaps [esp + nb113_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 + nb113_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 + nb113_half]	movaps  [esp + nb113_rinvH1], xmm0	;# rinvH1 	;# rsqH2 - seed to xmm2 	rsqrtps xmm2, xmm5	movaps  xmm3, xmm2	mulps   xmm2, xmm2	movaps  xmm0, [esp + nb113_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 + nb113_half]	movaps  [esp + nb113_rinvH2], xmm0	;# rinvH2 	;# rsqM - seed to xmm2 	rsqrtps xmm2, xmm4	movaps  xmm3, xmm2	mulps   xmm2, xmm2	movaps  xmm0, [esp + nb113_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 + nb113_half]	movaps  [esp + nb113_rinvM], xmm0		;# Do the O LJ-only interaction directly.		rcpps   xmm2, xmm7	movaps  xmm1, [esp + nb113_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 + nb113_c6]	mulps   xmm1, [esp + nb113_c12]	movaps  xmm3, xmm1	subps   xmm3, xmm0  	;# Vvdw12-Vvdw6	addps   xmm3, [esp + nb113_Vvdwtot]	movaps  [esp + nb113_Vvdwtot], xmm3	mulps   xmm0, [esp + nb113_six]	mulps   xmm1, [esp + nb113_twelve]	subps   xmm1, xmm0	mulps   xmm1, xmm2 	;# fscal	movaps xmm3, [esp + nb113_dxO]	movaps xmm4, [esp + nb113_dyO]	movaps xmm5, [esp + nb113_dzO]	mulps  xmm3, xmm1	mulps  xmm4, xmm1	mulps  xmm5, xmm1	;# tx in xmm3-xmm5	;# update O forces 	movaps xmm0, [esp + nb113_fixO]	movaps xmm1, [esp + nb113_fiyO]	movaps xmm2, [esp + nb113_fizO]	addps  xmm0, xmm3	addps  xmm1, xmm4	addps  xmm2, xmm5	movaps [esp + nb113_fixO], xmm0	movaps [esp + nb113_fiyO], xmm1	movaps [esp + nb113_fizO], xmm2	;# update j forces with water O 	movaps [esp + nb113_fjx], xmm3	movaps [esp + nb113_fjy], xmm4	movaps [esp + nb113_fjz], xmm5	;# Do H1 interaction	movaps  xmm7, [esp + nb113_rinvH1]	movaps  xmm4, xmm7		mulps   xmm4, xmm4	;# xmm7=rinv, xmm4=rinvsq 	mulps  xmm7, [esp + nb113_qqH]	;# xmm7=vcoul 	mulps  xmm4, xmm7	;# total fsH1 in xmm4 	addps  xmm7, [esp + nb113_vctot]		movaps [esp + nb113_vctot], xmm7	movaps xmm0, [esp + nb113_dxH1]	movaps xmm1, [esp + nb113_dyH1]	movaps xmm2, [esp + nb113_dzH1]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4	;# update H1 forces 	movaps xmm3, [esp + nb113_fixH1]	movaps xmm4, [esp + nb113_fiyH1]	movaps xmm7, [esp + nb113_fizH1]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb113_fixH1], xmm3	movaps [esp + nb113_fiyH1], xmm4	movaps [esp + nb113_fizH1], xmm7	;# update j forces with water H1 	addps  xmm0, [esp + nb113_fjx]	addps  xmm1, [esp + nb113_fjy]	addps  xmm2, [esp + nb113_fjz]	movaps [esp + nb113_fjx], xmm0	movaps [esp + nb113_fjy], xmm1	movaps [esp + nb113_fjz], xmm2	;# Done with H1, do H2 interactions	movaps  xmm7, [esp + nb113_rinvH2]	movaps  xmm4, xmm7		mulps   xmm4, xmm4	;# xmm7=rinv, xmm4=rinvsq 	mulps  xmm7, [esp + nb113_qqH]	;# xmm7=vcoul 	mulps  xmm4, xmm7	;# total fsH2 in xmm4 	addps  xmm7, [esp + nb113_vctot]		movaps [esp + nb113_vctot], xmm7	movaps xmm0, [esp + nb113_dxH2]	movaps xmm1, [esp + nb113_dyH2]	movaps xmm2, [esp + nb113_dzH2]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4	;# update H2 forces 	movaps xmm3, [esp + nb113_fixH2]	movaps xmm4, [esp + nb113_fiyH2]	movaps xmm7, [esp + nb113_fizH2]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb113_fixH2], xmm3	movaps [esp + nb113_fiyH2], xmm4	movaps [esp + nb113_fizH2], xmm7	addps xmm0, [esp + nb113_fjx]        addps xmm1, [esp + nb113_fjy]        addps xmm2, [esp + nb113_fjz]	movaps [esp + nb113_fjx], xmm0	movaps [esp + nb113_fjy], xmm1	movaps [esp + nb113_fjz], xmm2	;# Done with H2, do M interactions	movaps  xmm7, [esp + nb113_rinvM]	movaps  xmm4, xmm7		mulps   xmm4, xmm4	;# xmm7=rinv, xmm4=rinvsq 	mulps  xmm7, [esp + nb113_qqM]	;# xmm7=vcoul 	mulps  xmm4, xmm7	;# total fsM in xmm4 	addps  xmm7, [esp + nb113_vctot]		movaps [esp + nb113_vctot], xmm7	movaps xmm0, [esp + nb113_dxM]	movaps xmm1, [esp + nb113_dyM]	movaps xmm2, [esp + nb113_dzM]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4		;# update M forces 	movaps xmm3, [esp + nb113_fixM]	movaps xmm4, [esp + nb113_fiyM]	movaps xmm7, [esp + nb113_fizM]	addps  xmm3, xmm0	addps  xmm4, xmm1	addps  xmm7, xmm2	movaps [esp + nb113_fixM], xmm3	movaps [esp + nb113_fiyM], xmm4	movaps [esp + nb113_fizM], xmm7	mov edi, [ebp + nb113_faction]	;# update j forces from stored values	addps xmm0, [esp + nb113_fjx]	addps xmm1, [esp + nb113_fjy]	addps xmm2, [esp + nb113_fjz]	movlps xmm4, [edi + eax*4]	movlps xmm7, [edi + ecx*4]	movhps xmm4, [edi + ebx*4]	movhps xmm7, [edi + edx*4]	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	movss  [edi + ebx*4 + 8], xmm1	movss  [edi + ecx*4 + 8], xmm3	movss  [edi + edx*4 + 8], xmm4		;# should we do one more iteration? 	sub dword ptr [esp + nb113_innerk],  4	jl    .nb113_odd_inner	jmp   .nb113_unroll_loop.nb113_odd_inner:		add dword ptr [esp + nb113_innerk],  4	jnz   .nb113_odd_loop	jmp   .nb113_updateouterdata.nb113_odd_loop:	mov   edx, [esp + nb113_innerjjnr] 	;# pointer to jjnr[k] 	mov   eax, [edx]		add dword ptr [esp + nb113_innerjjnr],  4	 	xorps xmm4, xmm4  	;# clear reg.	movss xmm4, [esp + nb113_iqM]	mov esi, [ebp + nb113_charge] 	movhps xmm4, [esp + nb113_iqH]  ;# [qM  0  qH  qH] 	shufps xmm4, xmm4, 41	;# [0 qH qH qM]	movss xmm3, [esi + eax*4]	;# charge in xmm3 	shufps xmm3, xmm3, 0	mulps xmm3, xmm4	movaps [esp + nb113_qqM], xmm3	;# use dummy qq for storage 		xorps xmm6, xmm6	mov esi, [ebp + nb113_type]	mov ebx, [esi + eax*4]	mov esi, [ebp + nb113_vdwparam]	shl ebx, 1		add ebx, [esp + nb113_ntia]	movlps xmm6, [esi + ebx*4]	movaps xmm7, xmm6	shufps xmm6, xmm6, 252  ;# constant 11111100	shufps xmm7, xmm7, 253  ;# constant 11111101	movaps [esp + nb113_c6], xmm6	movaps [esp + nb113_c12], xmm7		mov esi, [ebp + nb113_pos]	lea eax, [eax + eax*2]  	movss xmm3, [esp + nb113_ixO]	movss xmm4, [esp + nb113_iyO]	movss xmm5, [esp + nb113_izO]	movss xmm0, [esp + nb113_ixH1]	movss xmm1, [esp + nb113_iyH1]	movss xmm2, [esp + nb113_izH1]	unpcklps xmm3, [esp + nb113_ixH2] 	;# ixO ixH2 - -	unpcklps xmm4, [esp + nb113_iyH2]  	;# iyO iyH2 - -	unpcklps xmm5, [esp + nb113_izH2]	;# izO izH2 - -	unpcklps xmm0, [esp + nb113_ixM] 	;# ixH1 ixM - -	unpcklps xmm1, [esp + nb113_iyM]  	;# iyH1 iyM - -	unpcklps xmm2, [esp + nb113_izM]	;# izH1 izM - -	unpcklps xmm3, xmm0  	;# ixO ixH1 ixH2 ixM	unpcklps xmm4, xmm1 	;# same for y	unpcklps xmm5, xmm2 	;# same for z		;# move j coords to xmm0-xmm2 	movss xmm0, [esi + eax*4]	movss xmm1, [esi + eax*4 + 4]	movss xmm2, [esi + eax*4 + 8]	shufps xmm0, xmm0, 0	shufps xmm1, xmm1, 0	shufps xmm2, xmm2, 0		subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	;# use O distances for storage	movaps [esp + nb113_dxO], xmm3	movaps [esp + nb113_dyO], xmm4	movaps [esp + nb113_dzO], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	addps  xmm4, xmm3	addps  xmm4, xmm5	;# rsq in xmm4 	rsqrtps xmm5, xmm4	;# lookup seed in xmm5 	movaps xmm2, xmm5	mulps xmm5, xmm5	movaps xmm1, [esp + nb113_three]	mulps xmm5, xmm4	;# rsq*lu*lu 				movaps xmm0, [esp + nb113_half]	subps xmm1, xmm5	;# constant 30-rsq*lu*lu 	mulps xmm1, xmm2		mulps xmm0, xmm1	;# xmm0=rinv		movaps xmm1, xmm0 	mulps xmm1, xmm1	;# rinvsq 	movaps xmm7, xmm0	mulps  xmm7, [esp + nb113_qqM] ;# vcoul	movaps xmm6, xmm7		addps  xmm7, [esp + nb113_vctot]		movaps [esp + nb113_vctot], xmm7	movaps xmm2, xmm1	mulss  xmm1, xmm1	mulss  xmm1, xmm2	;# xmm1=rinvsix	xorps  xmm4, xmm4	movss  xmm4, xmm1	mulss  xmm4, xmm4	;# xmm4=rinvtwelve 	mulss  xmm1, [esp + nb113_c6]	mulss  xmm4, [esp + nb113_c12]	movaps xmm3, xmm4	subss  xmm3, xmm1	;# xmm3=Vvdw12-Vvdw6 	mulss  xmm1, [esp + nb113_six]	mulss  xmm4, [esp + nb113_twelve]	subss  xmm4, xmm1	addss  xmm3, [esp + nb113_Vvdwtot]	movss  [esp + nb113_Vvdwtot], xmm3	addps  xmm4, xmm6	mulps  xmm4, xmm0	mulps  xmm4, xmm0  	;# fscal			movaps xmm0, [esp + nb113_dxO]	movaps xmm1, [esp + nb113_dyO]	movaps xmm2, [esp + nb113_dzO]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4 ;# xmm0-xmm2 now contains tx-tz (partial force)		movss  xmm3, [esp + nb113_fixO]		movss  xmm4, [esp + nb113_fiyO]		movss  xmm5, [esp + nb113_fizO]		addss  xmm3, xmm0	addss  xmm4, xmm1	addss  xmm5, xmm2	movss  [esp + nb113_fixO], xmm3		movss  [esp + nb113_fiyO], xmm4		movss  [esp + nb113_fizO], xmm5	;# updated the O force now do the H's		movaps xmm3, xmm0	movaps xmm4, xmm1	movaps xmm5, xmm2      	shufps xmm3, xmm3, 0x39	;# shift right 	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm3, [esp + nb113_fixH1]	addss  xmm4, [esp + nb113_fiyH1]	addss  xmm5, [esp + nb113_fizH1]	movss  [esp + nb113_fixH1], xmm3		movss  [esp + nb113_fiyH1], xmm4		movss  [esp + nb113_fizH1], xmm5	;# updated the H1 force 	shufps xmm3, xmm3, 0x39	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm3, [esp + nb113_fixH2]	addss  xmm4, [esp + nb113_fiyH2]	addss  xmm5, [esp + nb113_fizH2]	movss  [esp + nb113_fixH2], xmm3		movss  [esp + nb113_fiyH2], xmm4		movss  [esp + nb113_fizH2], xmm5	;# updated the H2 force 	mov edi, [ebp + nb113_faction]	shufps xmm3, xmm3, 0x39	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm3, [esp + nb113_fixM]	addss  xmm4, [esp + nb113_fiyM]	addss  xmm5, [esp + nb113_fizM]	movss  [esp + nb113_fixM], xmm3		movss  [esp + nb113_fiyM], xmm4		movss  [esp + nb113_fizM], xmm5	;# updated the M force 	;# the fj's - move in from mem start by acc. tx/ty/tz in xmm0, xmm1	movlps xmm6, [edi + eax*4]	movss  xmm7, [edi + eax*4 + 8]		movhlps xmm3, xmm0	movhlps xmm4, xmm1	movhlps xmm5, xmm2	addps   xmm3, xmm0	addps   xmm4, xmm1	addps   xmm5, xmm2	movaps  xmm0, xmm3	movaps  xmm1, xmm4	movaps  xmm2, xmm5			shufps xmm3, xmm3, 0x39	;# shift right 	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm0, xmm3	addss  xmm1, xmm4	addss  xmm2, xmm5	unpcklps xmm0, xmm1 	;# x,y sum in xmm0, z sum in xmm2

⌨️ 快捷键说明

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