// File: /workspace/github_c_makefile_star2_O3/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 0xd561
movss 0x20(%rax), %xmm2
ucomiss %xmm2, %xmm0
jbe 0xd561
addss 0xb53(%rip), %xmm0      # 0xe008
addss %xmm2, %xmm1
movss 0xb4f(%rip), %xmm3      # 0xe010
subss %xmm1, %xmm0
xorps %xmm1, %xmm1
rsqrtss %xmm0, %xmm1
movaps %xmm0, %xmm2
andps 0xb5a(%rip), %xmm0      # 0xe030
cmpltss 0xb39(%rip), %xmm0      # 0xe018
mulss %xmm1, %xmm2
mulss %xmm2, %xmm3
mulss %xmm1, %xmm2
xorps %xmm1, %xmm1
addss 0xb1e(%rip), %xmm2      # 0xe014
mulss %xmm3, %xmm2
andnps %xmm2, %xmm0
ucomiss %xmm1, %xmm0
je 0xd68b
movaps %xmm0, %xmm1
movss 0xaf7(%rip), %xmm2      # 0xe008
movss 0x4(%rax), %xmm3
movss 0x18(%rax), %xmm4
addss %xmm0, %xmm1
addss 0xc(%rax), %xmm3
addss 0x8(%rax), %xmm4
mulss 0x1187(%rip), %xmm0     # 0xe6b8
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 0xd627
ucomiss %xmm0, %xmm1
movss 0x20(%rax), %xmm3
jbe 0xd62f
ucomiss %xmm3, %xmm1
jbe 0xd62f
addss %xmm3, %xmm0
addss 0xa84(%rip), %xmm1      # 0xe008
movss 0xa84(%rip), %xmm3      # 0xe010
subss %xmm0, %xmm1
xorps %xmm0, %xmm0
rsqrtss %xmm1, %xmm0
movaps %xmm1, %xmm2
andps 0xa8f(%rip), %xmm1      # 0xe030
cmpltss 0xa6e(%rip), %xmm1      # 0xe018
mulss %xmm0, %xmm2
mulss %xmm2, %xmm3
mulss %xmm0, %xmm2
xorps %xmm0, %xmm0
addss 0xa53(%rip), %xmm2      # 0xe014
mulss %xmm3, %xmm2
andnps %xmm2, %xmm1
ucomiss %xmm0, %xmm1
je 0xd68b
movaps %xmm1, %xmm0
movss 0xa2c(%rip), %xmm2      # 0xe008
movss 0x4(%rax), %xmm3
movss 0x14(%rax), %xmm4
addss %xmm1, %xmm0
addss 0xc(%rax), %xmm3
addss 0x1c(%rax), %xmm4
mulss 0x10bc(%rip), %xmm1     # 0xe6b8
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 0xd6a4
addss %xmm1, %xmm0
movss 0x9cd(%rip), %xmm2      # 0xe008
movss 0x9cd(%rip), %xmm4      # 0xe010
movaps %xmm2, %xmm1
subss %xmm0, %xmm1
addss %xmm3, %xmm1
xorps %xmm0, %xmm0
rsqrtss %xmm1, %xmm0
movaps %xmm1, %xmm3
andps 0x9d1(%rip), %xmm1      # 0xe030
cmpltss 0x9b0(%rip), %xmm1      # 0xe018
mulss %xmm0, %xmm3
mulss %xmm3, %xmm4
mulss %xmm0, %xmm3
xorps %xmm0, %xmm0
addss 0x995(%rip), %xmm3      # 0xe014
mulss %xmm4, %xmm3
andnps %xmm3, %xmm1
ucomiss %xmm0, %xmm1
jne 0xd6b1
movl $0x3f800000, -0x10(%rsp) # imm = 0x3F800000
movq $0x0, -0xc(%rsp)
movl $0x0, -0x4(%rsp)
movsd -0x10(%rsp), %xmm0
movsd -0x8(%rsp), %xmm1
retq
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 0xfe3(%rip), %xmm1      # 0xe6b8
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)
jmp 0xd6a4