// File: /workspace/github_cpp_makefile_star2_O3/carlos-urena[P]svg-gen/svgobjects.cpp
// Function: CamRefSys::initialize(VectorTempl3<float> const&, VectorTempl3<float> const&, VectorTempl3<float> const&)
void CamRefSys::initialize( const vec3 & look_at, const vec3 & observer, const vec3 & p_vup )
{
  constexpr real epsilon = 1e-5 ;

  assert( epsilon <= (observer-look_at).length() ) ;

  origin = observer ;
  zAxis = (observer-look_at).normalized();
  xAxis = (p_vup.cross(zAxis)).normalized();  assert( fabs(xAxis.length()-1.0) < epsilon );
  yAxis = (zAxis.cross(xAxis)).normalized() ; assert( fabs(yAxis.length()-1.0) < epsilon );

  assert( xAxis.dot(yAxis) < epsilon );
  assert( yAxis.dot(zAxis) < epsilon );
  assert( zAxis.dot(xAxis) < epsilon );
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rcx, %r14
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %rbx
xorl %eax, %eax
movss (%r15,%rax,4), %xmm0
subss (%r12,%rax,4), %xmm0
movss %xmm0, -0x30(%rbp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x66b7
movsd -0x30(%rbp), %xmm0
movss -0x28(%rbp), %xmm1
movsd %xmm0, -0x30(%rbp)
movss %xmm1, -0x28(%rbp)
xorpd %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd -0x30(%rbp,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x66ec
cvtsd2ss %xmm0, %xmm0
xorpd %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x6719
sqrtss %xmm0, %xmm0
jmp 0x671e
callq 0x32d0
ucomiss 0x6b6b(%rip), %xmm0     # 0xd290
jb 0x6ac3
movl 0x8(%r15), %eax
movl %eax, 0x8(%rbx)
movq (%r15), %rax
movq %rax, (%rbx)
xorl %eax, %eax
movss (%r15,%rax,4), %xmm0
subss (%r12,%rax,4), %xmm0
movss %xmm0, -0x30(%rbp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x673a
movsd -0x30(%rbp), %xmm0
movss -0x28(%rbp), %xmm1
movsd %xmm0, -0x40(%rbp)
movss %xmm1, -0x38(%rbp)
xorpd %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd -0x40(%rbp,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x676f
cvtsd2ss %xmm0, %xmm0
xorpd %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x679c
sqrtss %xmm0, %xmm0
jmp 0x67a1
callq 0x32d0
xorl %eax, %eax
movss -0x40(%rbp,%rax,4), %xmm1
divss %xmm0, %xmm1
movss %xmm1, -0x30(%rbp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x67a3
movsd -0x30(%rbp), %xmm0
movss -0x28(%rbp), %xmm2
movss %xmm0, 0x24(%rbx)
movaps %xmm0, %xmm1
shufps $0x55, %xmm0, %xmm1     # xmm1 = xmm1[1,1],xmm0[1,1]
movss %xmm1, 0x28(%rbx)
movss %xmm2, 0x2c(%rbx)
movss (%r14), %xmm3
movss 0x4(%r14), %xmm4
movss 0x8(%r14), %xmm5
movaps %xmm1, %xmm6
mulss %xmm5, %xmm6
mulss %xmm0, %xmm5
mulss %xmm4, %xmm0
mulss %xmm2, %xmm4
subss %xmm6, %xmm4
mulss %xmm3, %xmm2
subss %xmm2, %xmm5
unpcklps %xmm5, %xmm4            # xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
mulss %xmm3, %xmm1
subss %xmm0, %xmm1
movlps %xmm4, -0x40(%rbp)
movss %xmm1, -0x38(%rbp)
xorps %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd -0x40(%rbp,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x6825
cvtsd2ss %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x6851
sqrtss %xmm0, %xmm0
jmp 0x6856
callq 0x32d0
xorl %eax, %eax
movss -0x40(%rbp,%rax,4), %xmm1
divss %xmm0, %xmm1
movss %xmm1, -0x30(%rbp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x6858
movsd -0x30(%rbp), %xmm0
movss -0x28(%rbp), %xmm1
movss %xmm0, 0xc(%rbx)
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
movss %xmm0, 0x10(%rbx)
movss %xmm1, 0x14(%rbx)
xorps %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd 0xc(%rbx,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x6893
cvtsd2ss %xmm0, %xmm0
xorpd %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x68c0
sqrtss %xmm0, %xmm0
jmp 0x68c5
callq 0x32d0
cvtss2sd %xmm0, %xmm0
addsd 0x6907(%rip), %xmm0     # 0xd1d8
andpd 0x6957(%rip), %xmm0     # 0xd230
movsd 0x68ff(%rip), %xmm1     # 0xd1e0
ucomisd %xmm0, %xmm1
jbe 0x6ae2
movss 0x28(%rbx), %xmm0
movss 0x14(%rbx), %xmm1
movss 0x2c(%rbx), %xmm2
movss 0xc(%rbx), %xmm3
movss 0x10(%rbx), %xmm4
movaps %xmm0, %xmm5
mulss %xmm1, %xmm5
movss 0x24(%rbx), %xmm6
mulss %xmm6, %xmm1
mulss %xmm4, %xmm6
mulss %xmm2, %xmm4
subss %xmm4, %xmm5
mulss %xmm3, %xmm2
subss %xmm1, %xmm2
unpcklps %xmm2, %xmm5            # xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
mulss %xmm0, %xmm3
subss %xmm3, %xmm6
movlps %xmm5, -0x40(%rbp)
movss %xmm6, -0x38(%rbp)
xorps %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd -0x40(%rbp,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x6941
cvtsd2ss %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x696d
sqrtss %xmm0, %xmm0
jmp 0x6972
callq 0x32d0
xorl %eax, %eax
movss -0x40(%rbp,%rax,4), %xmm1
divss %xmm0, %xmm1
movss %xmm1, -0x30(%rbp,%rax,4)
incq %rax
cmpq $0x3, %rax
jne 0x6974
movsd -0x30(%rbp), %xmm0
movss -0x28(%rbp), %xmm1
movss %xmm0, 0x18(%rbx)
shufps $0x55, %xmm0, %xmm0     # xmm0 = xmm0[1,1,1,1]
movss %xmm0, 0x1c(%rbx)
movss %xmm1, 0x20(%rbx)
xorps %xmm0, %xmm0
xorl %eax, %eax
xorps %xmm1, %xmm1
cvtss2sd 0x18(%rbx,%rax,4), %xmm1
mulsd %xmm1, %xmm1
addsd %xmm1, %xmm0
incq %rax
cmpq $0x3, %rax
jne 0x69af
cvtsd2ss %xmm0, %xmm0
xorpd %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x69dc
sqrtss %xmm0, %xmm0
jmp 0x69e1
callq 0x32d0
movsd 0x67f7(%rip), %xmm1     # 0xd1e0
cvtss2sd %xmm0, %xmm0
addsd 0x67e3(%rip), %xmm0     # 0xd1d8
andpd 0x6833(%rip), %xmm0     # 0xd230
ucomisd %xmm0, %xmm1
jbe 0x6b01
xorpd %xmm0, %xmm0
movq $-0xc, %rax
xorps %xmm1, %xmm1
cvtss2sd 0x18(%rbx,%rax), %xmm1
xorps %xmm2, %xmm2
cvtss2sd 0x24(%rbx,%rax), %xmm2
mulsd %xmm1, %xmm2
addsd %xmm2, %xmm0
addq $0x4, %rax
jne 0x6a12
xorps %xmm1, %xmm1
cvtsd2ss %xmm0, %xmm1
movss 0x684f(%rip), %xmm0     # 0xd290
ucomiss %xmm1, %xmm0
jbe 0x6b20
xorps %xmm1, %xmm1
movq $-0xc, %rax
xorps %xmm2, %xmm2
cvtss2sd 0x24(%rbx,%rax), %xmm2
xorps %xmm3, %xmm3
cvtss2sd 0x30(%rbx,%rax), %xmm3
mulsd %xmm2, %xmm3
addsd %xmm3, %xmm1
addq $0x4, %rax
jne 0x6a54
cvtsd2ss %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x6b3f
xorps %xmm1, %xmm1
xorl %eax, %eax
xorps %xmm2, %xmm2
cvtss2sd 0x24(%rbx,%rax,4), %xmm2
xorps %xmm3, %xmm3
cvtss2sd 0xc(%rbx,%rax,4), %xmm3
mulsd %xmm2, %xmm3
addsd %xmm3, %xmm1
incq %rax
cmpq $0x3, %rax
jne 0x6a86
cvtsd2ss %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x6b5e
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x69bf(%rip), %rdi      # 0xd489
leaq 0x69df(%rip), %rsi      # 0xd4b0
leaq 0x69e7(%rip), %rcx      # 0xd4bf
movl $0x68, %edx
callq 0x3120
leaq 0x6a1b(%rip), %rdi      # 0xd504
leaq 0x69c0(%rip), %rsi      # 0xd4b0
leaq 0x69c8(%rip), %rcx      # 0xd4bf
movl $0x6c, %edx
callq 0x3120
leaq 0x6a1f(%rip), %rdi      # 0xd527
leaq 0x69a1(%rip), %rsi      # 0xd4b0
leaq 0x69a9(%rip), %rcx      # 0xd4bf
movl $0x6d, %edx
callq 0x3120
leaq 0x6a23(%rip), %rdi      # 0xd54a
leaq 0x6982(%rip), %rsi      # 0xd4b0
leaq 0x698a(%rip), %rcx      # 0xd4bf
movl $0x6f, %edx
callq 0x3120
leaq 0x6a1f(%rip), %rdi      # 0xd565
leaq 0x6963(%rip), %rsi      # 0xd4b0
leaq 0x696b(%rip), %rcx      # 0xd4bf
movl $0x70, %edx
callq 0x3120
leaq 0x6a1b(%rip), %rdi      # 0xd580
leaq 0x6944(%rip), %rsi      # 0xd4b0
leaq 0x694c(%rip), %rcx      # 0xd4bf
movl $0x71, %edx
callq 0x3120
nop