// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/allostery.c
// Function: Ave_site
float Ave_site(double *sigprof, double *ave_pair,
	       double *sigpair, int *n_notfound,
	       int *site, int *atomres, int nr, int *atom_site,
	       float *profile, float **coupling, int Na)
{
  double sum_prof=0; 
  *sigprof=0; *ave_pair=0; *sigpair=0; *n_notfound=0;
  int npair=0;
  for(int i1=0; i1<nr; i1++){
    int j1=atomres[site[i1]];
    if((j1<0)||(j1>=Na)){
      if(atom_site)atom_site[j1]=-site[i1];
      (*n_notfound)++;
      continue;
    }
    if(atom_site)atom_site[j1]=1;
    sum_prof+=profile[j1];
    *sigprof+=profile[j1]*profile[j1];
    for(int i2=0; i2<i1; i2++){
      int j2=atomres[site[i2]];
      if((j2<0)||(j2>=Na)||(j2==j1))continue;
      float x=coupling[j1][j2];
      *ave_pair+=x; *sigpair+=x*x;
      npair++;
    }
  } // end of the site
  Ave_St_dev(&sum_prof, sigprof, nr-*n_notfound);
  Ave_St_dev(ave_pair, sigpair, npair);
  return(sum_prof);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movl 0x30(%rbp), %eax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
movq -0x8(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movl $0x0, (%rax)
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl 0x10(%rbp), %eax
jge 0x668be
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq -0x40(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
jl 0x66783
movl -0x44(%rbp), %eax
cmpl 0x30(%rbp), %eax
jl 0x667b2
cmpq $0x0, 0x18(%rbp)
je 0x667a2
movq -0x28(%rbp), %rax
movslq -0x40(%rbp), %rcx
xorl %edx, %edx
subl (%rax,%rcx,4), %edx
movq 0x18(%rbp), %rax
movslq -0x44(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x20(%rbp), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x668b0
cmpq $0x0, 0x18(%rbp)
je 0x667c8
movq 0x18(%rbp), %rax
movslq -0x44(%rbp), %rcx
movl $0x1, (%rax,%rcx,4)
movq 0x20(%rbp), %rax
movslq -0x44(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movq 0x20(%rbp), %rax
movslq -0x44(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq 0x20(%rbp), %rax
movslq -0x44(%rbp), %rcx
mulss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x8(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl $0x0, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0x40(%rbp), %eax
jge 0x668ae
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq -0x48(%rbp), %rdx
movslq (%rcx,%rdx,4), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x4c(%rbp)
cmpl $0x0, -0x4c(%rbp)
jl 0x6684c
movl -0x4c(%rbp), %eax
cmpl 0x30(%rbp), %eax
jge 0x6684c
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jne 0x6684e
jmp 0x668a0
movq 0x28(%rbp), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x4c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, -0x50(%rbp)
movss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x10(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movss -0x50(%rbp), %xmm0
mulss -0x50(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x18(%rbp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x66814
jmp 0x668b0
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0x66753
movq -0x8(%rbp), %rsi
movl 0x10(%rbp), %edx
movq -0x20(%rbp), %rax
subl (%rax), %edx
leaq -0x38(%rbp), %rdi
callq 0x66900
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x3c(%rbp), %edx
callq 0x66900
movsd -0x38(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)