nb_kernel204_x86_64_sse.s

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

S
2,119
字号
        ## assume we have at least one i particle - start directly         movq  nb204nf_iinr(%rsp),%rcx           ## rcx = pointer into iinr[]            movl  (%rcx),%ebx               ## ebx =ii         movq  nb204nf_charge(%rbp),%rdx        movss 4(%rdx,%rbx,4),%xmm3        movss %xmm3,%xmm4        movss 12(%rdx,%rbx,4),%xmm5        movq nb204nf_p_facel(%rbp),%rsi        movss (%rsi),%xmm0        movss nb204nf_facel(%rsp),%xmm6        mulss  %xmm3,%xmm3        mulss  %xmm5,%xmm4        mulss  %xmm5,%xmm5        mulss  %xmm6,%xmm3        mulss  %xmm6,%xmm4        mulss  %xmm6,%xmm5        shufps $0,%xmm3,%xmm3        shufps $0,%xmm4,%xmm4        shufps $0,%xmm5,%xmm5        movaps %xmm3,nb204nf_qqHH(%rsp)        movaps %xmm4,nb204nf_qqMH(%rsp)        movaps %xmm5,nb204nf_qqMM(%rsp)_nb_kernel204nf_x86_64_sse.nb204nf_threadloop:         movq  nb204nf_count(%rbp),%rsi            ## pointer to sync counter        movl  (%rsi),%eax_nb_kernel204nf_x86_64_sse.nb204nf_spinlock:         movl  %eax,%ebx                         ## ebx=*count=nn0        addq  $1,%rbx                          ## rbx=nn1=nn0+10        lock         cmpxchgl %ebx,(%rsi)                    ## write nn1 to *counter,                                                ## if it hasnt changed.                                                ## or reread *counter to eax.        pause                                   ## -> better p4 performance        jnz _nb_kernel204nf_x86_64_sse.nb204nf_spinlock        ## if(nn1>nri) nn1=nri        movl nb204nf_nri(%rsp),%ecx        movl %ecx,%edx        subl %ebx,%ecx        cmovlel %edx,%ebx                       ## if(nn1>nri) nn1=nri        ## Cleared the spinlock if we got here.        ## eax contains nn0, ebx contains nn1.        movl %eax,nb204nf_n(%rsp)        movl %ebx,nb204nf_nn1(%rsp)        subl %eax,%ebx                          ## calc number of outer lists        movl %eax,%esi                          ## copy n to esi        jg  _nb_kernel204nf_x86_64_sse.nb204nf_outerstart        jmp _nb_kernel204nf_x86_64_sse.nb204nf_end_nb_kernel204nf_x86_64_sse.nb204nf_outerstart:         ## ebx contains number of outer iterations        addl nb204nf_nouter(%rsp),%ebx        movl %ebx,nb204nf_nouter(%rsp)_nb_kernel204nf_x86_64_sse.nb204nf_outer:         movq  nb204nf_shift(%rsp),%rax          ## rax = pointer into shift[]         movl  (%rax,%rsi,4),%ebx                ## rbx=shift[n]         lea  (%rbx,%rbx,2),%rbx        ## rbx=3*is         movl  %ebx,nb204nf_is3(%rsp)            ## store is3         movq  nb204nf_shiftvec(%rsp),%rax     ## rax = base of shiftvec[]         movss (%rax,%rbx,4),%xmm0        movss 4(%rax,%rbx,4),%xmm1        movss 8(%rax,%rbx,4),%xmm2        movq  nb204nf_iinr(%rsp),%rcx           ## rcx = pointer into iinr[]            movl  (%rcx,%rsi,4),%ebx                ## ebx =ii         lea  (%rbx,%rbx,2),%rbx        ## rbx = 3*ii=ii3         movq  nb204nf_pos(%rbp),%rax    ## rax = base of pos[]          movl  %ebx,nb204nf_ii3(%rsp)        movaps %xmm0,%xmm3        movaps %xmm1,%xmm4        movaps %xmm2,%xmm5        addss 12(%rax,%rbx,4),%xmm3        addss 16(%rax,%rbx,4),%xmm4        addss 20(%rax,%rbx,4),%xmm5        shufps $0,%xmm3,%xmm3        shufps $0,%xmm4,%xmm4        shufps $0,%xmm5,%xmm5        movaps %xmm3,nb204nf_ixH1(%rsp)        movaps %xmm4,nb204nf_iyH1(%rsp)        movaps %xmm5,nb204nf_izH1(%rsp)        movss %xmm0,%xmm3        movss %xmm1,%xmm4        movss %xmm2,%xmm5        addss 24(%rax,%rbx,4),%xmm0        addss 28(%rax,%rbx,4),%xmm1        addss 32(%rax,%rbx,4),%xmm2        addss 36(%rax,%rbx,4),%xmm3        addss 40(%rax,%rbx,4),%xmm4        addss 44(%rax,%rbx,4),%xmm5        shufps $0,%xmm0,%xmm0        shufps $0,%xmm1,%xmm1        shufps $0,%xmm2,%xmm2        shufps $0,%xmm3,%xmm3        shufps $0,%xmm4,%xmm4        shufps $0,%xmm5,%xmm5        movaps %xmm0,nb204nf_ixH2(%rsp)        movaps %xmm1,nb204nf_iyH2(%rsp)        movaps %xmm2,nb204nf_izH2(%rsp)        movaps %xmm3,nb204nf_ixM(%rsp)        movaps %xmm4,nb204nf_iyM(%rsp)        movaps %xmm5,nb204nf_izM(%rsp)        ## clear vctot         xorps %xmm4,%xmm4        movaps %xmm4,nb204nf_vctot(%rsp)        movq  nb204nf_jindex(%rsp),%rax        movl  (%rax,%rsi,4),%ecx                ## jindex[n]         movl  4(%rax,%rsi,4),%edx               ## jindex[n+1]         subl  %ecx,%edx                 ## number of innerloop atoms         movq  nb204nf_pos(%rbp),%rsi        movq  nb204nf_faction(%rbp),%rdi        movq  nb204nf_jjnr(%rsp),%rax        shll  $2,%ecx        addq  %rcx,%rax        movq  %rax,nb204nf_innerjjnr(%rsp)      ## pointer to jjnr[nj0]         movl  %edx,%ecx        subl  $4,%edx        addl  nb204nf_ninner(%rsp),%ecx        movl  %ecx,nb204nf_ninner(%rsp)        addl  $0,%edx        movl  %edx,nb204nf_innerk(%rsp)         ## number of innerloop atoms         jge   _nb_kernel204nf_x86_64_sse.nb204nf_unroll_loop        jmp   _nb_kernel204nf_x86_64_sse.nb204nf_single_check_nb_kernel204nf_x86_64_sse.nb204nf_unroll_loop:         ## quad-unroll innerloop here         movq  nb204nf_innerjjnr(%rsp),%rdx      ## pointer to jjnr[k]         movl  (%rdx),%eax        movl  4(%rdx),%ebx        movl  8(%rdx),%ecx        movl  12(%rdx),%edx             ## eax-edx=jnr1-4         addq $16,nb204nf_innerjjnr(%rsp)             ## advance pointer (unrolled 4)         movq nb204nf_pos(%rbp),%rsi     ## base of pos[]         lea  (%rax,%rax,2),%rax        ## replace jnr with j3         lea  (%rbx,%rbx,2),%rbx        lea  (%rcx,%rcx,2),%rcx        ## replace jnr with j3         lea  (%rdx,%rdx,2),%rdx        ## move j coordinates to local temp variables         movlps 12(%rsi,%rax,4),%xmm2        movlps 24(%rsi,%rax,4),%xmm3        movlps 36(%rsi,%rax,4),%xmm4        movlps 12(%rsi,%rbx,4),%xmm5        movlps 24(%rsi,%rbx,4),%xmm6        movlps 36(%rsi,%rbx,4),%xmm7        movhps 12(%rsi,%rcx,4),%xmm2        movhps 24(%rsi,%rcx,4),%xmm3        movhps 36(%rsi,%rcx,4),%xmm4        movhps 12(%rsi,%rdx,4),%xmm5        movhps 24(%rsi,%rdx,4),%xmm6        movhps 36(%rsi,%rdx,4),%xmm7        movaps %xmm2,%xmm0        movaps %xmm3,%xmm1        unpcklps %xmm5,%xmm0        unpcklps %xmm6,%xmm1        unpckhps %xmm5,%xmm2        unpckhps %xmm6,%xmm3        movaps %xmm4,%xmm5        movaps   %xmm0,%xmm6        unpcklps %xmm7,%xmm4        unpckhps %xmm7,%xmm5        movaps   %xmm1,%xmm7        movlhps  %xmm2,%xmm0        movaps %xmm0,nb204nf_jxH1(%rsp)        movhlps  %xmm6,%xmm2        movaps %xmm2,nb204nf_jyH1(%rsp)        movlhps  %xmm3,%xmm1        movaps %xmm1,nb204nf_jxH2(%rsp)        movhlps  %xmm7,%xmm3        movaps   %xmm4,%xmm6        movaps %xmm3,nb204nf_jyH2(%rsp)        movlhps  %xmm5,%xmm4        movaps %xmm4,nb204nf_jxM(%rsp)        movhlps  %xmm6,%xmm5        movaps %xmm5,nb204nf_jyM(%rsp)        movss  20(%rsi,%rax,4),%xmm0        movss  32(%rsi,%rax,4),%xmm1        movss  44(%rsi,%rax,4),%xmm2        movss  20(%rsi,%rcx,4),%xmm3        movss  32(%rsi,%rcx,4),%xmm4        movss  44(%rsi,%rcx,4),%xmm5        movhps 16(%rsi,%rbx,4),%xmm0        movhps 28(%rsi,%rbx,4),%xmm1        movhps 40(%rsi,%rbx,4),%xmm2        movhps 16(%rsi,%rdx,4),%xmm3        movhps 28(%rsi,%rdx,4),%xmm4        movhps 40(%rsi,%rdx,4),%xmm5        shufps $204,%xmm3,%xmm0 ## 11001100        shufps $204,%xmm4,%xmm1 ## 11001100        shufps $204,%xmm5,%xmm2 ## 11001100        movaps %xmm0,nb204nf_jzH1(%rsp)        movaps %xmm1,nb204nf_jzH2(%rsp)        movaps %xmm2,nb204nf_jzM(%rsp)        movaps nb204nf_ixH1(%rsp),%xmm0        movaps nb204nf_iyH1(%rsp),%xmm1        movaps nb204nf_izH1(%rsp),%xmm2        movaps nb204nf_ixH1(%rsp),%xmm3        movaps nb204nf_iyH1(%rsp),%xmm4        movaps nb204nf_izH1(%rsp),%xmm5        subps  nb204nf_jxH1(%rsp),%xmm0        subps  nb204nf_jyH1(%rsp),%xmm1        subps  nb204nf_jzH1(%rsp),%xmm2        subps  nb204nf_jxH2(%rsp),%xmm3        subps  nb204nf_jyH2(%rsp),%xmm4        subps  nb204nf_jzH2(%rsp),%xmm5        mulps  %xmm0,%xmm0        mulps  %xmm1,%xmm1        mulps  %xmm2,%xmm2        mulps  %xmm3,%xmm3        mulps  %xmm4,%xmm4        mulps  %xmm5,%xmm5        addps  %xmm1,%xmm0        addps  %xmm2,%xmm0        addps  %xmm4,%xmm3        addps  %xmm5,%xmm3        movaps %xmm0,nb204nf_rsqH1H1(%rsp)        movaps %xmm3,nb204nf_rsqH1H2(%rsp)        movaps nb204nf_ixH1(%rsp),%xmm0        movaps nb204nf_iyH1(%rsp),%xmm1        movaps nb204nf_izH1(%rsp),%xmm2        movaps nb204nf_ixH2(%rsp),%xmm3        movaps nb204nf_iyH2(%rsp),%xmm4        movaps nb204nf_izH2(%rsp),%xmm5        subps  nb204nf_jxM(%rsp),%xmm0        subps  nb204nf_jyM(%rsp),%xmm1        subps  nb204nf_jzM(%rsp),%xmm2        subps  nb204nf_jxH1(%rsp),%xmm3        subps  nb204nf_jyH1(%rsp),%xmm4        subps  nb204nf_jzH1(%rsp),%xmm5        mulps  %xmm0,%xmm0        mulps  %xmm1,%xmm1        mulps  %xmm2,%xmm2        mulps  %xmm3,%xmm3        mulps  %xmm4,%xmm4        mulps  %xmm5,%xmm5        addps  %xmm1,%xmm0        addps  %xmm2,%xmm0        addps  %xmm4,%xmm3        addps  %xmm5,%xmm3        movaps %xmm0,nb204nf_rsqH1M(%rsp)        movaps %xmm3,nb204nf_rsqH2H1(%rsp)        movaps nb204nf_ixH2(%rsp),%xmm0        movaps nb204nf_iyH2(%rsp),%xmm1        movaps nb204nf_izH2(%rsp),%xmm2        movaps nb204nf_ixH2(%rsp),%xmm3        movaps nb204nf_iyH2(%rsp),%xmm4        movaps nb204nf_izH2(%rsp),%xmm5        subps  nb204nf_jxH2(%rsp),%xmm0        subps  nb204nf_jyH2(%rsp),%xmm1        subps  nb204nf_jzH2(%rsp),%xmm2        subps  nb204nf_jxM(%rsp),%xmm3        subps  nb204nf_jyM(%rsp),%xmm4        subps  nb204nf_jzM(%rsp),%xmm5        mulps  %xmm0,%xmm0        mulps  %xmm1,%xmm1        mulps  %xmm2,%xmm2        mulps  %xmm3,%xmm3        mulps  %xmm4,%xmm4        mulps  %xmm5,%xmm5        addps  %xmm1,%xmm0        addps  %xmm2,%xmm0        addps  %xmm4,%xmm3        addps  %xmm5,%xmm3        movaps %xmm0,nb204nf_rsqH2H2(%rsp)        movaps %xmm3,nb204nf_rsqH2M(%rsp)        movaps nb204nf_ixM(%rsp),%xmm0        movaps nb204nf_iyM(%rsp),%xmm1        movaps nb204nf_izM(%rsp),%xmm2        movaps nb204nf_ixM(%rsp),%xmm3        movaps nb204nf_iyM(%rsp),%xmm4        movaps nb204nf_izM(%rsp),%xmm5        subps  nb204nf_jxH1(%rsp),%xmm0        subps  nb204nf_jyH1(%rsp),%xmm1        subps  nb204nf_jzH1(%rsp),%xmm2        subps  nb204nf_jxH2(%rsp),%xmm3        subps  nb204nf_jyH2(%rsp),%xmm4        subps  nb204nf_jzH2(%rsp),%xmm5        mulps  %xmm0,%xmm0        mulps  %xmm1,%xmm1        mulps  %xmm2,%xmm2        mulps  %xmm3,%xmm3        mulps  %xmm4,%xmm4        mulps  %xmm5,%xmm5        addps  %xmm1,%xmm0        addps  %xmm2,%xmm0        addps  %xmm3,%xmm4        addps  %xmm5,%xmm4        movaps %xmm0,nb204nf_rsqMH1(%rsp)        movaps %xmm4,nb204nf_rsqMH2(%rsp)        movaps nb204nf_ixM(%rsp),%xmm0        movaps nb204nf_iyM(%rsp),%xmm1        movaps nb204nf_izM(%rsp),%xmm2        subps  nb204nf_jxM(%rsp),%xmm0        subps  nb204nf_jyM(%rsp),%xmm1        subps  nb204nf_jzM(%rsp),%xmm2        mulps %xmm0,%xmm0        mulps %xmm1,%xmm1        mulps %xmm2,%xmm2        addps %xmm1,%xmm0        addps %xmm2,%xmm0        movaps %xmm0,nb204nf_rsqMM(%rsp)        ## start doing invsqrt use rsq values in xmm0, xmm4         rsqrtps %xmm0,%xmm1        rsqrtps %xmm4,%xmm5        movaps  %xmm1,%xmm2        movaps  %xmm5,%xmm6        mulps   %xmm1,%xmm1        mulps   %xmm5,%xmm5        movaps  nb204nf_three(%rsp),%xmm3        movaps  %xmm3,%xmm7        mulps   %xmm0,%xmm1        mulps   %xmm4,%xmm5        subps   %xmm1,%xmm3        subps   %xmm5,%xmm7        mulps   %xmm2,%xmm3        mulps   %xmm6,%xmm7        mulps   nb204nf_half(%rsp),%xmm3   ## rinvH2H2         mulps   nb204nf_half(%rsp),%xmm7   ## rinvH2H1         movaps  %xmm3,nb204nf_rinvMM(%rsp)        movaps  %xmm7,nb204nf_rinvMH2(%rsp)        rsqrtps nb204nf_rsqH1H1(%rsp),%xmm1        rsqrtps nb204nf_rsqH1H2(%rsp),%xmm5        movaps  %xmm1,%xmm2        movaps  %xmm5,%xmm6        mulps   %xmm1,%xmm1        mulps   %xmm5,%xmm5        movaps  nb204nf_three(%rsp),%xmm3        movaps  %xmm3,%xmm7        mulps   nb204nf_rsqH1H1(%rsp),%xmm1        mulps   nb204nf_rsqH1H2(%rsp),%xmm5        subps   %xmm1,%xmm3        subps   %xmm5,%xmm7        mulps   %xmm2,%xmm3        mulps   %xmm6,%xmm7        mulps   nb204nf_half(%rsp),%xmm3        mulps   nb204nf_half(%rsp),%xmm7        movaps  %xmm3,nb204nf_rinvH1H1(%rsp)        movaps  %xmm7,nb204nf_rinvH1H2(%rsp)        rsqrtps nb204nf_rsqH1M(%rsp),%xmm1        rsqrtps nb204nf_rsqH2H1(%rsp),%xmm5        movaps  %xmm1,%xmm2        movaps  %xmm5,%xmm6        mulps   %xmm1,%xmm1        mulps   %xmm5,%xmm5        movaps  nb204nf_three(%rsp),%xmm3        movaps  %xmm3,%xmm7        mulps   nb204nf_rsqH1M(%rsp),%xmm1        mulps   nb204nf_rsqH2H1(%rsp),%xmm5        subps   %xmm1,%xmm3        subps   %xmm5,%xmm7        mulps   %xmm2,%xmm3        mulps   %xmm6,%xmm7        mulps   nb204nf_half(%rsp),%xmm3        mulps   nb204nf_half(%rsp),%xmm7        movaps  %xmm3,nb204nf_rinvH1M(%rsp)        movaps  %xmm7,nb204nf_rinvH2H1(%rsp)        rsqrtps nb204nf_rsqH2H2(%rsp),%xmm1        rsqrtps nb204nf_rsqH2M(%rsp),%xmm5        movaps  %xmm1,%xmm2        movaps  %xmm5,%xmm6        mulps   %xmm1,%xmm1        mulps   %xmm5,%xmm5        movaps  nb204nf_three(%rsp),%xmm3        movaps  %xmm3,%xmm7        mulps   nb204nf_rsqH2H2(%rsp),%xmm1        mulps   nb204nf_rsqH2M(%rsp),%xmm5        subps   %xmm1,%xmm3        subps   %xmm5,%xmm7        mulps   %xmm2,%xmm3        mulps   %xmm6,%xmm7        mulps   nb204nf_half(%rsp),%xmm3        mulps   nb204nf_half(%rsp),%xmm7        movaps  %xmm3,nb204nf_rinvH2H2(%rsp)        movaps  %xmm7,nb204nf_rinvH2M(%rsp)        rsqrtps nb204nf_rsqMH1(%rsp),%xmm1        movaps  %xmm1,%xmm2        mulps   %xmm1,%xmm1        movaps  nb204nf_three(%rsp),%xmm3        mulps   nb204nf_rsqMH1(%rsp),%xmm1        subps   %xmm1,%xmm3        mulps   %xmm2,%xmm3        mulps   nb204nf_half(%rsp),%xmm3        movaps  %xmm3,nb204nf_rinvMH1(%rsp)        ## Coulomb interactions         ## add all H-H rsq in xmm2, H-M rsq xmm4        ## H-H rinv in xmm0, H-M in xmm1        movaps nb204nf_rinvH1H1(%rsp),%xmm0        movaps nb204nf

⌨️ 快捷键说明

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