// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/buildup.c
// Function: Internal_coordinates
void Internal_coordinates(double *int_coord, int N_axes,
			  struct bond *bonds, int N_atoms)
{
  struct bond *bond; int i, k=0;
  for(i=0; i<N_axes; i++)int_coord[i]=0;
  for(i=1; i<N_atoms; i++){
    bond=bonds+i;
    if(bond->i_atom<0)break;
    if(bond->len >= 0){
      if(bond->len>=N_axes)goto error;
      int_coord[bond->len]=bond->l; k++;
      if(isnan(int_coord[bond->len]))goto error;
    }
    if(bond->angle >= 0){
      if(bond->angle>=N_axes)goto error;
      double c=bond->r_cos_theta/bond->l;
      if(c>1){c=1;}else if(c<-1){c=-1;}
      int_coord[bond->angle]=acos(c); k++;
      if(isnan(int_coord[bond->angle]))goto error;
    }
    if((bond->torsion >= 0)&&(bond->atom->main)){
      if(bond->torsion>=N_axes)goto error;
      double c=bond->phi;
      while(c > TWOPI){c-=TWOPI;}
      while(c <-TWOPI){c+=TWOPI;}
      int_coord[bond->torsion]=c; k++;
      if(isnan(int_coord[bond->torsion]))goto error;
    }
  }
  if(0)printf("%d internal coordinates over %d stored\n", k, N_axes);
  return;
 error:
  printf("ERROR in internal_coordinates, bond %d atom %s %c%d chain %d\n",
	 i, bond->atom->name, bond->atom->aa,
	 bond->atom->res, bond->atom->chain);
  printf("len: %d angle: %d torsion: %d Total_dofs= %d\n",
	 bond->len, bond->angle, bond->torsion, N_axes);
  if(bond->len>=0)printf("Len: %.2f\n", int_coord[bond->len]);
  if(bond->angle>=0)printf("Angle: %.2f\n", int_coord[bond->angle]);
  if(bond->torsion>=0)printf("Torsion: %.2f\n", int_coord[bond->torsion]);
  printf("r= %.2f r_cos_theta %.4f phi= %.4f\n",
	  bond->l, bond->r_cos_theta, bond->phi);
  exit(8);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x1e227
movq -0x8(%rbp), %rax
movslq -0x2c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x1e204
movl $0x1, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x1e481
movq -0x18(%rbp), %rax
movslq -0x2c(%rbp), %rcx
imulq $0xc0, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x20(%rax)
jge 0x1e25f
jmp 0x1e481
movq -0x28(%rbp), %rax
cmpl $0x0, 0x34(%rax)
jl 0x1e2c2
movq -0x28(%rbp), %rax
movl 0x34(%rax), %eax
cmpl -0xc(%rbp), %eax
jl 0x1e27a
jmp 0x1e487
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x34(%rcx), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x34(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x1e2bb
jmp 0x1e2c0
jmp 0x1e487
jmp 0x1e2c2
movq -0x28(%rbp), %rax
cmpl $0x0, 0x38(%rax)
jl 0x1e381
movq -0x28(%rbp), %rax
movl 0x38(%rax), %eax
cmpl -0xc(%rbp), %eax
jl 0x1e2e1
jmp 0x1e487
movq -0x28(%rbp), %rax
movsd 0x60(%rax), %xmm0
movq -0x28(%rbp), %rax
divsd 0x58(%rax), %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x38(%rbp), %xmm0
movsd 0x57d43(%rip), %xmm1    # 0x76048
ucomisd %xmm1, %xmm0
jbe 0x1e31a
movsd 0x57d35(%rip), %xmm0    # 0x76048
movsd %xmm0, -0x38(%rbp)
jmp 0x1e338
movsd 0x57d0e(%rip), %xmm0    # 0x76030
ucomisd -0x38(%rbp), %xmm0
jbe 0x1e336
movsd 0x57cff(%rip), %xmm0    # 0x76030
movsd %xmm0, -0x38(%rbp)
jmp 0x1e338
movsd -0x38(%rbp), %xmm0
callq 0x1110
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x38(%rcx), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x38(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x1e37a
jmp 0x1e37f
jmp 0x1e487
jmp 0x1e381
movq -0x28(%rbp), %rax
cmpl $0x0, 0x3c(%rax)
jl 0x1e471
movq -0x28(%rbp), %rax
movq (%rax), %rax
cmpl $0x0, 0x48(%rax)
je 0x1e471
movq -0x28(%rbp), %rax
movl 0x3c(%rax), %eax
cmpl -0xc(%rbp), %eax
jl 0x1e3b1
jmp 0x1e487
movq -0x28(%rbp), %rax
movsd 0x68(%rax), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x40(%rbp), %xmm0
movss 0x6d424(%rip), %xmm1    # 0x8b7f0
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x1e3f2
movss 0x6d412(%rip), %xmm0    # 0x8b7f0
cvtss2sd %xmm0, %xmm1
movsd -0x40(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0x1e3bf
jmp 0x1e3f4
movsd -0x40(%rbp), %xmm1
movss 0x6d3ef(%rip), %xmm0    # 0x8b7f0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
cvtss2sd %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1e430
movss 0x6d3d0(%rip), %xmm0    # 0x8b7f0
cvtss2sd %xmm0, %xmm0
addsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
jmp 0x1e3f4
movsd -0x40(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x1e46d
jmp 0x1e46f
jmp 0x1e487
jmp 0x1e471
jmp 0x1e473
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x1e22e
addq $0x40, %rsp
popq %rbp
retq
movl -0x2c(%rbp), %esi
movq -0x28(%rbp), %rax
movq (%rax), %rdx
addq $0x18, %rdx
movq -0x28(%rbp), %rax
movq (%rax), %rax
movsbl 0x68(%rax), %ecx
movq -0x28(%rbp), %rax
movq (%rax), %rax
movl 0x64(%rax), %r8d
movq -0x28(%rbp), %rax
movq (%rax), %rax
movl 0x6c(%rax), %r9d
leaq 0x5d86c(%rip), %rdi     # 0x7bd29
movb $0x0, %al
callq 0x10d0
movq -0x28(%rbp), %rax
movl 0x34(%rax), %esi
movq -0x28(%rbp), %rax
movl 0x38(%rax), %edx
movq -0x28(%rbp), %rax
movl 0x3c(%rax), %ecx
movl -0xc(%rbp), %r8d
leaq 0x5d883(%rip), %rdi     # 0x7bd67
movb $0x0, %al
callq 0x10d0
movq -0x28(%rbp), %rax
cmpl $0x0, 0x34(%rax)
jl 0x1e514
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x34(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
leaq 0x5d888(%rip), %rdi     # 0x7bd95
movb $0x1, %al
callq 0x10d0
movq -0x28(%rbp), %rax
cmpl $0x0, 0x38(%rax)
jl 0x1e53d
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x38(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
leaq 0x5d86a(%rip), %rdi     # 0x7bda0
movb $0x1, %al
callq 0x10d0
movq -0x28(%rbp), %rax
cmpl $0x0, 0x3c(%rax)
jl 0x1e566
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
movsd (%rax,%rcx,8), %xmm0
leaq 0x5d84e(%rip), %rdi     # 0x7bdad
movb $0x1, %al
callq 0x10d0
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd 0x60(%rax), %xmm1
movq -0x28(%rbp), %rax
movsd 0x68(%rax), %xmm2
leaq 0x5d834(%rip), %rdi     # 0x7bdbc
movb $0x3, %al
callq 0x10d0
movl $0x8, %edi
callq 0x1210
nopl (%rax)