nb_kernel133_x86_64_sse.intel_syntax.s

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

S
2,156
字号
    	movlps xmm13, [rsi + r10*4 + 8]	movlps xmm14, [rsi + r10*4 + 24]	movhps xmm7,  [rsi + r9*4 + 8]	movhps xmm11, [rsi + r9*4 + 24]    	movhps xmm13, [rsi + r11*4 + 8]	movhps xmm14, [rsi + r11*4 + 24]    movaps xmm6, xmm7    movaps xmm10, xmm11    	shufps xmm6, xmm13, 136  ;# 10001000	shufps xmm10, xmm14, 136  ;# 10001000	shufps xmm7, xmm13, 221  ;# 11011101	shufps xmm11, xmm14, 221  ;# 11011101    ;# dispersion table in xmm4-xmm7, repulsion table in xmm8-xmm11        mulps  xmm7, xmm3    ;# Heps    mulps  xmm11, xmm3     mulps  xmm6, xmm3   ;# Geps    mulps  xmm10, xmm3     mulps  xmm7, xmm3   ;# Heps2    mulps  xmm11, xmm3     addps  xmm5, xmm6  ;# F+Geps    addps  xmm9, xmm10     addps  xmm5, xmm7   ;# F+Geps+Heps2 = Fp    addps  xmm9, xmm11     addps  xmm7, xmm7    ;# 2*Heps2    addps  xmm11, xmm11    addps  xmm7, xmm6   ;# 2*Heps2+Geps    addps  xmm11, xmm10        addps  xmm7, xmm5  ;# FF = Fp + 2*Heps2 + Geps    addps  xmm11, xmm9    mulps  xmm5, xmm3  ;# eps*Fp    mulps  xmm9, xmm3    movaps xmm12, [rsp + nb133_c6]    movaps xmm13, [rsp + nb133_c12]    addps  xmm5, xmm4 ;# VV    addps  xmm9, xmm8    mulps  xmm5, xmm12  ;# VV*c6 = vnb6    mulps  xmm9, xmm13  ;# VV*c12 = vnb12    addps  xmm5, xmm9    addps  xmm5, [rsp + nb133_Vvdwtot]    movaps [rsp + nb133_Vvdwtot], xmm5            mulps  xmm7, xmm12   ;# FF*c6 = fnb6    mulps  xmm11, xmm13   ;# FF*c12  = fnb12    addps  xmm7, xmm11        mulps  xmm7, [rsp + nb133_tsc]    mulps  xmm7, xmm15   ;# -fscal    xorps  xmm9, xmm9        subps  xmm9, xmm7     ;# fscal    movaps xmm10, xmm9    movaps xmm11, xmm9    mulps  xmm9,  [rsp + nb133_dxO] ;# fx/fy/fz    mulps  xmm10, [rsp + nb133_dyO]    mulps  xmm11, [rsp + nb133_dzO]    ;# save j force temporarily    movaps [rsp + nb133_fjx], xmm9    movaps [rsp + nb133_fjy], xmm10    movaps [rsp + nb133_fjz], xmm11        ;# increment i O force    addps xmm9, [rsp + nb133_fixO]    addps xmm10, [rsp + nb133_fiyO]    addps xmm11, [rsp + nb133_fizO]    movaps [rsp + nb133_fixO], xmm9    movaps [rsp + nb133_fiyO], xmm10    movaps [rsp + nb133_fizO], xmm11    ;# finished O LJ interaction.    ;# do H1, H2, and M interactions in parallel.    ;# xmm0-xmm2 still contain j coordinates.            movaps xmm3, xmm0    movaps xmm4, xmm1    movaps xmm5, xmm2    movaps xmm6, xmm0    movaps xmm7, xmm1    movaps xmm8, xmm2        subps xmm0, [rsp + nb133_ixH1]    subps xmm1, [rsp + nb133_iyH1]    subps xmm2, [rsp + nb133_izH1]    subps xmm3, [rsp + nb133_ixH2]    subps xmm4, [rsp + nb133_iyH2]    subps xmm5, [rsp + nb133_izH2]    subps xmm6, [rsp + nb133_ixM]    subps xmm7, [rsp + nb133_iyM]    subps xmm8, [rsp + nb133_izM]    	movaps [rsp + nb133_dxH1], xmm0	movaps [rsp + nb133_dyH1], xmm1	movaps [rsp + nb133_dzH1], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [rsp + nb133_dxH2], xmm3	movaps [rsp + nb133_dyH2], xmm4	movaps [rsp + nb133_dzH2], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	movaps [rsp + nb133_dxM], xmm6	movaps [rsp + nb133_dyM], xmm7	movaps [rsp + nb133_dzM], xmm8	mulps  xmm6, xmm6	mulps  xmm7, xmm7	mulps  xmm8, xmm8	addps  xmm0, xmm1	addps  xmm0, xmm2	addps  xmm3, xmm4	addps  xmm3, xmm5    addps  xmm6, xmm7    addps  xmm6, xmm8	;# start doing invsqrt for j atoms	rsqrtps xmm1, xmm0	rsqrtps xmm4, xmm3    rsqrtps xmm7, xmm6		movaps  xmm2, xmm1	movaps  xmm5, xmm4    movaps  xmm8, xmm7    	mulps   xmm1, xmm1 ;# lu*lu	mulps   xmm4, xmm4 ;# lu*lu    mulps   xmm7, xmm7 ;# lu*lu			movaps  xmm9, [rsp + nb133_three]	movaps  xmm10, xmm9    movaps  xmm11, xmm9	mulps   xmm1, xmm0 ;# rsq*lu*lu	mulps   xmm4, xmm3 ;# rsq*lu*lu     mulps   xmm7, xmm6 ;# rsq*lu*lu		subps   xmm9, xmm1	subps   xmm10, xmm4    subps   xmm11, xmm7 ;# 3-rsq*lu*lu	mulps   xmm9, xmm2	mulps   xmm10, xmm5    mulps   xmm11, xmm8 ;# lu*(3-rsq*lu*lu)	movaps  xmm0, [rsp + nb133_half]	mulps   xmm9, xmm0  ;# rinvH1	mulps   xmm10, xmm0 ;# rinvH2    mulps   xmm11, xmm0 ;# rinvM		;# interactions     movaps xmm0, xmm9    ;# rinv    movaps xmm1, xmm10    movaps xmm2, xmm11    mulps  xmm9, xmm9    ;# rinvsq    mulps  xmm10, xmm10    mulps  xmm11, xmm11    mulps  xmm0, [rsp + nb133_qqH]     mulps  xmm1, [rsp + nb133_qqH]     mulps  xmm2, [rsp + nb133_qqM]     mulps  xmm9, xmm0    mulps  xmm10, xmm1    mulps  xmm11, xmm2        addps xmm0, [rsp + nb133_vctot]     addps xmm1, xmm2    addps xmm0, xmm1    movaps [rsp + nb133_vctot], xmm0    	;# move j forces to local temp variables 	mov rdi, [rbp + nb133_faction]    movlps xmm0, [rdi + rax*4] ;# jxa jya  -   -    movlps xmm1, [rdi + rcx*4] ;# jxc jyc  -   -    movhps xmm0, [rdi + rbx*4] ;# jxa jya jxb jyb     movhps xmm1, [rdi + rdx*4] ;# jxc jyc jxd jyd     movss  xmm2, [rdi + rax*4 + 8] ;# jza  -  -  -    movss  xmm3, [rdi + rcx*4 + 8] ;# jzc  -  -  -    movss  xmm5, [rdi + rbx*4 + 8] ;# jzb  - - -    movss  xmm6, [rdi + rdx*4 + 8] ;# jzd - - -    movlhps xmm2, xmm5    movlhps xmm3, xmm6        shufps xmm2, xmm3,  136  ;# 10001000 => jza jzb jzc jzd    ;# xmm0: jxa jya jxb jyb     ;# xmm1: jxc jyc jxd jyd    ;# xmm2: jza jzb jzc jzd    movaps xmm7, xmm9    movaps xmm8, xmm9    movaps xmm13, xmm11    movaps xmm14, xmm11    movaps xmm15, xmm11    movaps xmm11, xmm10    movaps xmm12, xmm10	mulps xmm7, [rsp + nb133_dxH1]	mulps xmm8, [rsp + nb133_dyH1]	mulps xmm9, [rsp + nb133_dzH1]	mulps xmm10, [rsp + nb133_dxH2]	mulps xmm11, [rsp + nb133_dyH2]	mulps xmm12, [rsp + nb133_dzH2]	mulps xmm13, [rsp + nb133_dxM]	mulps xmm14, [rsp + nb133_dyM]	mulps xmm15, [rsp + nb133_dzM]    ;# fetch forces from O interaction    movaps xmm3, [rsp + nb133_fjx]    movaps xmm4, [rsp + nb133_fjy]    addps  xmm2, [rsp + nb133_fjz]    addps xmm3, xmm7    addps xmm4, xmm8    addps xmm2, xmm9    addps xmm7, [rsp + nb133_fixH1]    addps xmm8, [rsp + nb133_fiyH1]    addps xmm9, [rsp + nb133_fizH1]    addps xmm3, xmm10    addps xmm4, xmm11    addps xmm2, xmm12    addps xmm10, [rsp + nb133_fixH2]    addps xmm11, [rsp + nb133_fiyH2]    addps xmm12, [rsp + nb133_fizH2]    addps xmm3, xmm13    addps xmm4, xmm14    addps xmm2, xmm15    addps xmm13, [rsp + nb133_fixM]    addps xmm14, [rsp + nb133_fiyM]    addps xmm15, [rsp + nb133_fizM]    movaps [rsp + nb133_fixH1], xmm7    movaps [rsp + nb133_fiyH1], xmm8    movaps [rsp + nb133_fizH1], xmm9    movaps [rsp + nb133_fixH2], xmm10    movaps [rsp + nb133_fiyH2], xmm11    movaps [rsp + nb133_fizH2], xmm12    movaps [rsp + nb133_fixM], xmm13    movaps [rsp + nb133_fiyM], xmm14    movaps [rsp + nb133_fizM], xmm15        ;# xmm3 = fjx , xmm4 = fjy  , xmm2=fjz, already updated.    movaps xmm5, xmm3       unpcklps xmm3, xmm4   ;# fjx1 fjy1 fjx2 fjy2    unpckhps xmm5, xmm4   ;# fjx3 fjy3 fjx4 fjy4        addps xmm0, xmm3     addps xmm1, xmm5    movhlps  xmm3, xmm2 ;# fjzc fjzd        movlps [rdi + rax*4], xmm0    movhps [rdi + rbx*4], xmm0    movlps [rdi + rcx*4], xmm1    movhps [rdi + rdx*4], xmm1    movss  [rdi + rax*4 + 8], xmm2    movss  [rdi + rcx*4 + 8], xmm3    shufps xmm2, xmm2, 1    shufps xmm3, xmm3, 1    movss  [rdi + rbx*4 + 8], xmm2    movss  [rdi + rdx*4 + 8], xmm3	;# should we do one more iteration? 	sub dword ptr [rsp + nb133_innerk],  4	jl    .nb133_odd_inner	jmp   .nb133_unroll_loop.nb133_odd_inner:		add dword ptr [rsp + nb133_innerk],  4	jnz   .nb133_odd_loop	jmp   .nb133_updateouterdata.nb133_odd_loop:	mov   rdx, [rsp + nb133_innerjjnr] 	;# pointer to jjnr[k] 	mov   eax, [rdx]		add qword ptr [rsp + nb133_innerjjnr],  4 	xorps xmm4, xmm4  	;# clear reg.	movss xmm4, [rsp + nb133_iqM]	mov rsi, [rbp + nb133_charge] 	movhps xmm4, [rsp + nb133_iqH]  ;# [qM  0  qH  qH] 	shufps xmm4, xmm4, 41	;# [0 qH qH qM]	movss xmm3, [rsi + rax*4]	;# charge in xmm3 	shufps xmm3, xmm3, 0	mulps xmm3, xmm4	movaps [rsp + nb133_qqM], xmm3	;# use dummy qq for storage 		xorps xmm6, xmm6	mov rsi, [rbp + nb133_type]	mov ebx, [rsi + rax*4]	mov rsi, [rbp + nb133_vdwparam]	shl ebx, 1		add ebx, [rsp + nb133_ntia]	movlps xmm6, [rsi + rbx*4]	movaps xmm7, xmm6	shufps xmm6, xmm6, 252  ;# constant 11111100	shufps xmm7, xmm7, 253  ;# constant 11111101	movaps [rsp + nb133_c6], xmm6	movaps [rsp + nb133_c12], xmm7		mov rsi, [rbp + nb133_pos]	lea rax, [rax + rax*2]  	movss xmm0, [rsp + nb133_ixO]	movss xmm1, [rsp + nb133_iyO]	movss xmm2, [rsp + nb133_izO]	movss xmm3, [rsp + nb133_ixH1]	movss xmm4, [rsp + nb133_iyH1]	movss xmm5, [rsp + nb133_izH1]	unpcklps xmm0, [rsp + nb133_ixH2] 	;# ixO ixH2 - -	unpcklps xmm1, [rsp + nb133_iyH2]  	;# iyO iyH2 - -	unpcklps xmm2, [rsp + nb133_izH2]	;# izO izH2 - -	unpcklps xmm3, [rsp + nb133_ixM] 	;# ixH1 ixM - -	unpcklps xmm4, [rsp + nb133_iyM]  	;# iyH1 iyM - -	unpcklps xmm5, [rsp + nb133_izM]	;# izH1 izM - -	unpcklps xmm0, xmm3  	;# ixO ixH1 ixH2 ixM	unpcklps xmm1, xmm4 	;# same for y	unpcklps xmm2, xmm5 	;# same for z		;# move j coords to xmm0-xmm2 	movss xmm3, [rsi + rax*4]	movss xmm4, [rsi + rax*4 + 4]	movss xmm5, [rsi + rax*4 + 8]	shufps xmm3, xmm3, 0	shufps xmm4, xmm4, 0	shufps xmm5, xmm5, 0		subps xmm3, xmm0	subps xmm4, xmm1	subps xmm5, xmm2	;# use O distances for storage	movaps [rsp + nb133_dxO], xmm3	movaps [rsp + nb133_dyO], xmm4	movaps [rsp + nb133_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, [rsp + nb133_three]	mulps xmm5, xmm4	;# rsq*lu*lu 				movaps xmm0, [rsp + nb133_half]	subps xmm1, xmm5	;# constant 30-rsq*lu*lu 	mulps xmm1, xmm2		mulps xmm0, xmm1	;# xmm0=rinv, xmm4=rsq	#; LJ table interaction	mulps xmm4, xmm0	mulps  xmm4, [rsp + nb133_tsc] ;# rtab		cvttps2pi mm6, xmm4	cvtpi2ps xmm6, mm6	subss  xmm4, xmm6		movss xmm1, xmm4	;# xmm1=eps 	movss xmm2, xmm1		mulss  xmm2, xmm2	;# xmm2=eps2 	pslld mm6, 3	movd mm0, eax		mov  rsi, [rbp + nb133_VFtab]	movd eax, mm6		;# dispersion 	movlps xmm5, [rsi + rax*4]	movaps xmm4, xmm5	shufps xmm4, xmm7, 136  ;# constant 10001000	shufps xmm5, xmm7, 221  ;# constant 11011101		movlps xmm7, [rsi + rax*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 + nb133_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 + nb133_c6]	mulss  xmm7, xmm4	 ;# fijD 	mulss  xmm5, xmm4	 ;# Vvdw6 	mulss  xmm7, [rsp + nb133_tsc]	;# put scalar force on stack Update Vvdwtot directly 	addss  xmm5, [rsp + nb133_Vvdwtot]	movss [rsp + nb133_fstmp], xmm7	movss [rsp + nb133_Vvdwtot], xmm5	;# repulsion 	movlps xmm5, [rsi + rax*4 + 16]	movaps xmm4, xmm5	shufps xmm4, xmm7, 136  ;# constant 10001000	shufps xmm5, xmm7, 221  ;# constant 11011101	movlps xmm7, [rsi + rax*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 + nb133_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 + nb133_c12]	mulss  xmm7, xmm4 ;# fijR 	mulss  xmm5, xmm4 ;# Vvdw12 	mulss  xmm7, [rsp + nb133_tsc]	addss  xmm7, [rsp + nb133_fstmp]	movss [rsp + nb133_fstmp], xmm7	addss  xmm5, [rsp + nb133_Vvdwtot]	movss [rsp + nb133_Vvdwtot], xmm5		movd eax, mm0		movaps xmm4, xmm0	mulps  xmm4, [rsp + nb133_qqM] 	movaps xmm2, xmm4	mulps  xmm4, xmm0	subss  xmm4, [rsp + nb133_fstmp]	mulps  xmm4, xmm0		addps  xmm2, [rsp + nb133_vctot]		movaps [rsp + nb133_vctot], xmm2			movaps xmm0, [rsp + nb133_dxO]	movaps xmm1, [rsp + nb133_dyO]	movaps xmm2, [rsp + nb133_dzO]	mulps  xmm0, xmm4	mulps  xmm1, xmm4	mulps  xmm2, xmm4 ;# xmm0-xmm2 now contains tx-tz (partial force)		movss  xmm3, [rsp + nb133_fixO]		movss  xmm4, [rsp + nb133_fiyO]		movss  xmm5, [rsp + nb133_fizO]		addss  xmm3, xmm0	addss  xmm4, xmm1	addss  xmm5, xmm2	movss  [rsp + nb133_fixO], xmm3		movss  [rsp + nb133_fiyO], xmm4		movss  [rsp + nb133_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, [rsp + nb133_fixH1]	addss  xmm4, [rsp + nb133_fiyH1]	addss  xmm5, [rsp + nb133_fizH1]	movss  [rsp + nb133_fixH1], xmm3		movss  [rsp + nb133_fiyH1], xmm4		movss  [rsp + nb133_fizH1], xmm5	;# updated the H1 force 	shufps xmm3, xmm3, 0x39	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm3, [rsp + nb133_fixH2]	addss  xmm4, [rsp + nb133_fiyH2]	addss  xmm5, [rsp + nb133_fizH2]	movss  [rsp + nb133_fixH2], xmm3		movss  [rsp + nb133_fiyH2], xmm4		movss  [rsp + nb133_fizH2], xmm5	;# updated the H2 force 	mov rdi, [rbp + nb133_faction]	shufps xmm3, xmm3, 0x39	shufps xmm4, xmm4, 0x39	shufps xmm5, xmm5, 0x39	addss  xmm3, [rsp + nb133_fixM]	addss  xmm4, [rsp + nb133_fiyM]	addss  xmm5, [rsp + nb133_fizM]	movss  [rsp + nb133_fixM], xmm3		movss  [rsp + nb133_fiyM], xmm4		movss  [rsp + nb133_fizM], xmm5	;# updated the M force 	;# the fj's - move in from mem start by acc. tx/ty/tz in xmm0, xmm1	movlps xmm6, [rdi + rax*4]	movss  xmm7, [rdi + rax*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		addps    xmm6, xmm0	addss    xmm7, xmm2		movlps [rdi + rax*4],     xmm6	movss  [rdi + rax*4 + 8], xmm7	dec dword ptr [rsp + nb133_innerk]	jz    .nb133_updateouterdata	jmp   .nb133_odd_loop.nb133_updateouterdata:	mov   ecx, [rsp + nb133_ii3]	mov   rdi, [rbp + nb133_faction]	mov   rsi, [rbp + nb133_fshift]

⌨️ 快捷键说明

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