nb_kernel114_x86_64_sse.intel_syntax.s

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

S
2,204
字号
    mulps   xmm11, xmm0 ;# rinvMH2		;# H2 interactions     movaps xmm0, xmm9    movaps xmm1, xmm10    movaps xmm2, xmm11    mulps  xmm9, xmm9    mulps  xmm10, xmm10    mulps  xmm11, xmm11    mulps  xmm0, [rsp + nb114_qqHH]     mulps  xmm1, [rsp + nb114_qqHH]     mulps  xmm2, [rsp + nb114_qqMH]     mulps  xmm9, xmm0    mulps  xmm10, xmm1    mulps  xmm11, xmm2        addps xmm0, [rsp + nb114_vctot]     addps xmm1, xmm2    addps xmm0, xmm1    movaps [rsp + nb114_vctot], xmm0    	;# move j H2 forces to local temp variables     movlps xmm0, [rdi + rax*4 + 24] ;# jxH2a jyH2a  -   -    movlps xmm1, [rdi + rcx*4 + 24] ;# jxH2c jyH2c  -   -    movhps xmm0, [rdi + rbx*4 + 24] ;# jxH2a jyH2a jxH2b jyH2b     movhps xmm1, [rdi + rdx*4 + 24] ;# jxH2c jyH2c jxH2d jyH2d     movss  xmm2, [rdi + rax*4 + 32] ;# jzH2a  -  -  -    movss  xmm3, [rdi + rcx*4 + 32] ;# jzH2c  -  -  -    movhps xmm2, [rdi + rbx*4 + 32] ;# jzH2a  -  jzH2b  -    movhps xmm3, [rdi + rdx*4 + 32] ;# jzH2c  -  jzH2d -        shufps xmm2, xmm3,  136  ;# 10001000 => jzH2a jzH2b jzH2c jzH2d    ;# xmm0: jxH2a jyH2a jxH2b jyH2b     ;# xmm1: jxH2c jyH2c jxH2d jyH2d    ;# xmm2: jzH2a jzH2b jzH2c jzH2d    movaps xmm7, xmm9    movaps xmm8, xmm9    movaps xmm13, xmm11    movaps xmm14, xmm11    movaps xmm15, xmm11    movaps xmm11, xmm10    movaps xmm12, xmm10	mulps xmm7, [rsp + nb114_dxH1H2]	mulps xmm8, [rsp + nb114_dyH1H2]	mulps xmm9, [rsp + nb114_dzH1H2]	mulps xmm10, [rsp + nb114_dxH2H2]	mulps xmm11, [rsp + nb114_dyH2H2]	mulps xmm12, [rsp + nb114_dzH2H2]	mulps xmm13, [rsp + nb114_dxMH2]	mulps xmm14, [rsp + nb114_dyMH2]	mulps xmm15, [rsp + nb114_dzMH2]    movaps xmm3, xmm7    movaps xmm4, xmm8    addps xmm2, xmm9    addps xmm7, [rsp + nb114_fixH1]    addps xmm8, [rsp + nb114_fiyH1]    addps xmm9, [rsp + nb114_fizH1]    addps xmm3, xmm10    addps xmm4, xmm11    addps xmm2, xmm12    addps xmm10, [rsp + nb114_fixH2]    addps xmm11, [rsp + nb114_fiyH2]    addps xmm12, [rsp + nb114_fizH2]    addps xmm3, xmm13    addps xmm4, xmm14    addps xmm2, xmm15    addps xmm13, [rsp + nb114_fixM]    addps xmm14, [rsp + nb114_fiyM]    addps xmm15, [rsp + nb114_fizM]        movaps [rsp + nb114_fixH1], xmm7    movaps [rsp + nb114_fiyH1], xmm8    movaps [rsp + nb114_fizH1], xmm9    movaps [rsp + nb114_fixH2], xmm10    movaps [rsp + nb114_fiyH2], xmm11    movaps [rsp + nb114_fizH2], xmm12    movaps [rsp + nb114_fixM], xmm13    movaps [rsp + nb114_fiyM], xmm14    movaps [rsp + nb114_fizM], xmm15    ;# xmm3 = fH2x , xmm4 = fH2y    movaps xmm5, xmm3    unpcklps xmm3, xmm4    unpckhps xmm5, xmm4        addps xmm0, xmm3    addps xmm1, xmm5    movhlps  xmm3, xmm2 ;# fH2zc fH2zd        movlps [rdi + rax*4 + 24], xmm0    movhps [rdi + rbx*4 + 24], xmm0    movlps [rdi + rcx*4 + 24], xmm1    movhps [rdi + rdx*4 + 24], xmm1    movss  [rdi + rax*4 + 32], xmm2    movss  [rdi + rcx*4 + 32], xmm3    shufps xmm2, xmm2, 1     shufps xmm3, xmm3, 1    movss  [rdi + rbx*4 + 32], xmm2    movss  [rdi + rdx*4 + 32], xmm3	;# move j M coordinates to local temp variables     movlps xmm0, [rsi + rax*4 + 36] ;# jxMa jyMa  -   -    movlps xmm1, [rsi + rcx*4 + 36] ;# jxMc jyMc  -   -    movhps xmm0, [rsi + rbx*4 + 36] ;# jxMa jyMa jxMb jyMb     movhps xmm1, [rsi + rdx*4 + 36] ;# jxMc jyMc jxMd jyMd     movss  xmm2, [rsi + rax*4 + 44] ;# jzMa  -  -  -    movss  xmm3, [rsi + rcx*4 + 44] ;# jzMc  -  -  -    movss  xmm5, [rsi + rbx*4 + 44] ;# jzMb  -  -  -    movss  xmm6, [rsi + rdx*4 + 44] ;# jzMd  -  -  -    movlhps xmm2, xmm5 ;# jzMa  -  jzMb  -    movlhps xmm3, xmm6 ;# jzMc  -  jzMd -        movaps xmm4, xmm0    unpcklps xmm0, xmm1  ;# jxMa jxMc jyMa jyMc            unpckhps xmm4, xmm1  ;# jxMb jxMd jyMb jyMd    movaps xmm1, xmm0    unpcklps xmm0, xmm4 ;# x    unpckhps xmm1, xmm4 ;# y    shufps   xmm2, xmm3,  136  ;# 10001000 => jzMa jzMb jzMc jzMd    ;# xmm0 = Mx    ;# xmm1 = My    ;# xmm2 = Mz            movaps xmm3, xmm0    movaps xmm4, xmm1    movaps xmm5, xmm2    movaps xmm6, xmm0    movaps xmm7, xmm1    movaps xmm8, xmm2        subps xmm0, [rsp + nb114_ixH1]    subps xmm1, [rsp + nb114_iyH1]    subps xmm2, [rsp + nb114_izH1]    subps xmm3, [rsp + nb114_ixH2]    subps xmm4, [rsp + nb114_iyH2]    subps xmm5, [rsp + nb114_izH2]    subps xmm6, [rsp + nb114_ixM]    subps xmm7, [rsp + nb114_iyM]    subps xmm8, [rsp + nb114_izM]    	movaps [rsp + nb114_dxH1M], xmm0	movaps [rsp + nb114_dyH1M], xmm1	movaps [rsp + nb114_dzH1M], xmm2	mulps  xmm0, xmm0	mulps  xmm1, xmm1	mulps  xmm2, xmm2	movaps [rsp + nb114_dxH2M], xmm3	movaps [rsp + nb114_dyH2M], xmm4	movaps [rsp + nb114_dzH2M], xmm5	mulps  xmm3, xmm3	mulps  xmm4, xmm4	mulps  xmm5, xmm5	movaps [rsp + nb114_dxMM], xmm6	movaps [rsp + nb114_dyMM], xmm7	movaps [rsp + nb114_dzMM], 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 jM 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 + nb114_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 + nb114_half]	mulps   xmm9, xmm0  ;# rinvH1M 	mulps   xmm10, xmm0 ;# rinvH2M    mulps   xmm11, xmm0 ;# rinvMM		;# M interactions     movaps xmm0, xmm9    movaps xmm1, xmm10    movaps xmm2, xmm11    mulps  xmm9, xmm9    mulps  xmm10, xmm10    mulps  xmm11, xmm11    mulps  xmm0, [rsp + nb114_qqMH]     mulps  xmm1, [rsp + nb114_qqMH]     mulps  xmm2, [rsp + nb114_qqMM]     mulps  xmm9, xmm0    mulps  xmm10, xmm1    mulps  xmm11, xmm2        addps xmm0, [rsp + nb114_vctot]     addps xmm1, xmm2    addps xmm0, xmm1    movaps [rsp + nb114_vctot], xmm0    	;# move j M forces to local temp variables     movlps xmm0, [rdi + rax*4 + 36] ;# jxMa jyMa  -   -    movlps xmm1, [rdi + rcx*4 + 36] ;# jxMc jyMc  -   -    movhps xmm0, [rdi + rbx*4 + 36] ;# jxMa jyMa jxMb jyMb     movhps xmm1, [rdi + rdx*4 + 36] ;# jxMc jyMc jxMd jyMd     movss  xmm2, [rdi + rax*4 + 44] ;# jzMa  -  -  -    movss  xmm3, [rdi + rcx*4 + 44] ;# jzMc  -  -  -    movss  xmm7, [rdi + rbx*4 + 44] ;# jzMb  -  -  -    movss  xmm8, [rdi + rdx*4 + 44] ;# jzMd  -  -  -    movlhps xmm2, xmm7 ;# jzMa  -  jzMb  -    movlhps xmm3, xmm8 ;# jzMc  -  jzMd -        shufps xmm2, xmm3,  136  ;# 10001000 => jzMa jzMb jzMc jzMd    ;# xmm0: jxMa jyMa jxMb jyMb     ;# xmm1: jxMc jyMc jxMd jyMd    ;# xmm2: jzMa jzMb jzMc jzMd    movaps xmm7, xmm9    movaps xmm8, xmm9    movaps xmm13, xmm11    movaps xmm14, xmm11    movaps xmm15, xmm11    movaps xmm11, xmm10    movaps xmm12, xmm10	mulps xmm7, [rsp + nb114_dxH1M]	mulps xmm8, [rsp + nb114_dyH1M]	mulps xmm9, [rsp + nb114_dzH1M]	mulps xmm10, [rsp + nb114_dxH2M]	mulps xmm11, [rsp + nb114_dyH2M]	mulps xmm12, [rsp + nb114_dzH2M]	mulps xmm13, [rsp + nb114_dxMM]	mulps xmm14, [rsp + nb114_dyMM]	mulps xmm15, [rsp + nb114_dzMM]    movaps xmm3, xmm7    movaps xmm4, xmm8    addps xmm2, xmm9    addps xmm7, [rsp + nb114_fixH1]    addps xmm8, [rsp + nb114_fiyH1]    addps xmm9, [rsp + nb114_fizH1]    addps xmm3, xmm10    addps xmm4, xmm11    addps xmm2, xmm12    addps xmm10, [rsp + nb114_fixH2]    addps xmm11, [rsp + nb114_fiyH2]    addps xmm12, [rsp + nb114_fizH2]    addps xmm3, xmm13    addps xmm4, xmm14    addps xmm2, xmm15    addps xmm13, [rsp + nb114_fixM]    addps xmm14, [rsp + nb114_fiyM]    addps xmm15, [rsp + nb114_fizM]        movaps [rsp + nb114_fixH1], xmm7    movaps [rsp + nb114_fiyH1], xmm8    movaps [rsp + nb114_fizH1], xmm9    movaps [rsp + nb114_fixH2], xmm10    movaps [rsp + nb114_fiyH2], xmm11    movaps [rsp + nb114_fizH2], xmm12    movaps [rsp + nb114_fixM], xmm13    movaps [rsp + nb114_fiyM], xmm14    movaps [rsp + nb114_fizM], xmm15    ;# xmm3 = fMx , xmm4 = fMy    movaps xmm5, xmm3    unpcklps xmm3, xmm4    unpckhps xmm5, xmm4        addps xmm0, xmm3    addps xmm1, xmm5    movhlps  xmm3, xmm2 ;# fMzc fMzd        movlps [rdi + rax*4 + 36], xmm0    movhps [rdi + rbx*4 + 36], xmm0    movlps [rdi + rcx*4 + 36], xmm1    movhps [rdi + rdx*4 + 36], xmm1    movss  [rdi + rax*4 + 44], xmm2    movss  [rdi + rcx*4 + 44], xmm3    shufps xmm2, xmm2, 1    shufps xmm3, xmm3, 1    movss  [rdi + rbx*4 + 44], xmm2    movss  [rdi + rdx*4 + 44], xmm3	;# should we do one more iteration? 	sub dword ptr [rsp + nb114_innerk],  4	jl    .nb114_single_check	jmp   .nb114_unroll_loop.nb114_single_check:	add dword ptr [rsp + nb114_innerk],  4	jnz   .nb114_single_loop	jmp   .nb114_updateouterdata.nb114_single_loop:	mov   rdx, [rsp + nb114_innerjjnr] 	;# pointer to jjnr[k] 	mov   eax, [rdx]		add qword ptr [rsp + nb114_innerjjnr],  4		mov rsi, [rbp + nb114_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 + nb114_jxO], xmm6	movaps [rsp + nb114_jyO], xmm3	movaps [rsp + nb114_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 + nb114_ixO] 	subps  xmm1, [rsp + nb114_iyO] 	subps  xmm2, [rsp + nb114_izO] 	subps  xmm3, [rsp + nb114_ixM] 	subps  xmm4, [rsp + nb114_iyM]	subps  xmm5, [rsp + nb114_izM]		movaps [rsp + nb114_dxOO], xmm0	movaps [rsp + nb114_dyOO], xmm1	movaps [rsp + nb114_dzOO], xmm2	movaps [rsp + nb114_dxMM], xmm3	movaps [rsp + nb114_dyMM], xmm4	movaps [rsp + nb114_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 M data 	movaps [rsp + nb114_rsqMM], xmm4		;# do 1/x for O and 1/sqrt(x) for M	rcpss  xmm1, xmm0	rsqrtps xmm5, xmm4	movss  xmm2, [rsp + nb114_two]	movaps  xmm6, xmm5		mulss  xmm0, xmm1	mulps   xmm5, xmm5	subss  xmm2, xmm0	movaps  xmm7, [rsp + nb114_three]	mulss  xmm2, xmm1 	;# 1/r2		mulps   xmm5, xmm4	movss  xmm0, xmm2	subps   xmm7, xmm5	mulss  xmm2, xmm2	mulps   xmm7, xmm6	mulss  xmm2, xmm0 	;# 1/r6	mulps   xmm7, [rsp + nb114_half] ;# rinv iH1 - j water 	movss  xmm1, xmm2	movaps [rsp + nb114_rinvMM], xmm7	mulss  xmm2, xmm2 	;# 1/r12	mulss  xmm1, [rsp + nb114_c6]	mulss  xmm2, [rsp + nb114_c12]	movss  xmm3, xmm2	subss  xmm3, xmm1	addss  xmm3, [rsp + nb114_Vvdwtot]	movss  [rsp + nb114_Vvdwtot], xmm3	mulss  xmm1, [rsp + nb114_six]	mulss  xmm2, [rsp + nb114_twelve]	subss  xmm2, xmm1	mulss  xmm0, xmm2 	;# fscal	movss  xmm1, xmm0	movss  xmm2, xmm0	mulss  xmm0, [rsp + nb114_dxOO]	mulss  xmm1, [rsp + nb114_dyOO]	mulss  xmm2, [rsp + nb114_dzOO]	xorps   xmm3, xmm3	xorps   xmm4, xmm4	xorps   xmm5, xmm5	addss   xmm3, xmm0	addss   xmm4, xmm1	addss   xmm5, xmm2	movaps  [rsp + nb114_fjxO], xmm3	movaps  [rsp + nb114_fjyO], xmm4

⌨️ 快捷键说明

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