// File: /workspace/github_c_makefile_star2_O3/ugobas[P]tnm/nma.c
// Function: Tors_fraction
float Tors_fraction(struct Tors *Diff, float *mass)
{
  double MRR=0, MRT=0, MRW=0, mtot=0; int i;
  // Torsional part / Total
  if(Diff->RMSD==0){
    for(i=0; i<Diff->N_Cart; i++){
      MRR+=mass[i]*Diff->Cart[i]*Diff->Cart[i]; mtot+=mass[i];
    }
    Diff->RMSD=sqrt(MRR/mtot);
    Diff->M=mtot;
  }else{
    mtot=Diff->M; MRR=Diff->M*Diff->RMSD*Diff->RMSD;
  }
  for(i=0; i<Diff->N_axes; i++){
    MRW += Diff->MW_Tors[i]*Diff->MW_Tors[i];
    MRT += Diff->Tors[i]*Diff->Tors[i];
  }
  Diff->RMSD_W=sqrt(MRW/mtot);
  Diff->RMSD_Tors=sqrt(MRT/Diff->N_axes);
  Diff->RMSD_NoTors=sqrt((MRR-MRW)/mtot);
  return(MRW/MRR);
}

// Assembly:
pushq %rbx
subq $0x40, %rsp
movq %rdi, %rbx
movss 0x30(%rdi), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x26668
jp 0x26668
movslq 0x4(%rbx), %rax
testq %rax, %rax
jle 0x2667f
movq 0x8(%rbx), %rcx
xorpd %xmm3, %xmm3
xorl %edx, %edx
movss (%rsi,%rdx,4), %xmm0
movss (%rcx,%rdx,4), %xmm1
movaps %xmm0, %xmm2
mulss %xmm1, %xmm2
mulss %xmm1, %xmm2
unpcklps %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
cvtps2pd %xmm2, %xmm0
addpd %xmm0, %xmm3
incq %rdx
cmpq %rdx, %rax
jne 0x2663f
jmp 0x26683
movss 0x3c(%rbx), %xmm1
cvtss2sd %xmm1, %xmm2
mulss %xmm0, %xmm1
mulss %xmm0, %xmm1
cvtss2sd %xmm1, %xmm3
jmp 0x266d2
xorpd %xmm3, %xmm3
movapd %xmm3, %xmm2
unpckhpd %xmm3, %xmm2            # xmm2 = xmm2[1],xmm3[1]
movapd %xmm3, %xmm0
divsd %xmm2, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x266a2
sqrtsd %xmm0, %xmm0
jmp 0x266bd
movapd %xmm3, (%rsp)
movapd %xmm2, 0x10(%rsp)
callq 0x22a0
movapd 0x10(%rsp), %xmm2
movapd (%rsp), %xmm3
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x30(%rbx)
xorps %xmm0, %xmm0
cvtsd2ss %xmm2, %xmm0
movss %xmm0, 0x3c(%rbx)
movslq (%rbx), %rax
testq %rax, %rax
jle 0x26709
movq 0x10(%rbx), %rcx
movq 0x18(%rbx), %rdx
xorpd %xmm4, %xmm4
xorl %esi, %esi
movss (%rcx,%rsi,4), %xmm0
movss (%rdx,%rsi,4), %xmm1
unpcklps %xmm0, %xmm1            # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
mulps %xmm1, %xmm1
cvtps2pd %xmm1, %xmm0
addpd %xmm0, %xmm4
incq %rsi
cmpq %rsi, %rax
jne 0x266e8
jmp 0x2670d
xorpd %xmm4, %xmm4
movapd %xmm4, %xmm1
unpckhpd %xmm4, %xmm1            # xmm1 = xmm1[1],xmm4[1]
movapd %xmm1, %xmm0
divsd %xmm2, %xmm0
xorpd %xmm5, %xmm5
ucomisd %xmm5, %xmm0
movaps %xmm3, (%rsp)
movaps %xmm2, 0x10(%rsp)
movapd %xmm1, 0x20(%rsp)
jb 0x2673c
sqrtsd %xmm0, %xmm0
jmp 0x26751
movapd %xmm4, 0x30(%rsp)
callq 0x22a0
xorpd %xmm5, %xmm5
movapd 0x30(%rsp), %xmm4
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x34(%rbx)
xorps %xmm0, %xmm0
cvtsi2sdl (%rbx), %xmm0
divsd %xmm0, %xmm4
ucomisd %xmm5, %xmm4
jb 0x26774
xorps %xmm0, %xmm0
sqrtsd %xmm4, %xmm0
jmp 0x2677d
movapd %xmm4, %xmm0
callq 0x22a0
movapd (%rsp), %xmm2
movapd 0x10(%rsp), %xmm1
movapd 0x20(%rsp), %xmm3
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x38(%rbx)
movapd %xmm2, %xmm0
subsd %xmm3, %xmm0
divsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x267b3
sqrtsd %xmm0, %xmm0
jmp 0x267c3
callq 0x22a0
movapd 0x20(%rsp), %xmm3
movapd (%rsp), %xmm2
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x2c(%rbx)
divsd %xmm2, %xmm3
xorps %xmm0, %xmm0
cvtsd2ss %xmm3, %xmm0
addq $0x40, %rsp
popq %rbx
retq