// File: /workspace/github_c_makefile_star2_O0/halcy[P]quasi_crystals_bot/Vector/Matrix.c
// Function: mat4x4affineinverse
mat4x4_t mat4x4affineinverse(mat4x4_t m)
{
	mat4x4_t res;
	float det=mat4x4affinedet(m);
	// singular if det==0

	res.m[0]=(m.m[5]*m.m[10]-m.m[6]*m.m[9])/det;
	res.m[4]=-(m.m[4]*m.m[10]-m.m[6]*m.m[8])/det;
	res.m[8]=(m.m[4]*m.m[9]-m.m[5]*m.m[8])/det;

	res.m[1]=-(m.m[1]*m.m[10]-m.m[2]*m.m[9])/det;
	res.m[5]=(m.m[0]*m.m[10]-m.m[2]*m.m[8])/det;
	res.m[9]=-(m.m[0]*m.m[9]-m.m[1]*m.m[8])/det;

	res.m[2]=(m.m[1]*m.m[6]-m.m[2]*m.m[5])/det;
	res.m[6]=-(m.m[0]*m.m[6]-m.m[2]*m.m[4])/det;
	res.m[10]=(m.m[0]*m.m[5]-m.m[1]*m.m[4])/det;

	res.m[3]=0;
	res.m[7]=0;
	res.m[11]=0;

	res.m[12]=-(m.m[12]*res.m[0]+m.m[13]*res.m[4]+m.m[14]*res.m[8]);
	res.m[13]=-(m.m[12]*res.m[1]+m.m[13]*res.m[5]+m.m[14]*res.m[9]);
	res.m[14]=-(m.m[12]*res.m[2]+m.m[13]*res.m[6]+m.m[14]*res.m[10]);
	res.m[15]=1;

	return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq -0x60(%rsp), %rsp
movq %rdi, -0x18(%rbp)
movq %rdi, -0x10(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups 0x20(%rax), %xmm2
movups 0x30(%rax), %xmm3
movq %rsp, %rax
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xffa0
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movss %xmm0, -0x4(%rbp)
movss 0x14(%rcx), %xmm0
mulss 0x28(%rcx), %xmm0
movss 0x18(%rcx), %xmm1
mulss 0x24(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, (%rdi)
movss 0x10(%rcx), %xmm0
mulss 0x28(%rcx), %xmm0
movss 0x18(%rcx), %xmm1
mulss 0x20(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x10(%rdi)
movss 0x10(%rcx), %xmm0
mulss 0x24(%rcx), %xmm0
movss 0x14(%rcx), %xmm1
mulss 0x20(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x20(%rdi)
movss 0x4(%rcx), %xmm0
mulss 0x28(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x24(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x4(%rdi)
movss (%rcx), %xmm0
mulss 0x28(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x20(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x14(%rdi)
movss (%rcx), %xmm0
mulss 0x24(%rcx), %xmm0
movss 0x4(%rcx), %xmm1
mulss 0x20(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x24(%rdi)
movss 0x4(%rcx), %xmm0
mulss 0x18(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x14(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x8(%rdi)
movss (%rcx), %xmm0
mulss 0x18(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x18(%rdi)
movss (%rcx), %xmm0
mulss 0x14(%rcx), %xmm0
movss 0x4(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x28(%rdi)
xorps %xmm0, %xmm0
movss %xmm0, 0xc(%rdi)
xorps %xmm0, %xmm0
movss %xmm0, 0x1c(%rdi)
xorps %xmm0, %xmm0
movss %xmm0, 0x2c(%rdi)
movss 0x30(%rcx), %xmm0
mulss (%rdi), %xmm0
movss 0x34(%rcx), %xmm1
mulss 0x10(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x38(%rcx), %xmm1
mulss 0x20(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
movss %xmm0, 0x30(%rdi)
movss 0x30(%rcx), %xmm0
mulss 0x4(%rdi), %xmm0
movss 0x34(%rcx), %xmm1
mulss 0x14(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x38(%rcx), %xmm1
mulss 0x24(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
movss %xmm0, 0x34(%rdi)
movss 0x30(%rcx), %xmm0
mulss 0x8(%rdi), %xmm0
movss 0x34(%rcx), %xmm1
mulss 0x18(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x38(%rcx), %xmm1
mulss 0x28(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %ecx
xorl $0x80000000, %ecx       # imm = 0x80000000
movd %ecx, %xmm0
movss %xmm0, 0x38(%rdi)
movss 0x7075(%rip), %xmm0     # 0x17004
movss %xmm0, 0x3c(%rdi)
leaq 0x60(%rsp), %rsp
popq %rbp
retq
nopl (%rax,%rax)