// File: /workspace/github_c_makefile_star2_O2/halcy[P]quasi_crystals_bot/Vector/Quaternion.c
// Function: quatmat3x3
quat_t quatmat3x3(mat3x3_t m)
{
	if(mat3x3_11(m)>mat3x3_22(m) && mat3x3_11(m)>mat3x3_33(m))
	{
		float r=sqrtf(1+mat3x3_11(m)-mat3x3_22(m)-mat3x3_33(m));
		if(r==0) return quatone;
		return quat(
			(mat3x3_32(m)-mat3x3_23(m))/(2*r),
			vec3(
				r/2,
				(mat3x3_12(m)+mat3x3_21(m))/(2*r),
				(mat3x3_31(m)+mat3x3_13(m))/(2*r)
			)
		);
	}
	else if(mat3x3_22(m)>mat3x3_11(m) && mat3x3_22(m)>mat3x3_33(m))
	{
		float r=sqrtf(1+mat3x3_22(m)-mat3x3_33(m)-mat3x3_11(m));
		if(r==0) return quatone;
		return quat(
			(mat3x3_13(m)-mat3x3_31(m))/(2*r),
			vec3(
				(mat3x3_12(m)+mat3x3_21(m))/(2*r),
				r/2,
				(mat3x3_23(m)+mat3x3_32(m))/(2*r)
			)
		);
	}
	else
	{
		float r=sqrtf(1+mat3x3_33(m)-mat3x3_11(m)-mat3x3_22(m));
		if(r==0) return quatone;
		return quat(
			(mat3x3_21(m)-mat3x3_12(m))/(2*r),
			vec3(
				(mat3x3_31(m)+mat3x3_13(m))/(2*r),
				(mat3x3_23(m)+mat3x3_32(m))/(2*r),
				r/2
			)
		);
	}
}

// Assembly:
leaq 0x8(%rsp), %rax
movss (%rax), %xmm0
movss 0x10(%rax), %xmm1
ucomiss %xmm1, %xmm0
jbe 0xaa7e
movss 0x20(%rax), %xmm2
ucomiss %xmm2, %xmm0
jbe 0xaa7e
addss 0x1633(%rip), %xmm0     # 0xc008
addss %xmm2, %xmm1
movss 0x162f(%rip), %xmm3     # 0xc010
subss %xmm1, %xmm0
rsqrtss %xmm0, %xmm1
movaps %xmm0, %xmm2
andps 0x163d(%rip), %xmm0     # 0xc030
cmpltss 0x161c(%rip), %xmm0     # 0xc018
mulss %xmm1, %xmm2
mulss %xmm2, %xmm3
mulss %xmm1, %xmm2
xorps %xmm1, %xmm1
addss 0x1601(%rip), %xmm2     # 0xc014
mulss %xmm3, %xmm2
andnps %xmm2, %xmm0
ucomiss %xmm1, %xmm0
je 0xac03
movaps %xmm0, %xmm1
movss 0x15da(%rip), %xmm2     # 0xc008
movss 0x4(%rax), %xmm3
movss 0x18(%rax), %xmm4
addss %xmm0, %xmm1
addss 0xc(%rax), %xmm3
addss 0x8(%rax), %xmm4
mulss 0x1b12(%rip), %xmm0     # 0xc560
divss %xmm1, %xmm2
movss 0x14(%rax), %xmm1
subss 0x1c(%rax), %xmm1
mulss %xmm2, %xmm3
mulss %xmm2, %xmm1
mulss %xmm2, %xmm4
insertps $0x10, %xmm3, %xmm0     # xmm0 = xmm0[0],xmm3[0],xmm0[2,3]
movss %xmm1, -0x10(%rsp)
movlps %xmm0, -0xc(%rsp)
jmp 0xab41
ucomiss %xmm0, %xmm1
movss 0x20(%rax), %xmm3
jbe 0xab4c
ucomiss %xmm3, %xmm1
jbe 0xab4c
addss %xmm3, %xmm0
addss 0x1567(%rip), %xmm1     # 0xc008
movss 0x1567(%rip), %xmm3     # 0xc010
subss %xmm0, %xmm1
rsqrtss %xmm1, %xmm0
movaps %xmm1, %xmm2
andps 0x1575(%rip), %xmm1     # 0xc030
cmpltss 0x1554(%rip), %xmm1     # 0xc018
mulss %xmm0, %xmm2
mulss %xmm2, %xmm3
mulss %xmm0, %xmm2
xorps %xmm0, %xmm0
addss 0x1539(%rip), %xmm2     # 0xc014
mulss %xmm3, %xmm2
andnps %xmm2, %xmm1
ucomiss %xmm0, %xmm1
je 0xac03
movaps %xmm1, %xmm0
movss 0x1512(%rip), %xmm2     # 0xc008
movss 0x4(%rax), %xmm3
movss 0x14(%rax), %xmm4
addss %xmm1, %xmm0
addss 0xc(%rax), %xmm3
addss 0x1c(%rax), %xmm4
mulss 0x1a4a(%rip), %xmm1     # 0xc560
divss %xmm0, %xmm2
movss 0x18(%rax), %xmm0
subss 0x8(%rax), %xmm0
mulss %xmm2, %xmm3
mulss %xmm2, %xmm0
mulss %xmm2, %xmm4
insertps $0x10, %xmm1, %xmm3     # xmm3 = xmm3[0],xmm1[0],xmm3[2,3]
movss %xmm0, -0x10(%rsp)
movlps %xmm3, -0xc(%rsp)
movss %xmm4, -0x4(%rsp)
jmp 0xabf6
addss %xmm1, %xmm0
movss 0x14b0(%rip), %xmm2     # 0xc008
movss 0x14b0(%rip), %xmm4     # 0xc010
movaps %xmm2, %xmm1
subss %xmm0, %xmm1
addss %xmm3, %xmm1
rsqrtss %xmm1, %xmm0
movaps %xmm1, %xmm3
andps 0x14b7(%rip), %xmm1     # 0xc030
cmpltss 0x1496(%rip), %xmm1     # 0xc018
mulss %xmm0, %xmm3
mulss %xmm3, %xmm4
mulss %xmm0, %xmm3
xorps %xmm0, %xmm0
addss 0x147b(%rip), %xmm3     # 0xc014
mulss %xmm4, %xmm3
andnps %xmm3, %xmm1
ucomiss %xmm0, %xmm1
je 0xac03
movaps %xmm1, %xmm0
movsd 0x14(%rax), %xmm3
movss 0x8(%rax), %xmm4
addss %xmm1, %xmm0
insertps $0x1c, 0x1c(%rax), %xmm4 # xmm4 = xmm4[0],mem[0],zero,zero
shufps $0xe1, %xmm3, %xmm3     # xmm3 = xmm3[1,0,2,3]
mulss 0x1997(%rip), %xmm1     # 0xc560
addps %xmm4, %xmm3
divss %xmm0, %xmm2
movss 0x4(%rax), %xmm0
subss 0xc(%rax), %xmm0
movsldup %xmm2, %xmm4            # xmm4 = xmm2[0,0,2,2]
mulss %xmm2, %xmm0
mulps %xmm3, %xmm4
movss %xmm0, -0x10(%rsp)
movlps %xmm4, -0xc(%rsp)
movss %xmm1, -0x4(%rsp)
movsd -0x10(%rsp), %xmm0
movsd -0x8(%rsp), %xmm1
retq