// File: /workspace/github_c_makefile_star2_O3/josch[P]stride/geometry.c
// Function: Place123_X
void Place123_X(float *Coord1, float *Coord2, float *Coord3, float Dist3X, float Ang23X, 
	       float *CoordX)
{

/*

   Atom1
     \                     AtomX
      \ ^UnVect2            /
       \|                  /
       Atom2----------Atom3->UnVect1

*/

  float Length_23, Length_12;
  float Proj3X_1, Proj3X_2, Proj12_1, Proj12_2, Rad1, Rad2;
  float UnVect1[3], UnVect2[3];
  int i;

  Length_23 = Dist(Coord3,Coord2);
  Length_12 = Dist(Coord2,Coord1);
  Rad1 = RAD(180.0-Ang23X);
  Rad2 = RAD(Ang(Coord1,Coord2,Coord3)-90.0); 
  Proj3X_1 = Dist3X*cos(Rad1);
  Proj3X_2 = Dist3X*sin(Rad1);
  Proj12_2 = cos(Rad2)*Length_12;
  Proj12_1 = sin(Rad2)*Length_12;

  for( i=0; i<3; i++ ) {
    UnVect1[i] = (Coord3[i]-Coord2[i])/Length_23;
    UnVect2[i] = ((Coord1[i]-Coord2[i]) - ( -UnVect1[i]*Proj12_1))/Proj12_2;
  }

  for( i=0; i<3; i++ ) 
    CoordX[i] = Proj3X_1*UnVect1[i]+Proj3X_2*UnVect2[i]+Coord3[i];
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rcx, %rbx
movss %xmm1, 0x8(%rsp)
movss %xmm0, (%rsp)
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
xorps %xmm0, %xmm0
xorl %eax, %eax
movss (%r14,%rax,4), %xmm1
subss (%r15,%rax,4), %xmm1
mulss %xmm1, %xmm1
addss %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x461c
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jb 0x4647
sqrtss %xmm0, %xmm0
jmp 0x464f
callq 0x2170
xorps %xmm2, %xmm2
xorl %eax, %eax
movss (%r15,%rax,4), %xmm1
subss (%r12,%rax,4), %xmm1
mulss %xmm1, %xmm1
addss %xmm1, %xmm2
incq %rax
cmpq $0x3, %rax
jne 0x4651
movss %xmm0, 0x2c(%rsp)
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm2
jb 0x4685
xorps %xmm0, %xmm0
sqrtss %xmm2, %xmm0
jmp 0x468d
movaps %xmm2, %xmm0
callq 0x2170
movss %xmm0, 0x10(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x8(%rsp), %xmm0
movsd 0x151dc(%rip), %xmm2    # 0x19880
movapd %xmm2, %xmm1
subsd %xmm0, %xmm1
mulsd 0x151d4(%rip), %xmm1    # 0x19888
divsd %xmm2, %xmm1
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
movss %xmm0, 0x8(%rsp)
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x40f4
cvtss2sd %xmm0, %xmm0
addsd 0x151b1(%rip), %xmm0    # 0x19890
mulsd 0x151a1(%rip), %xmm0    # 0x19888
divsd 0x15191(%rip), %xmm0    # 0x19880
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtss2sd (%rsp), %xmm0
movsd %xmm0, (%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x8(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
callq 0x2100
mulsd (%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x18(%rsp), %xmm0
callq 0x21d0
mulsd (%rsp), %xmm0
movsd %xmm0, (%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x20(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
callq 0x2100
xorps %xmm1, %xmm1
cvtss2sd 0x10(%rsp), %xmm1
movsd %xmm1, 0x10(%rsp)
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x18(%rsp)
movsd 0x20(%rsp), %xmm0
callq 0x21d0
movss 0x18(%rsp), %xmm5
mulsd 0x10(%rsp), %xmm0
cvtsd2ss %xmm0, %xmm0
xorl %eax, %eax
movss 0x2c(%rsp), %xmm4
movss (%r14,%rax,4), %xmm1
movss (%r15,%rax,4), %xmm2
subss %xmm2, %xmm1
divss %xmm4, %xmm1
movss %xmm1, 0x3c(%rsp,%rax,4)
movss (%r12,%rax,4), %xmm3
subss %xmm2, %xmm3
mulss %xmm0, %xmm1
addss %xmm3, %xmm1
divss %xmm5, %xmm1
movss %xmm1, 0x30(%rsp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x478e
xorps %xmm0, %xmm0
cvtsd2ss 0x8(%rsp), %xmm0
xorps %xmm1, %xmm1
cvtsd2ss (%rsp), %xmm1
xorl %eax, %eax
movss 0x30(%rsp,%rax,4), %xmm2
mulss %xmm1, %xmm2
movss 0x3c(%rsp,%rax,4), %xmm3
mulss %xmm0, %xmm3
addss %xmm2, %xmm3
addss (%r14,%rax,4), %xmm3
movss %xmm3, (%rbx,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x47e0
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq