// File: /workspace/github_c_makefile_star2_O3/halcy[P]quasi_crystals_bot/Vector/Matrix.c
// Function: mat3x3inverselookat
mat3x3_t mat3x3inverselookat(vec3_t eye,vec3_t center,vec3_t up)
{
	vec3_t backward=vec3norm(vec3sub(eye,center));
	vec3_t right=vec3norm(vec3cross(up,backward));
	vec3_t actualup=vec3norm(vec3cross(backward,right));

	return mat3x3cols(right,actualup,backward);
}

// Assembly:
pushq %rbx
leaq -0x30(%rsp), %rsp
subps %xmm2, %xmm0
subss %xmm3, %xmm1
movss 0x40c8(%rip), %xmm7     # 0xe010
xorps %xmm2, %xmm2
movq %rdi, %rbx
movaps %xmm0, %xmm6
movaps %xmm1, %xmm8
mulps %xmm0, %xmm6
mulss %xmm1, %xmm8
haddps %xmm6, %xmm6
addss %xmm6, %xmm8
xorps %xmm3, %xmm3
rsqrtss %xmm8, %xmm3
movaps %xmm8, %xmm6
andps 0x40b6(%rip), %xmm8     # 0xe030
cmpltss 0x4094(%rip), %xmm8     # 0xe018
mulss %xmm3, %xmm6
mulss %xmm6, %xmm7
mulss %xmm3, %xmm6
xorps %xmm3, %xmm3
addss 0x4079(%rip), %xmm6     # 0xe014
mulss %xmm7, %xmm6
andnps %xmm6, %xmm8
ucomiss %xmm2, %xmm8
xorps %xmm2, %xmm2
je 0x9fca
movss 0x4054(%rip), %xmm3     # 0xe008
divss %xmm8, %xmm3
movsldup %xmm3, %xmm2            # xmm2 = xmm3[0,0,2,2]
mulss %xmm3, %xmm1
mulps %xmm2, %xmm0
movaps %xmm1, %xmm3
movaps %xmm0, %xmm2
movaps %xmm4, %xmm0
movaps %xmm5, %xmm1
movaps %xmm2, 0x10(%rsp)
movss %xmm3, 0x8(%rsp)
callq 0xdbac
movaps %xmm0, %xmm3
movaps %xmm1, %xmm6
movss 0x4022(%rip), %xmm5     # 0xe010
xorps %xmm2, %xmm2
mulps %xmm0, %xmm3
mulss %xmm1, %xmm6
addss %xmm3, %xmm6
movshdup %xmm3, %xmm3            # xmm3 = xmm3[1,1,3,3]
addss %xmm3, %xmm6
xorps %xmm3, %xmm3
rsqrtss %xmm6, %xmm3
movaps %xmm6, %xmm4
andps 0x401b(%rip), %xmm6     # 0xe030
cmpltss 0x3ffa(%rip), %xmm6     # 0xe018
mulss %xmm3, %xmm4
mulss %xmm4, %xmm5
mulss %xmm3, %xmm4
xorps %xmm3, %xmm3
addss 0x3fdf(%rip), %xmm4     # 0xe014
mulss %xmm5, %xmm4
andnps %xmm4, %xmm6
ucomiss 0x3fd9(%rip), %xmm6     # 0xe01c
je 0xa062
movss 0x3fbb(%rip), %xmm3     # 0xe008
divss %xmm6, %xmm3
movsldup %xmm3, %xmm2            # xmm2 = xmm3[0,0,2,2]
mulss %xmm3, %xmm1
mulps %xmm2, %xmm0
movaps %xmm1, %xmm3
movaps %xmm0, %xmm2
movaps 0x10(%rsp), %xmm0
movss 0x8(%rsp), %xmm1
movaps %xmm2, 0x20(%rsp)
movss %xmm3, 0xc(%rsp)
callq 0xdbac
movaps %xmm0, %xmm3
movaps %xmm1, %xmm2
movss 0x3f85(%rip), %xmm5     # 0xe010
mulps %xmm0, %xmm3
mulss %xmm1, %xmm2
addss %xmm3, %xmm2
movshdup %xmm3, %xmm3            # xmm3 = xmm3[1,1,3,3]
addss %xmm3, %xmm2
xorps %xmm3, %xmm3
rsqrtss %xmm2, %xmm3
movaps %xmm2, %xmm4
andps 0x3f81(%rip), %xmm2     # 0xe030
cmpltss 0x3f60(%rip), %xmm2     # 0xe018
mulss %xmm3, %xmm4
mulss %xmm4, %xmm5
mulss %xmm3, %xmm4
xorps %xmm3, %xmm3
addss 0x3f45(%rip), %xmm4     # 0xe014
mulss %xmm5, %xmm4
andnps %xmm4, %xmm2
xorps %xmm4, %xmm4
ucomiss %xmm3, %xmm2
je 0xa0fb
movss 0x3f22(%rip), %xmm3     # 0xe008
divss %xmm2, %xmm3
movsldup %xmm3, %xmm2            # xmm2 = xmm3[0,0,2,2]
mulss %xmm3, %xmm1
mulps %xmm2, %xmm0
movaps %xmm1, %xmm3
movaps %xmm0, %xmm4
movaps 0x20(%rsp), %xmm0
movss 0xc(%rsp), %xmm1
movaps 0x10(%rsp), %xmm2
movq %rbx, %rax
movlps %xmm0, (%rbx)
movss %xmm1, 0x8(%rbx)
movss 0x8(%rsp), %xmm1
movlps %xmm4, 0xc(%rbx)
movss %xmm3, 0x14(%rbx)
movlps %xmm2, 0x18(%rbx)
movss %xmm1, 0x20(%rbx)
leaq 0x30(%rsp), %rsp
popq %rbx
retq