// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/nma.c
// Function: Bivariate_fit
int Bivariate_fit(int n, float *z, float *x, float *y, int *w,
		  float *a, float *b, float *c, float *r, float *chi)
{
  // fit: z_i = a*x_i + b*y_i + c
  // Returns a, b, c, correlation coefficient and normalized sum of residuals

  int i, norm=0;
  float xy_ave=0, xz_ave=0, yz_ave=0;
  float x2_ave=0, y2_ave=0, z2_ave=0;
  float x_ave=0, y_ave=0, z_ave=0, chi1;

  if(n<3){
    printf("Too few points (%d), the fit can not be performed!\n\n", n);
    return(0);
  }

  for(i=0; i<n; i++){
    if(w[i]){
      x_ave+=x[i]; y_ave+=y[i]; z_ave+=z[i]; norm++;
      x2_ave+=x[i]*x[i]; y2_ave+=y[i]*y[i]; z2_ave+=z[i]*z[i];
      xy_ave+=x[i]*y[i]; xz_ave+=x[i]*z[i]; yz_ave+=y[i]*z[i];
    }
  }

  xy_ave=(float)norm*xy_ave-(x_ave*y_ave);
  xz_ave=(float)norm*xz_ave-(x_ave*z_ave);
  yz_ave=(float)norm*yz_ave-(y_ave*z_ave);
  x2_ave=(float)norm*x2_ave-(x_ave*x_ave);
  y2_ave=(float)norm*y2_ave-(y_ave*y_ave);
  z2_ave=(float)norm*z2_ave-(z_ave*z_ave);

  *a=(y2_ave*xz_ave-xy_ave*yz_ave)/(x2_ave*y2_ave-xy_ave*xy_ave);
  *b=(x2_ave*yz_ave-xy_ave*xz_ave)/(x2_ave*y2_ave-xy_ave*xy_ave);
  *c=z_ave-(*a)*x_ave-(*b)*y_ave; *c/=(float)norm;
  *r=((*a)*xz_ave+(*b)*yz_ave)/
    sqrt(z2_ave*((*a)*(*a)*x2_ave+(*b)*(*b)*y2_ave+ 2*(*a)*(*b)*xy_ave));
  (*chi)=0;
  for(i=0; i<n; i++){
    chi1= z[i]-(*a)*x[i]-(*b)*y[i]-(*c);
    (*chi) += chi1*chi1;
  }
  (*chi)/=z2_ave;
  return(norm);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movl $0x0, -0x38(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x3c(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x40(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x44(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x48(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x4c(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x50(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x54(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x58(%rbp)
xorps %xmm0, %xmm0
movss %xmm0, -0x5c(%rbp)
cmpl $0x3, -0x8(%rbp)
jge 0x37b01
movl -0x8(%rbp), %esi
leaq 0x46557(%rip), %rdi     # 0x7e045
movb $0x0, %al
callq 0x10d0
movl $0x0, -0x4(%rbp)
jmp 0x38041
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x37c8c
movq -0x28(%rbp), %rax
movslq -0x34(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x37c7c
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
addss -0x54(%rbp), %xmm0
movss %xmm0, -0x54(%rbp)
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
addss -0x58(%rbp), %xmm0
movss %xmm0, -0x58(%rbp)
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
addss -0x5c(%rbp), %xmm0
movss %xmm0, -0x5c(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x48(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x48(%rbp)
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x4c(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x4c(%rbp)
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x50(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x50(%rbp)
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x3c(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x40(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movss -0x44(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x44(%rbp)
jmp 0x37c7e
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x37b08
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x3c(%rbp), %xmm2
movss -0x54(%rbp), %xmm1
mulss -0x58(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x3c(%rbp)
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x40(%rbp), %xmm2
movss -0x54(%rbp), %xmm1
mulss -0x5c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x40(%rbp)
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x44(%rbp), %xmm2
movss -0x58(%rbp), %xmm1
mulss -0x5c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x44(%rbp)
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x48(%rbp), %xmm2
movss -0x54(%rbp), %xmm1
mulss -0x54(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x48(%rbp)
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x4c(%rbp), %xmm2
movss -0x58(%rbp), %xmm1
mulss -0x58(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x4c(%rbp)
cvtsi2ssl -0x38(%rbp), %xmm0
movss -0x50(%rbp), %xmm2
movss -0x5c(%rbp), %xmm1
mulss -0x5c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x50(%rbp)
movss -0x4c(%rbp), %xmm0
movss -0x40(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
mulss -0x44(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x48(%rbp), %xmm1
movss -0x4c(%rbp), %xmm3
movss -0x3c(%rbp), %xmm2
mulss -0x3c(%rbp), %xmm2
movd %xmm2, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm2
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
divss %xmm1, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, (%rax)
movss -0x48(%rbp), %xmm0
movss -0x44(%rbp), %xmm2
movss -0x3c(%rbp), %xmm1
mulss -0x40(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss -0x48(%rbp), %xmm1
movss -0x4c(%rbp), %xmm3
movss -0x3c(%rbp), %xmm2
mulss -0x3c(%rbp), %xmm2
movd %xmm2, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm2
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
divss %xmm1, %xmm0
movq 0x10(%rbp), %rax
movss %xmm0, (%rax)
movss -0x5c(%rbp), %xmm0
movq -0x30(%rbp), %rax
movss (%rax), %xmm1
movss -0x54(%rbp), %xmm2
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x10(%rbp), %rax
movss (%rax), %xmm0
movss -0x58(%rbp), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x18(%rbp), %rax
movss %xmm0, (%rax)
cvtsi2ssl -0x38(%rbp), %xmm1
movq 0x18(%rbp), %rax
movss (%rax), %xmm0
divss %xmm1, %xmm0
movss %xmm0, (%rax)
movq -0x30(%rbp), %rax
movss (%rax), %xmm0
movss -0x40(%rbp), %xmm2
movq 0x10(%rbp), %rax
movss (%rax), %xmm1
mulss -0x44(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x68(%rbp)
movss -0x50(%rbp), %xmm0
movq -0x30(%rbp), %rax
movss (%rax), %xmm2
movq -0x30(%rbp), %rax
mulss (%rax), %xmm2
movss -0x48(%rbp), %xmm3
movq 0x10(%rbp), %rax
movss (%rax), %xmm1
movq 0x10(%rbp), %rax
mulss (%rax), %xmm1
mulss -0x4c(%rbp), %xmm1
mulss %xmm3, %xmm2
addss %xmm1, %xmm2
movq -0x30(%rbp), %rax
movss 0x3e164(%rip), %xmm1    # 0x76094
mulss (%rax), %xmm1
movq 0x10(%rbp), %rax
mulss (%rax), %xmm1
movss -0x3c(%rbp), %xmm3
mulss %xmm3, %xmm1
addss %xmm2, %xmm1
mulss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x1220
movaps %xmm0, %xmm1
movsd -0x68(%rbp), %xmm0
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x20(%rbp), %rax
movss %xmm0, (%rax)
movq 0x28(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, (%rax)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x38026
movq -0x10(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x30(%rbp), %rax
movss (%rax), %xmm1
movq -0x18(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x10(%rbp), %rax
movss (%rax), %xmm0
movq -0x20(%rbp), %rax
movslq -0x34(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x18(%rbp), %rax
subss (%rax), %xmm0
movss %xmm0, -0x60(%rbp)
movss -0x60(%rbp), %xmm0
movss -0x60(%rbp), %xmm2
movq 0x28(%rbp), %rax
movss (%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rax)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x37f80
movss -0x50(%rbp), %xmm1
movq 0x28(%rbp), %rax
movss (%rax), %xmm0
divss %xmm1, %xmm0
movss %xmm0, (%rax)
movl -0x38(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)