nb_kernel214_ia32_sse.intel_syntax.s

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

S
2,167
字号
	add   edx, 0	mov   [esp + nb214_innerk], edx	;# number of innerloop atoms 	jge   .nb214_unroll_loop	jmp   .nb214_single_check.nb214_unroll_loop:		;# quad-unroll innerloop here 	mov   edx, [esp + nb214_innerjjnr] 	;# pointer to jjnr[k] 	mov   eax, [edx]		mov   ebx, [edx + 4] 	mov   ecx, [edx + 8]	mov   edx, [edx + 12]     	;# eax-edx=jnr1-4 		add dword ptr [esp + nb214_innerjjnr],  16 ;# advance pointer (unroll 4) 	mov esi, [ebp + nb214_pos]   	;# base of pos[] 	lea   eax, [eax + eax*2] 	;# replace jnr with j3 	lea   ebx, [ebx + ebx*2]		lea   ecx, [ecx + ecx*2] 	;# replace jnr with j3 	lea   edx, [edx + edx*2]			;# move j coordinates to local temp variables	;# Load Ox, Oy, Oz, H1x 	movlps xmm1, [esi + eax*4]	;#  Oxa   Oya    -    -	movlps xmm4, [esi + ecx*4]	;#  Oxc   Oyc    -    -	movhps xmm1, [esi + ebx*4]	;#  Oxa   Oya   Oxb   Oyb 	movhps xmm4, [esi + edx*4]	;#  Oxc   Oyc   Oxd   Oyd 	movaps xmm0, xmm1		;#  Oxa   Oya   Oxb   Oyb 	shufps xmm0, xmm4, 0x88		;#  Oxa   Oxb   Oxc   Oxd	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 + nb214_jxO], xmm0	movaps [esp + nb214_jyO], xmm1	movaps [esp + nb214_jzO], xmm2	movaps [esp + nb214_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 + nb214_jyH1], xmm0	movaps [esp + nb214_jzH1], xmm1	movaps [esp + nb214_jxH2], xmm2	movaps [esp + nb214_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 + nb214_jzH2], xmm0	movaps [esp + nb214_jxM], xmm1	movaps [esp + nb214_jyM], xmm2	movaps [esp + nb214_jzM], xmm3		;# start calculating pairwise distances	movaps xmm0, [esp + nb214_ixO]	movaps xmm1, [esp + nb214_iyO]	movaps xmm2, [esp + nb214_izO]	movaps xmm3, [esp + nb214_ixH1]	movaps xmm4, [esp + nb214_iyH1]	movaps xmm5, [esp + nb214_izH1]	subps  xmm0, [esp + nb214_jxO]	subps  xmm1, [esp + nb214_jyO]	subps  xmm2, [esp + nb214_jzO]	subps  xmm3, [esp + nb214_jxH1]	subps  xmm4, [esp + nb214_jyH1]	subps  xmm5, [esp + nb214_jzH1]	movaps [esp + nb214_dxOO], xmm0	movaps [esp + nb214_dyOO], xmm1	movaps [esp + nb214_dzOO], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb214_dxH1H1], xmm3	movaps [esp + nb214_dyH1H1], xmm4	movaps [esp + nb214_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 + nb214_rsqOO], xmm0	movaps [esp + nb214_rsqH1H1], xmm3	movaps xmm0, [esp + nb214_ixH1]	movaps xmm1, [esp + nb214_iyH1]	movaps xmm2, [esp + nb214_izH1]	movaps xmm3, xmm0	movaps xmm4, xmm1	movaps xmm5, xmm2	subps  xmm0, [esp + nb214_jxH2]	subps  xmm1, [esp + nb214_jyH2]	subps  xmm2, [esp + nb214_jzH2]	subps  xmm3, [esp + nb214_jxM]	subps  xmm4, [esp + nb214_jyM]	subps  xmm5, [esp + nb214_jzM]	movaps [esp + nb214_dxH1H2], xmm0	movaps [esp + nb214_dyH1H2], xmm1	movaps [esp + nb214_dzH1H2], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb214_dxH1M], xmm3	movaps [esp + nb214_dyH1M], xmm4	movaps [esp + nb214_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 + nb214_rsqH1H2], xmm0	movaps [esp + nb214_rsqH1M], xmm3	movaps xmm0, [esp + nb214_ixH2]	movaps xmm1, [esp + nb214_iyH2]	movaps xmm2, [esp + nb214_izH2]	movaps xmm3, xmm0	movaps xmm4, xmm1	movaps xmm5, xmm2	subps  xmm0, [esp + nb214_jxH1]	subps  xmm1, [esp + nb214_jyH1]	subps  xmm2, [esp + nb214_jzH1]	subps  xmm3, [esp + nb214_jxH2]	subps  xmm4, [esp + nb214_jyH2]	subps  xmm5, [esp + nb214_jzH2]	movaps [esp + nb214_dxH2H1], xmm0	movaps [esp + nb214_dyH2H1], xmm1	movaps [esp + nb214_dzH2H1], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb214_dxH2H2], xmm3	movaps [esp + nb214_dyH2H2], xmm4	movaps [esp + nb214_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 + nb214_rsqH2H1], xmm0	movaps [esp + nb214_rsqH2H2], xmm3	movaps xmm0, [esp + nb214_ixH2]	movaps xmm1, [esp + nb214_iyH2]	movaps xmm2, [esp + nb214_izH2]	movaps xmm3, [esp + nb214_ixM]	movaps xmm4, [esp + nb214_iyM]	movaps xmm5, [esp + nb214_izM]	subps  xmm0, [esp + nb214_jxM]	subps  xmm1, [esp + nb214_jyM]	subps  xmm2, [esp + nb214_jzM]	subps  xmm3, [esp + nb214_jxH1]	subps  xmm4, [esp + nb214_jyH1]	subps  xmm5, [esp + nb214_jzH1]	movaps [esp + nb214_dxH2M], xmm0	movaps [esp + nb214_dyH2M], xmm1	movaps [esp + nb214_dzH2M], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb214_dxMH1], xmm3	movaps [esp + nb214_dyMH1], xmm4	movaps [esp + nb214_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 + nb214_rsqH2M], xmm0	movaps [esp + nb214_rsqMH1], xmm4	movaps xmm0, [esp + nb214_ixM]	movaps xmm1, [esp + nb214_iyM]	movaps xmm2, [esp + nb214_izM]	movaps xmm3, xmm0	movaps xmm4, xmm1	movaps xmm5, xmm2	subps  xmm0, [esp + nb214_jxH2]	subps  xmm1, [esp + nb214_jyH2]	subps  xmm2, [esp + nb214_jzH2]	subps  xmm3, [esp + nb214_jxM]	subps  xmm4, [esp + nb214_jyM]	subps  xmm5, [esp + nb214_jzM]	movaps [esp + nb214_dxMH2], xmm0	movaps [esp + nb214_dyMH2], xmm1	movaps [esp + nb214_dzMH2], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [esp + nb214_dxMM], xmm3	movaps [esp + nb214_dyMM], xmm4	movaps [esp + nb214_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 + nb214_rsqMH2], xmm0	movaps [esp + nb214_rsqMM], xmm4	;# start by doing reciprocal for OO	movaps  xmm7, [esp + nb214_rsqOO]	rcpps   xmm2, xmm7	movaps  xmm1, [esp + nb214_two]	mulps   xmm7, xmm2	subps   xmm1, xmm7	mulps   xmm2, xmm1 ;# rinvsq 	movaps [esp + nb214_rinvsqOO], xmm2		;# next step is invsqrt - do two at a time.	rsqrtps xmm1, [esp + nb214_rsqH1H1]	rsqrtps xmm5, [esp + nb214_rsqH1H2]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb214_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb214_rsqH1H1]	mulps   xmm5, [esp + nb214_rsqH1H2]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb214_half] ;# rinvH1H1 	mulps   xmm7, [esp + nb214_half] ;# rinvH1H2 	movaps  [esp + nb214_rinvH1H1], xmm3	movaps  [esp + nb214_rinvH1H2], xmm7				rsqrtps xmm1, [esp + nb214_rsqH1M]	rsqrtps xmm5, [esp + nb214_rsqH2H1]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb214_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb214_rsqH1M]	mulps   xmm5, [esp + nb214_rsqH2H1]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb214_half] 	mulps   xmm7, [esp + nb214_half]	movaps  [esp + nb214_rinvH1M], xmm3	movaps  [esp + nb214_rinvH2H1], xmm7				rsqrtps xmm1, [esp + nb214_rsqH2H2]	rsqrtps xmm5, [esp + nb214_rsqH2M]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb214_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb214_rsqH2H2]	mulps   xmm5, [esp + nb214_rsqH2M]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb214_half] 	mulps   xmm7, [esp + nb214_half]	movaps  [esp + nb214_rinvH2H2], xmm3	movaps  [esp + nb214_rinvH2M], xmm7		rsqrtps xmm1, [esp + nb214_rsqMH1]	rsqrtps xmm5, [esp + nb214_rsqMH2]	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [esp + nb214_three]	movaps  xmm7, xmm3	mulps   xmm1, [esp + nb214_rsqMH1]	mulps   xmm5, [esp + nb214_rsqMH2]	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [esp + nb214_half] 	mulps   xmm7, [esp + nb214_half]	movaps  [esp + nb214_rinvMH1], xmm3	movaps  [esp + nb214_rinvMH2], xmm7        			rsqrtps xmm1, [esp + nb214_rsqMM]	movaps  xmm2, xmm1	mulps   xmm1, xmm1	movaps  xmm3, [esp + nb214_three]	mulps   xmm1, [esp + nb214_rsqMM]	subps   xmm3, xmm1	mulps   xmm3, xmm2	mulps   xmm3, [esp + nb214_half] 	movaps  [esp + nb214_rinvMM], xmm3		;# start with OO LJ interaction	movaps xmm0, [esp + nb214_rinvsqOO]	movaps xmm1, xmm0	mulps  xmm1, xmm1	;# rinv4	mulps  xmm1, xmm0	;# xmm1=rinvsix 	movaps xmm2, xmm1	mulps  xmm2, xmm2	;# xmm2=rinvtwelve 	mulps  xmm1, [esp + nb214_c6]	mulps  xmm2, [esp + nb214_c12]	movaps xmm4, xmm2	subps  xmm4, xmm1	addps  xmm4, [esp + nb214_Vvdwtot]	mulps  xmm1, [esp + nb214_six]	mulps  xmm2, [esp + nb214_twelve]	movaps [esp + nb214_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 + nb214_dxOO]	mulps xmm1, [esp + nb214_dyOO]	mulps xmm2, [esp + nb214_dzOO]	subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	addps xmm0, [esp + nb214_fixO]	addps xmm1, [esp + nb214_fiyO]	addps xmm2, [esp + nb214_fizO]	movaps [esp + nb214_fjxO], xmm3	movaps [esp + nb214_fjyO], xmm4	movaps [esp + nb214_fjzO], xmm5	movaps [esp + nb214_fixO], xmm0	movaps [esp + nb214_fiyO], xmm1	movaps [esp + nb214_fizO], xmm2	;# Coulomb interactions 	;# start with H1-H1 interaction 	movaps xmm0, [esp + nb214_rinvH1H1]	movaps xmm7, xmm0	;# xmm7=rinv 	movaps xmm5, [esp + nb214_krf]	mulps  xmm0, xmm0	;# xmm0=rinvsq 	mulps  xmm5, [esp + nb214_rsqH1H1] ;# xmm5=krsq 	movaps xmm6, xmm5	addps  xmm6, xmm7	;# xmm6=rinv+ krsq 	subps  xmm6, [esp + nb214_crf]	mulps  xmm6, [esp + nb214_qqHH] ;# xmm6=voul=qq*(rinv+ krsq-crf) 	mulps xmm5, [esp + nb214_two]	subps  xmm7, xmm5	;# xmm7=rinv-2*krsq 	mulps  xmm7, [esp + nb214_qqHH] ;# xmm7 = coul part of fscal 		addps  xmm6, [esp + nb214_vctot] ;# local vctot summation variable 	mulps  xmm0, xmm7		movaps xmm1, xmm0	movaps xmm2, xmm0	xorps xmm3, xmm3	movaps xmm4, xmm3	movaps xmm5, xmm3	mulps xmm0, [esp + nb214_dxH1H1]	mulps xmm1, [esp + nb214_dyH1H1]	mulps xmm2, [esp + nb214_dzH1H1]	subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	addps xmm0, [esp + nb214_fixH1]	addps xmm1, [esp + nb214_fiyH1]	addps xmm2, [esp + nb214_fizH1]	movaps [esp + nb214_fjxH1], xmm3	movaps [esp + nb214_fjyH1], xmm4	movaps [esp + nb214_fjzH1], xmm5	movaps [esp + nb214_fixH1], xmm0	movaps [esp + nb214_fiyH1], xmm1	movaps [esp + nb214_fizH1], xmm2	;# H1-H2 interaction 	movaps xmm0, [esp + nb214_rinvH1H2]	movaps xmm7, xmm0	;# xmm7=rinv 	movaps xmm5, [esp + nb214_krf]	movaps xmm1, xmm0	mulps  xmm5, [esp + nb214_rsqH1H2] ;# xmm5=krsq 	movaps xmm4, xmm5	addps  xmm4, xmm7	;# xmm4=r inv+ krsq 	subps  xmm4, [esp + nb214_crf]	mulps  xmm0, xmm0	mulps  xmm4, [esp + nb214_qqHH] ;# xmm4=voul=qq*(rinv+ krsq-crf) 	mulps  xmm5, [esp + nb214_two]	subps  xmm7, xmm5	;# xmm7=rinv-2*krsq 

⌨️ 快捷键说明

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