// File: /workspace/github_c_makefile_star2_O2/halcy[P]quasi_crystals_bot/Vector/MatrixDouble.c
// Function: dmat3x3inverselookat
dmat3x3_t dmat3x3inverselookat(dvec3_t eye,dvec3_t center,dvec3_t up)
{
	dvec3_t backward=dvec3norm(dvec3sub(eye,center));
	dvec3_t right=dvec3norm(dvec3cross(up,backward));
	dvec3_t actualup=dvec3norm(dvec3cross(backward,right));

	return dmat3x3cols(right,actualup,backward);
}

// Assembly:
pushq %r14
pushq %rbx
leaq -0xa8(%rsp), %rsp
movupd 0xd8(%rsp), %xmm0
movapd 0xc0(%rsp), %xmm2
xorpd %xmm4, %xmm4
xorl %eax, %eax
movq %rdi, %rbx
subpd %xmm0, %xmm2
movsd 0xd0(%rsp), %xmm0
subsd 0xe8(%rsp), %xmm0
movapd %xmm2, %xmm1
movapd %xmm0, %xmm3
mulpd %xmm2, %xmm1
mulsd %xmm0, %xmm3
haddpd %xmm1, %xmm1
addsd %xmm3, %xmm1
sqrtsd %xmm1, %xmm3
movsd 0x31f5(%rip), %xmm1     # 0xc050
divsd %xmm3, %xmm1
ucomisd %xmm4, %xmm3
sete %al
movddup %xmm1, %xmm3            # xmm3 = xmm1[0,0]
mulpd %xmm2, %xmm3
movd %eax, %xmm2
pshufd $0x44, %xmm2, %xmm4     # xmm4 = xmm2[0,1,0,1]
pxor %xmm2, %xmm2
psllq $0x3f, %xmm4
pcmpgtq %xmm4, %xmm2
pandn %xmm3, %xmm2
xorpd %xmm3, %xmm3
je 0x8e97
mulsd %xmm1, %xmm0
movapd %xmm0, %xmm3
movdqa %xmm2, 0x30(%rsp)
movsd %xmm3, 0x40(%rsp)
leaq 0x90(%rsp), %r14
movq 0x40(%rsp), %rax
movq %r14, %rdi
movq %rax, 0x28(%rsp)
movaps 0x30(%rsp), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x100(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0xf0(%rsp), %xmm0
movups %xmm0, (%rsp)
callq 0xb0b8
movapd (%r14), %xmm2
movsd 0x10(%r14), %xmm0
xorl %eax, %eax
movapd %xmm2, %xmm1
movapd %xmm0, %xmm3
mulpd %xmm2, %xmm1
mulsd %xmm0, %xmm3
haddpd %xmm1, %xmm1
addsd %xmm3, %xmm1
sqrtsd %xmm1, %xmm3
movsd 0x313f(%rip), %xmm1     # 0xc050
ucomisd 0x3627(%rip), %xmm3     # 0xc540
divsd %xmm3, %xmm1
sete %al
movddup %xmm1, %xmm3            # xmm3 = xmm1[0,0]
mulpd %xmm2, %xmm3
movd %eax, %xmm2
pshufd $0x44, %xmm2, %xmm4     # xmm4 = xmm2[0,1,0,1]
pxor %xmm2, %xmm2
psllq $0x3f, %xmm4
pcmpgtq %xmm4, %xmm2
pandn %xmm3, %xmm2
xorpd %xmm3, %xmm3
je 0x8f51
mulsd %xmm1, %xmm0
movapd %xmm0, %xmm3
movdqa %xmm2, 0x50(%rsp)
movsd %xmm3, 0x60(%rsp)
leaq 0x70(%rsp), %r14
movq 0x60(%rsp), %rax
movq %r14, %rdi
movq %rax, 0x28(%rsp)
movaps 0x50(%rsp), %xmm0
movups %xmm0, 0x18(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x10(%rsp)
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rsp)
callq 0xb0b8
movapd (%r14), %xmm1
movsd 0x10(%r14), %xmm0
movsd 0x30ac(%rip), %xmm5     # 0xc050
xorl %eax, %eax
xorpd %xmm6, %xmm6
pxor %xmm7, %xmm7
movaps 0x50(%rsp), %xmm4
movapd %xmm1, %xmm2
movapd %xmm0, %xmm3
movups %xmm4, (%rbx)
movsd 0x60(%rsp), %xmm4
mulpd %xmm1, %xmm2
mulsd %xmm0, %xmm3
movsd %xmm4, 0x10(%rbx)
haddpd %xmm2, %xmm2
addsd %xmm3, %xmm2
sqrtsd %xmm2, %xmm2
divsd %xmm2, %xmm5
ucomisd %xmm6, %xmm2
sete %al
movd %eax, %xmm3
pshufd $0x44, %xmm3, %xmm3     # xmm3 = xmm3[0,1,0,1]
psllq $0x3f, %xmm3
pcmpgtq %xmm3, %xmm7
movdqa %xmm7, %xmm3
movddup %xmm5, %xmm2            # xmm2 = xmm5[0,0]
mulpd %xmm1, %xmm2
movsd 0x40(%rsp), %xmm1
pandn %xmm2, %xmm3
je 0x901b
mulsd %xmm5, %xmm0
movapd %xmm0, %xmm6
movaps 0x30(%rsp), %xmm0
movdqu %xmm3, 0x18(%rbx)
movsd %xmm6, 0x28(%rbx)
movq %rbx, %rax
movups %xmm0, 0x30(%rbx)
movsd %xmm1, 0x40(%rbx)
leaq 0xa8(%rsp), %rsp
popq %rbx
popq %r14
retq