nb_kernel234_x86_64_sse.intel_syntax.s

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

S
2,212
字号
	mulps xmm5, [rsp + nb234_dzH2M]	mulps xmm6, [rsp + nb234_dxMM]	mulps xmm7, [rsp + nb234_dyMM]	mulps xmm8, [rsp + nb234_dzMM]    movaps xmm13, xmm0    movaps xmm14, xmm1    addps xmm11, xmm2    addps xmm0, [rsp + nb234_fixH1]    addps xmm1, [rsp + nb234_fiyH1]    addps xmm2, [rsp + nb234_fizH1]    addps xmm13, xmm3    addps xmm14, xmm4    addps xmm11, xmm5    addps xmm3, [rsp + nb234_fixH2]    addps xmm4, [rsp + nb234_fiyH2]    addps xmm5, [rsp + nb234_fizH2]    addps xmm13, xmm6    addps xmm14, xmm7    addps xmm11, xmm8    addps xmm6, [rsp + nb234_fixM]    addps xmm7, [rsp + nb234_fiyM]    addps xmm8, [rsp + nb234_fizM]    movaps [rsp + nb234_fixH1], xmm0    movaps [rsp + nb234_fiyH1], xmm1    movaps [rsp + nb234_fizH1], xmm2    movaps [rsp + nb234_fixH2], xmm3    movaps [rsp + nb234_fiyH2], xmm4    movaps [rsp + nb234_fizH2], xmm5    movaps [rsp + nb234_fixM], xmm6    movaps [rsp + nb234_fiyM], xmm7    movaps [rsp + nb234_fizM], xmm8        ;# xmm0 = fMx    ;# xmm1 = fMy    ;# xmm2 = fMz    movaps xmm0, xmm13    unpcklps xmm13, xmm14    unpckhps xmm0, xmm14        addps xmm9, xmm13    addps xmm10, xmm0    movhlps  xmm12, xmm11 ;# fMzc fMzd        movlps [rdi + rax*4 + 36], xmm9    movhps [rdi + rbx*4 + 36], xmm9    movlps [rdi + rcx*4 + 36], xmm10    movhps [rdi + rdx*4 + 36], xmm10    movss  [rdi + rax*4 + 44], xmm11    movss  [rdi + rcx*4 + 44], xmm12    shufps xmm11, xmm11, 1    shufps xmm12, xmm12, 1    movss  [rdi + rbx*4 + 44], xmm11    movss  [rdi + rdx*4 + 44], xmm12		;# should we do one more iteration? 	sub dword ptr [rsp + nb234_innerk],  4	jl    .nb234_single_check	jmp   .nb234_unroll_loop.nb234_single_check:	add dword ptr [rsp + nb234_innerk],  4	jnz   .nb234_single_loop	jmp   .nb234_updateouterdata.nb234_single_loop:	mov   rdx, [rsp + nb234_innerjjnr] 	;# pointer to jjnr[k] 	mov   eax, [rdx]		add qword ptr [rsp + nb234_innerjjnr],  4		mov rsi, [rbp + nb234_pos]	lea   rax, [rax + rax*2]  	;# fetch j coordinates	movlps xmm3,  [rsi + rax*4]		;#  Ox  Oy  	movlps xmm4,  [rsi + rax*4 + 16]	;# H1y H1z 	movlps xmm5,  [rsi + rax*4 + 32]	;# H2z  Mx 	movhps xmm3,  [rsi + rax*4 + 8]   	;#  Ox  Oy  Oz H1x	movhps xmm4,  [rsi + rax*4 + 24]	;# H1y H1z H2x H2y	movhps xmm5,  [rsi + rax*4 + 40]	;# H2z  Mx  My  Mz	;# transpose	movaps xmm0, xmm4	movaps xmm1, xmm3	movaps xmm2, xmm4	movaps xmm6, xmm3	shufps xmm4, xmm5, 18  ;# (00010010)  h2x - Mx  - 	shufps xmm3, xmm0, 193 ;# (11000001)  Oy  - H1y - 	shufps xmm2, xmm5, 35  ;# (00100011) H2y - My  -  	shufps xmm1, xmm0, 18  ;# (00010010)  Oz  - H1z - 	;#  xmm6: Ox - - H1x   xmm5: H2z - - Mz 	shufps xmm6, xmm4, 140 ;# (10001100) Ox H1x H2x Mx 	shufps xmm3, xmm2, 136 ;# (10001000) Oy H1y H2y My 	shufps xmm1, xmm5, 200 ;# (11001000) Oz H1z H2z Mz	;# store all j coordinates in jO  	movaps [rsp + nb234_jxO], xmm6	movaps [rsp + nb234_jyO], xmm3	movaps [rsp + nb234_jzO], xmm1    movaps xmm0, xmm6   ;# jxO    movaps xmm2, xmm1   ;# jzO    movaps xmm1, xmm3   ;# jyO    movaps xmm4, xmm3   ;# jyO    movaps xmm3, xmm6   ;# jxO    movaps xmm5, xmm2   ;# jzO        	;# do O and M in parallel	subps  xmm0, [rsp + nb234_ixO] 	subps  xmm1, [rsp + nb234_iyO] 	subps  xmm2, [rsp + nb234_izO] 	subps  xmm3, [rsp + nb234_ixM] 	subps  xmm4, [rsp + nb234_iyM]	subps  xmm5, [rsp + nb234_izM]		movaps [rsp + nb234_dxOO], xmm0	movaps [rsp + nb234_dyOO], xmm1	movaps [rsp + nb234_dzOO], xmm2	movaps [rsp + nb234_dxMM], xmm3	movaps [rsp + nb234_dyMM], xmm4	movaps [rsp + nb234_dzMM], xmm5		mulps xmm0, xmm0	mulps xmm1, xmm1	mulps xmm2, xmm2	addps xmm0, xmm1	addps xmm0, xmm2	;# have rsq in xmm0 	mulps xmm3, xmm3	mulps xmm4, xmm4	mulps xmm5, xmm5	addps xmm4, xmm3	addps xmm4, xmm5	;# have rsq in xmm4	;# Save data 	movaps [rsp + nb234_rsqOO], xmm0	movaps [rsp + nb234_rsqMM], xmm4		;# do 1/x for O	rsqrtps xmm1, xmm0	movaps  xmm2, xmm1	mulps   xmm1, xmm1	movaps  xmm3, [rsp + nb234_three]	mulps   xmm1, xmm0	;# rsq*lu*lu 	subps   xmm3, xmm1	;# constant 30-rsq*lu*lu 	mulps   xmm3, xmm2	;# lu*(3-rsq*lu*lu) 	mulps   xmm3, [rsp + nb234_half]	movaps  [rsp + nb234_rinvOO], xmm3	;# rinvH2 		;# 1/sqrt(x) for M	rsqrtps xmm5, xmm4	movaps  xmm6, xmm5		mulps   xmm5, xmm5	movaps  xmm7, [rsp + nb234_three]	mulps   xmm5, xmm4	subps   xmm7, xmm5	mulps   xmm7, xmm6	mulps   xmm7, [rsp + nb234_half] ;# rinv iH1 - j water 	movaps [rsp + nb234_rinvMM], xmm7	;# LJ table interaction	movaps xmm0, [rsp + nb234_rinvOO]	movss xmm1, xmm0	mulss  xmm1, [rsp + nb234_rsqOO] ;# xmm1=r 	mulss  xmm1, [rsp + nb234_tsc]		    cvttps2pi mm6, xmm1    cvtpi2ps xmm3, mm6	subss    xmm1, xmm3	;# xmm1=eps     movss xmm2, xmm1    mulss  xmm2, xmm2       ;# xmm2=eps2     pslld mm6, 3		    mov  rsi, [rbp + nb234_VFtab]    movd r8d, mm6	    ;# dispersion     movlps xmm5, [rsi + r8*4]    movaps xmm4, xmm5    shufps xmm4, xmm7, 136  ;# constant 10001000    shufps xmm5, xmm7, 221  ;# constant 11011101    movlps xmm7, [rsi + r8*4 + 8]    movaps xmm6, xmm7    shufps xmm6, xmm3, 136  ;# constant 10001000    shufps xmm7, xmm3, 221  ;# constant 11011101    ;# dispersion table ready, in xmm4-xmm7     mulss  xmm6, xmm1       ;# xmm6=Geps     mulss  xmm7, xmm2       ;# xmm7=Heps2     addss  xmm5, xmm6    addss  xmm5, xmm7       ;# xmm5=Fp     mulss  xmm7, [rsp + nb234_two]       ;# two*Heps2     addss  xmm7, xmm6    addss  xmm7, xmm5 ;# xmm7=FF     mulss  xmm5, xmm1 ;# xmm5=eps*Fp     addss  xmm5, xmm4 ;# xmm5=VV     movss xmm4, [rsp + nb234_c6]    mulss  xmm7, xmm4    ;# fijD     mulss  xmm5, xmm4    ;# Vvdw6 	xorps  xmm3, xmm3		mulps  xmm7, [rsp + nb234_tsc]	subss  xmm3, xmm7	movss  [rsp + nb234_fstmp], xmm3     addss  xmm5, [rsp + nb234_Vvdwtot]    movss [rsp + nb234_Vvdwtot], xmm5    ;# repulsion     movlps xmm5, [rsi + r8*4 + 16]    movaps xmm4, xmm5    shufps xmm4, xmm7, 136  ;# constant 10001000    shufps xmm5, xmm7, 221  ;# constant 11011101    movlps xmm7, [rsi + r8*4 + 24]    movaps xmm6, xmm7    shufps xmm6, xmm3, 136  ;# constant 10001000    shufps xmm7, xmm3, 221  ;# constant 11011101    ;# table ready, in xmm4-xmm7     mulss  xmm6, xmm1       ;# xmm6=Geps     mulss  xmm7, xmm2       ;# xmm7=Heps2     addss  xmm5, xmm6    addss  xmm5, xmm7       ;# xmm5=Fp     mulss  xmm7, [rsp + nb234_two]       ;# two*Heps2     addss  xmm7, xmm6    addss  xmm7, xmm5 ;# xmm7=FF     mulss  xmm5, xmm1 ;# xmm5=eps*Fp     addss  xmm5, xmm4 ;# xmm5=VV     movss xmm4, [rsp + nb234_c12]    mulss  xmm7, xmm4 ;# fijR     mulss  xmm5, xmm4 ;# Vvdw12 	movaps xmm3, [rsp + nb234_fstmp]	mulss  xmm7, [rsp + nb234_tsc]	subss  xmm3, xmm7    addss  xmm5, [rsp + nb234_Vvdwtot]    movss [rsp + nb234_Vvdwtot], xmm5	mulss xmm0, xmm3	movaps xmm1, xmm0	movaps xmm2, xmm0			mulss  xmm0, [rsp + nb234_dxOO]	mulss  xmm1, [rsp + nb234_dyOO]	mulss  xmm2, [rsp + nb234_dzOO]	xorps   xmm3, xmm3	xorps   xmm4, xmm4	xorps   xmm5, xmm5	addss   xmm3, xmm0	addss   xmm4, xmm1	addss   xmm5, xmm2	movaps  [rsp + nb234_fjxO], xmm3	movaps  [rsp + nb234_fjyO], xmm4	movaps  [rsp + nb234_fjzO], xmm5	addss   xmm0, [rsp + nb234_fixO]	addss   xmm1, [rsp + nb234_fiyO]	addss   xmm2, [rsp + nb234_fizO]	movss  [rsp + nb234_fixO], xmm0	movss  [rsp + nb234_fiyO], xmm1	movss  [rsp + nb234_fizO], xmm2	;# do  M coulomb interaction	movaps xmm0, [rsp + nb234_rinvMM]	movaps xmm7, xmm0	;# xmm7=rinv 	movaps xmm5, [rsp + nb234_krf]	mulps  xmm0, xmm0	;# xmm0=rinvsq 	;# fetch charges to xmm3 (temporary) 	xorps  xmm3, xmm3	movss   xmm3, [rsp + nb234_qqMH]	movhps  xmm3, [rsp + nb234_qqMM]	shufps  xmm3, xmm3, 193 ;# constant 11000001 	mulps  xmm5, [rsp + nb234_rsqMM] ;# xmm5=krsq 	movaps xmm6, xmm5	addps  xmm6, xmm7	;# xmm6=rinv+ krsq 	subps  xmm6, [rsp + nb234_crf]	mulps  xmm6, xmm3 ;# xmm6=voul=qq*(rinv+ krsq-crf) 	mulps xmm5, [rsp + nb234_two]	subps  xmm7, xmm5	;# xmm7=rinv-2*krsq 	mulps  xmm7, xmm3 ;# xmm7 = coul part of fscal 		addps  xmm6, [rsp + nb234_vctot] 	movaps [rsp + nb234_vctot], xmm6	mulps  xmm0, xmm7	movaps xmm1, xmm0	movaps xmm2, xmm0				mulps   xmm0, [rsp + nb234_dxMM]	mulps   xmm1, [rsp + nb234_dyMM]	mulps   xmm2, [rsp + nb234_dzMM]	;# update forces M - j water 	movaps  xmm3, [rsp + nb234_fjxO]	movaps  xmm4, [rsp + nb234_fjyO]	movaps  xmm5, [rsp + nb234_fjzO]	addps   xmm3, xmm0	addps   xmm4, xmm1	addps   xmm5, xmm2	movaps  [rsp + nb234_fjxO], xmm3	movaps  [rsp + nb234_fjyO], xmm4	movaps  [rsp + nb234_fjzO], xmm5	addps   xmm0, [rsp + nb234_fixM]	addps   xmm1, [rsp + nb234_fiyM]	addps   xmm2, [rsp + nb234_fizM]	movaps  [rsp + nb234_fixM], xmm0	movaps  [rsp + nb234_fiyM], xmm1	movaps  [rsp + nb234_fizM], xmm2			;# i H1 & H2 simultaneously first get i particle coords:     movaps  xmm0, [rsp + nb234_jxO]    movaps  xmm1, [rsp + nb234_jyO]    movaps  xmm2, [rsp + nb234_jzO]    movaps  xmm3, xmm0    movaps  xmm4, xmm1    movaps  xmm5, xmm2	subps   xmm0, [rsp + nb234_ixH1]	subps   xmm1, [rsp + nb234_iyH1]	subps   xmm2, [rsp + nb234_izH1]	subps   xmm3, [rsp + nb234_ixH2] 	subps   xmm4, [rsp + nb234_iyH2] 	subps   xmm5, [rsp + nb234_izH2] 	movaps [rsp + nb234_dxH1H1], xmm0	movaps [rsp + nb234_dyH1H1], xmm1	movaps [rsp + nb234_dzH1H1], xmm2	movaps [rsp + nb234_dxH2H2], xmm3	movaps [rsp + nb234_dyH2H2], xmm4	movaps [rsp + nb234_dzH2H2], xmm5	mulps xmm0, xmm0	mulps xmm1, xmm1	mulps xmm2, xmm2	mulps xmm3, xmm3	mulps xmm4, xmm4	mulps xmm5, xmm5	addps xmm0, xmm1	addps xmm4, xmm3	addps xmm0, xmm2	;# have rsqH1 in xmm0 	addps xmm4, xmm5	;# have rsqH2 in xmm4 	movaps  [rsp + nb234_rsqH1H1], xmm0	movaps  [rsp + nb234_rsqH2H2], xmm4			;# start doing invsqrt use rsq values in xmm0, xmm4 	rsqrtps xmm1, xmm0	rsqrtps xmm5, xmm4	movaps  xmm2, xmm1	movaps  xmm6, xmm5	mulps   xmm1, xmm1	mulps   xmm5, xmm5	movaps  xmm3, [rsp + nb234_three]	movaps  xmm7, xmm3	mulps   xmm1, xmm0	mulps   xmm5, xmm4	subps   xmm3, xmm1	subps   xmm7, xmm5	mulps   xmm3, xmm2	mulps   xmm7, xmm6	mulps   xmm3, [rsp + nb234_half] ;# rinvH1H1	mulps   xmm7, [rsp + nb234_half] ;# rinvH2H2	movaps  [rsp + nb234_rinvH1H1], xmm3	movaps  [rsp + nb234_rinvH2H2], xmm7		;# Do H1 coulomb interaction	movaps xmm0, [rsp + nb234_rinvH1H1]	movaps xmm7, xmm0	;# xmm7=rinv 	movaps xmm5, [rsp + nb234_krf]	mulps  xmm0, xmm0	;# xmm0=rinvsq 	;# fetch charges to xmm3 (temporary) 	xorps  xmm3, xmm3	movss   xmm3, [rsp + nb234_qqHH]	movhps  xmm3, [rsp + nb234_qqMH]	shufps  xmm3, xmm3, 193 ;# constant 11000001 	mulps  xmm5, [rsp + nb234_rsqH1H1] ;# xmm5=krsq 	movaps xmm6, xmm5	addps  xmm6, xmm7	;# xmm6=rinv+ krsq 	subps  xmm6, [rsp + nb234_crf]	mulps  xmm6, xmm3 ;# xmm6=voul=qq*(rinv+ krsq-crf) 	mulps xmm5, [rsp + nb234_two]	subps  xmm7, xmm5	;# xmm7=rinv-2*krsq 	mulps  xmm7, xmm3 ;# xmm7 = coul part of fscal 		addps  xmm6, [rsp + nb234_vctot] 	movaps [rsp + nb234_vctot], xmm6	mulps  xmm0, xmm7	movaps xmm1, xmm0	movaps xmm2, xmm0				mulps   xmm0, [rsp + nb234_dxH1H1]	mulps   xmm1, [rsp + nb234_dyH1H1]	mulps   xmm2, [rsp + nb234_dzH1H1]	;# update forces H1 - j water 	movaps  xmm3, [rsp + nb234_fjxO]	movaps  xmm4, [rsp + nb234_fjyO]	movaps  xmm5, [rsp + nb234_fjzO]	addps   xmm3, xmm0	addps   xmm4, xmm1	addps   xmm5, xmm2	movaps  [rsp + nb234_fjxO], xmm3	movaps  [rsp + nb234_fjyO], xmm4	movaps  [rsp + nb234_fjzO], xmm5	addps   xmm0, [rsp + nb234_fixH1]	addps   xmm1, [rsp + nb234_fiyH1]	addps   xmm2, [rsp + nb234_fizH1]	movaps  [rsp + nb234_fixH1], xmm0	movaps  [rsp + nb234_fiyH1], xmm1	movaps  [rsp + nb234_fizH1], xmm2		;# H2 Coulomb	movaps xmm0, [rsp + nb234_rinvH2H2]	movaps xmm7, xmm0	;# xmm7=rinv 	movaps xmm5, [rsp + nb234_krf]	mulps  xmm0, xmm0	;# xmm0=rinvsq 	;# fetch charges to xmm3 (temporary) 	xorps  xmm3, xmm3	movss   xmm3, [rsp + nb234_qqHH]	movhps  xmm3, [rsp + nb234_qqMH]	shufps  xmm3, xmm3, 193 ;# constant 11000001 	mulps  xmm5, [rsp + nb234_rsqH2H2] ;# xmm5=krsq 	movaps xmm6, xmm5	addps  xmm6, xmm7	;# xmm6=rinv+ krsq 	subps  xmm6, [rsp + nb234_crf]	mulps  xmm6, xmm3 ;# xmm6=voul=qq*(rinv+ krsq-crf) 	mulps xmm5, [rsp + nb234_two]	subps  xmm7, xmm5	;# xmm7=rinv-2*krsq 	mulps  xmm7, xmm3 ;# xmm7 = coul part of fscal 		addps  xmm6, [rsp + nb234_vctot] ;# local vctot summation variable	movaps [rsp + nb234_vctot], xmm6	mulps  xmm0, xmm7	movaps xmm1, xmm0	movaps xmm2, xmm0				mulps   xmm0, [rsp + nb234_dxH2H2]	mulps   xmm1, [rsp + nb234_dyH2H2]	mulps   xmm2, [rsp + nb234_dzH2H2]

⌨️ 快捷键说明

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