// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/ridge_regression.c
// Function: Score_computation
void Score_computation(struct ridge_fit *fit,
		       float *lambda, float **evec,
		       float *yalpha, float *ya2, float *D,
		       float E0, float Y2, float *A_ref, float *A_inf,
		       int P, int N)
{
  int a;
  double H1=0, H2=0, H3=0, H2l=0, H3l=0, L1=0; 
  for(a=0; a<P; a++){
    float laLa=lambda[a]+fit->Lambda;   
    L1+=1./laLa;
    float yl=ya2[a]/laLa;  H1+=yl;
    yl/=laLa; H2+=yl;
    H2l+=yl*lambda[a];
    yl/=laLa; H3+=yl;
    H3l+=yl*lambda[a];
  }
  float csi=H2/H2l;
  //fit->nu=1.+fit->Lambda*csi; 
  fit->nu=H1/H2l; 
  fit->E=Y2-H1*fit->nu;
  fit->Cv=fit->Lambda*H1*(H1*H3-H2*H2)/(H2l*H2l);
  fit->A2=H2*fit->nu*fit->nu;
  fit->Sv1=fit->Lambda*H3-H3l;

  //*Cv2=yL5;
  //double E_nu=Y2-(H1+Lambda*H2);
  float Trace=(N-P+fit->Lambda*L1);
  float E_nu=Y2-2*H1+H2l;
  fit->GCV=N*E_nu/(Trace*Trace);
  fit->RR=((N-P)*E_nu/E0-2*Trace)/N;

  float A_ns[P]; 
  for(a=0; a<P; a++)A_ns[a]=yalpha[a]/(lambda[a]+fit->Lambda);
  for(a=0; a<P; a++){
    double sum=0; for(int b=0; b<P; b++)sum+=A_ns[b]*evec[b][a];
    fit->A[a]=fit->nu*sum;
  }

  double sum_csi=0, sum_inf=0;
  for(a=0; a<P; a++){
    float d=fit->A[a]-csi*A_ref[a]; sum_csi+=d*d;
    d=fit->A[a]-A_inf[a]; sum_inf+=d*d;
  }
  fit->LF_csi=fit->Lambda*sum_csi;
  fit->LF_inf=fit->Lambda*sum_inf;
  float mu_inv=1./(1+2*fit->Lambda*(csi-csi_inf));
  fit->LF_mu=fit->LF_inf*mu_inv;

  double norm=0, R2=0, Sh=0;
  for(a=0; a<P; a++){
    float x=fabs(fit->A[a]); R2+=x*x; if(x)Sh+=x*log(x); norm+=x;
  }
  fit->R2=R2/(norm*norm);
  fit->Sh=-Sh/norm+log(norm);

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movl 0x28(%rbp), %eax
movl 0x20(%rbp), %eax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movss %xmm0, -0x34(%rbp)
movss %xmm1, -0x38(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x48(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x50(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x58(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x68(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x70(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3ed5c
movq -0x10(%rbp), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x8(%rbp), %rax
addss 0xc(%rax), %xmm0
movss %xmm0, -0x74(%rbp)
movss -0x74(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x373be(%rip), %xmm0    # 0x76048
divsd %xmm1, %xmm0
addsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x28(%rbp), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
divss -0x74(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x78(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movss -0x74(%rbp), %xmm1
movss -0x78(%rbp), %xmm0
divss %xmm1, %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x78(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movss -0x78(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x3c(%rbp), %rcx
mulss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movss -0x74(%rbp), %xmm1
movss -0x78(%rbp), %xmm0
divss %xmm1, %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x78(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movss -0x78(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x3c(%rbp), %rcx
mulss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x68(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3ec52
movsd -0x50(%rbp), %xmm0
movsd -0x60(%rbp), %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x7c(%rbp)
movsd -0x48(%rbp), %xmm0
movsd -0x60(%rbp), %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x8(%rax)
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x48(%rbp), %xmm1
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x10(%rax)
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x48(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd -0x58(%rbp), %xmm3
movsd -0x50(%rbp), %xmm2
mulsd %xmm2, %xmm2
mulsd %xmm3, %xmm1
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd -0x60(%rbp), %xmm1
mulsd %xmm1, %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x14(%rax)
movsd -0x50(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
mulsd %xmm1, %xmm0
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x24(%rax)
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x58(%rbp), %xmm2
movsd -0x68(%rbp), %xmm1
mulsd %xmm2, %xmm0
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x28(%rax)
movl 0x28(%rbp), %eax
movl 0x20(%rbp), %ecx
subl %ecx, %eax
cvtsi2sd %eax, %xmm1
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x70(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x80(%rbp)
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x48(%rbp), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
movsd -0x60(%rbp), %xmm1
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x84(%rbp)
cvtsi2ssl 0x28(%rbp), %xmm0
movss -0x84(%rbp), %xmm1
mulss %xmm1, %xmm0
movss -0x80(%rbp), %xmm1
mulss %xmm1, %xmm1
divss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x34(%rax)
movl 0x28(%rbp), %eax
movl 0x20(%rbp), %edx
movl %eax, %ecx
subl %edx, %ecx
cvtsi2ss %ecx, %xmm0
movss -0x84(%rbp), %xmm1
mulss %xmm1, %xmm0
movss -0x34(%rbp), %xmm1
divss %xmm1, %xmm0
movss -0x80(%rbp), %xmm1
addss %xmm1, %xmm1
subss %xmm1, %xmm0
cvtsi2ss %eax, %xmm1
divss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x38(%rax)
movl 0x20(%rbp), %eax
movq %rsp, %rcx
movq %rcx, -0x90(%rbp)
leaq 0xf(,%rax,4), %rdx
andq $-0x10, %rdx
movq %rsp, %rcx
subq %rdx, %rcx
movq %rcx, -0xe8(%rbp)
movq %rcx, %rsp
movq %rax, -0x98(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3ef8e
movq -0xe8(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq -0x3c(%rbp), %rdx
movss (%rcx,%rdx,4), %xmm0
movq -0x10(%rbp), %rcx
movslq -0x3c(%rbp), %rdx
movss (%rcx,%rdx,4), %xmm1
movq -0x8(%rbp), %rcx
addss 0xc(%rcx), %xmm1
divss %xmm1, %xmm0
movslq -0x3c(%rbp), %rcx
movss %xmm0, (%rax,%rcx,4)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3ef44
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3f048
xorps %xmm0, %xmm0
movsd %xmm0, -0xa0(%rbp)
movl $0x0, -0xa4(%rbp)
movl -0xa4(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3f011
movq -0xe8(%rbp), %rax
movslq -0xa4(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq -0x18(%rbp), %rax
movslq -0xa4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x3c(%rbp), %rcx
mulss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0xa0(%rbp)
movl -0xa4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa4(%rbp)
jmp 0x3efb6
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd -0xa0(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movslq -0x3c(%rbp), %rcx
movss %xmm0, (%rax,%rcx,4)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3ef95
xorps %xmm0, %xmm0
movsd %xmm0, -0xb0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xb8(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3f12b
movq -0x8(%rbp), %rax
movq (%rax), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm1
movss -0x7c(%rbp), %xmm0
movq 0x10(%rbp), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0xbc(%rbp)
movss -0xbc(%rbp), %xmm0
mulss -0xbc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0xb0(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movq 0x18(%rbp), %rax
movslq -0x3c(%rbp), %rcx
subss (%rax,%rcx,4), %xmm0
movss %xmm0, -0xbc(%rbp)
movss -0xbc(%rbp), %xmm0
mulss -0xbc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xb8(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3f065
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd -0xb0(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x18(%rax)
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
mulsd -0xb8(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x1c(%rax)
movq -0x8(%rbp), %rax
movss 0x36f19(%rip), %xmm0    # 0x76094
mulss 0xc(%rax), %xmm0
movss -0x7c(%rbp), %xmm1
subss 0x5d23f(%rip), %xmm1    # 0x9c3cc
mulss %xmm1, %xmm0
movss 0x36ef7(%rip), %xmm1    # 0x76090
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x36e9f(%rip), %xmm0    # 0x76048
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xc0(%rbp)
movq -0x8(%rbp), %rax
movss 0x1c(%rax), %xmm0
mulss -0xc0(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x20(%rax)
xorps %xmm0, %xmm0
movsd %xmm0, -0xc8(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xd0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xd8(%rbp)
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl 0x20(%rbp), %eax
jge 0x3f2dc
movq -0x8(%rbp), %rax
movq (%rax), %rax
movslq -0x3c(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
cvtss2sd %xmm0, %xmm0
movaps 0x3d26e(%rip), %xmm1    # 0x7c490
pand %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xdc(%rbp)
movss -0xdc(%rbp), %xmm0
mulss -0xdc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0xd0(%rbp)
movss -0xdc(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x3f26a
jp 0x3f26a
jmp 0x3f2b2
movss -0xdc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0xf0(%rbp)
movss -0xdc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x10f0
movaps %xmm0, %xmm2
movsd -0xf0(%rbp), %xmm0
movsd -0xd8(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xd8(%rbp)
movss -0xdc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x3f1fb
movsd -0xd0(%rbp), %xmm0
movsd -0xc8(%rbp), %xmm1
mulsd -0xc8(%rbp), %xmm1
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x2c(%rax)
movsd -0xd8(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0xc8(%rbp), %xmm0
movsd %xmm0, -0xf8(%rbp)
movsd -0xc8(%rbp), %xmm0
callq 0x10f0
movaps %xmm0, %xmm1
movsd -0xf8(%rbp), %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x30(%rax)
movq -0x90(%rbp), %rax
movq %rax, %rsp
movq %rbp, %rsp
popq %rbp
retq
nopl (%rax)