// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/anharmonic_tnm.c
// Function: Interpolation
void Interpolation(struct interaction *Int,
		   struct interaction *Int2,
		   float r1, float r2)
{
  // Interpolate between r1 and r2 so that V=0 at r2,
  // V+=V-, V1+=V1-, V2+=V2- at r1
  float Dr=r1-r2, Dr2=Dr*Dr, Dr3=Dr2*Dr;
  float V0, V1, V2;  // Constraints at r1
  struct interaction *I1, *I2;
  if(Int2){
    if(Int2->r0<Int->r0){I1=Int2; I2=Int;}
    else{I1=Int; I2=Int2;}
  }else{
    I1=Int; I2=NULL;
  }
  V0=Compute_V(I1, r1);
  V1=Compute_V1(I1, r1);
  V2=Compute_V2(I1, r1, 1);
  V1*=Dr; V2*=Dr2;

  if(Int2==NULL){
    // Interpolate the final part
    Int->r3=r1;
    Int->b3=(10*V0-4*V1+0.5*V2)/Dr3;
    Int->b4=(-15*V0+7*V1-V2)/(Dr3*Dr);
    Int->b5=(6*V0-3*V1+0.5*V2)/(Dr3*Dr2);
  }else{ // Interpolate the median part
    Int->r1=r1; Int->r2=r2;
    if(Int2->E_min<Int->E_min)
      Int->E_min=Int2->E_min;
    // Constraints at r2
    float V0_2=Compute_V(I2, r2);
    float V1_2=Compute_V1(I2, r2);
    float V2_2=Compute_V2(I2, r2, 1);
    Int->a0=V0_2;
    Int->a1=V1_2;
    Int->a2=V2_2*0.5;
    V1_2*=Dr; V2_2*=Dr2; 
    V0-=(V0_2+V1_2+0.5*V2_2);
    V1-=(V1_2+V2_2);
    V2-=V2_2;
    Int->a3=(10*V0-4*V1+0.5*V2)/Dr3;
    Int->a4=(-15*V0+7*V1-V2)/(Dr3*Dr);
    Int->a5=(6*V0-3*V1+0.5*V2)/(Dr3*Dr2);

    if(Int2->r0<Int->r0){
      // The KB potential has minimum before the SB potential
      double A0=Int->A0, A1=Int->A1, A2=Int->A2, A4=Int->A4;
      Int->A0=Int2->A0; Int->A1=Int2->A1;
      Int->A2=Int2->A2; Int->A4=Int2->A4;
      Int->B0=A0; Int->B1=A1;
      Int->B2=A2; Int->B4=A4;
    }else{
      Int->B0=Int2->A0; Int->B1=Int2->A1;
      Int->B2=Int2->A2; Int->B4=Int2->A4;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movss %xmm0, -0x14(%rbp)
movss %xmm1, -0x18(%rbp)
movss -0x14(%rbp), %xmm0
subss -0x18(%rbp), %xmm0
movss %xmm0, -0x1c(%rbp)
movss -0x1c(%rbp), %xmm0
mulss -0x1c(%rbp), %xmm0
movss %xmm0, -0x20(%rbp)
movss -0x20(%rbp), %xmm0
mulss -0x1c(%rbp), %xmm0
movss %xmm0, -0x24(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x2a66a
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm1
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2a658
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x2a668
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x2a67a
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x38(%rbp), %rdi
movss -0x14(%rbp), %xmm0
callq 0x27810
movss %xmm0, -0x28(%rbp)
movq -0x38(%rbp), %rdi
movss -0x14(%rbp), %xmm0
callq 0x285e0
movss %xmm0, -0x2c(%rbp)
movq -0x38(%rbp), %rdi
movss -0x14(%rbp), %xmm0
movl $0x1, %esi
callq 0x28af0
movss %xmm0, -0x30(%rbp)
movss -0x1c(%rbp), %xmm0
mulss -0x2c(%rbp), %xmm0
movss %xmm0, -0x2c(%rbp)
movss -0x20(%rbp), %xmm0
mulss -0x30(%rbp), %xmm0
movss %xmm0, -0x30(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x2a808
movss -0x14(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x18(%rax)
movss -0x28(%rbp), %xmm0
movss 0x518f0(%rip), %xmm1    # 0x7bfec
mulss -0x2c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
movss 0x51cde(%rip), %xmm2    # 0x7c3f4
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movss -0x30(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4b8d5(%rip), %xmm2    # 0x76008
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movss -0x24(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
divsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0xa0(%rax)
movss -0x28(%rbp), %xmm0
movss 0x51c8f(%rip), %xmm1    # 0x7c3f0
mulss -0x2c(%rbp), %xmm1
movss 0x51c7e(%rip), %xmm2    # 0x7c3ec
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
subss -0x30(%rbp), %xmm0
movss -0x24(%rbp), %xmm1
mulss -0x1c(%rbp), %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0xa8(%rax)
movss -0x28(%rbp), %xmm0
movss 0x4b8d2(%rip), %xmm1    # 0x76078
mulss -0x2c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
movss 0x4b8e8(%rip), %xmm2    # 0x760a8
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movss -0x30(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4b82b(%rip), %xmm2    # 0x76008
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movss -0x24(%rbp), %xmm1
mulss -0x20(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
divsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0xb0(%rax)
jmp 0x2ab97
movss -0x14(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x10(%rax)
movss -0x18(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, 0x14(%rax)
movq -0x10(%rbp), %rax
movsd 0xb8(%rax), %xmm1
movq -0x8(%rbp), %rax
movsd 0xb8(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2a85a
movq -0x10(%rbp), %rax
movsd 0xb8(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0xb8(%rax)
movq -0x40(%rbp), %rdi
movss -0x18(%rbp), %xmm0
callq 0x27810
movss %xmm0, -0x44(%rbp)
movq -0x40(%rbp), %rdi
movss -0x18(%rbp), %xmm0
callq 0x285e0
movss %xmm0, -0x48(%rbp)
movq -0x40(%rbp), %rdi
movss -0x18(%rbp), %xmm0
movl $0x1, %esi
callq 0x28af0
movss %xmm0, -0x4c(%rbp)
movss -0x44(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x70(%rax)
movss -0x48(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x78(%rax)
movss -0x4c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4b73b(%rip), %xmm1    # 0x76008
mulsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x80(%rax)
movss -0x1c(%rbp), %xmm0
mulss -0x48(%rbp), %xmm0
movss %xmm0, -0x48(%rbp)
movss -0x20(%rbp), %xmm0
mulss -0x4c(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movss -0x44(%rbp), %xmm0
addss -0x48(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movss -0x4c(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
movsd 0x4b6ee(%rip), %xmm2    # 0x76008
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movss -0x28(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x28(%rbp)
movss -0x48(%rbp), %xmm1
addss -0x4c(%rbp), %xmm1
movss -0x2c(%rbp), %xmm0
subss %xmm1, %xmm0
movss %xmm0, -0x2c(%rbp)
movss -0x4c(%rbp), %xmm1
movss -0x30(%rbp), %xmm0
subss %xmm1, %xmm0
movss %xmm0, -0x30(%rbp)
movss -0x28(%rbp), %xmm0
movss 0x5167c(%rip), %xmm1    # 0x7bfec
mulss -0x2c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
movss 0x51a6a(%rip), %xmm2    # 0x7c3f4
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movss -0x30(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4b661(%rip), %xmm2    # 0x76008
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movss -0x24(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
divsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x88(%rax)
movss -0x28(%rbp), %xmm0
movss 0x51a1b(%rip), %xmm1    # 0x7c3f0
mulss -0x2c(%rbp), %xmm1
movss 0x51a0a(%rip), %xmm2    # 0x7c3ec
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
subss -0x30(%rbp), %xmm0
movss -0x24(%rbp), %xmm1
mulss -0x1c(%rbp), %xmm1
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x90(%rax)
movss -0x28(%rbp), %xmm0
movss 0x4b65e(%rip), %xmm1    # 0x76078
mulss -0x2c(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
movss 0x4b674(%rip), %xmm2    # 0x760a8
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movss -0x30(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x4b5b7(%rip), %xmm2    # 0x76008
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movss -0x24(%rbp), %xmm1
mulss -0x20(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
divsd %xmm1, %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x98(%rax)
movq -0x10(%rbp), %rax
movsd 0x20(%rax), %xmm1
movq -0x8(%rbp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2ab4d
movq -0x8(%rbp), %rax
movsd 0x30(%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x8(%rbp), %rax
movsd 0x38(%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x8(%rbp), %rax
movsd 0x40(%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
movq -0x8(%rbp), %rax
movsd 0x48(%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x30(%rax)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x38(%rax)
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x40(%rax)
movq -0x10(%rbp), %rax
movsd 0x48(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x48(%rax)
movsd -0x58(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x50(%rax)
movsd -0x60(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x58(%rax)
movsd -0x68(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x60(%rax)
movsd -0x70(%rbp), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x68(%rax)
jmp 0x2ab95
movq -0x10(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x50(%rax)
movq -0x10(%rbp), %rax
movsd 0x38(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x58(%rax)
movq -0x10(%rbp), %rax
movsd 0x40(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x60(%rax)
movq -0x10(%rbp), %rax
movsd 0x48(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x68(%rax)
jmp 0x2ab97
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)