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

// Assembly:
pushq %rbp
movq %rsp, %rbp
leaq -0x50(%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
movq %rsp, %rax
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0xf980
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movss %xmm0, -0x4(%rbp)
movss 0x10(%rcx), %xmm0
mulss 0x20(%rcx), %xmm0
movss 0x14(%rcx), %xmm1
mulss 0x1c(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, (%rdi)
movss 0xc(%rcx), %xmm0
mulss 0x20(%rcx), %xmm0
movss 0x14(%rcx), %xmm1
mulss 0x18(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0xc(%rdi)
movss 0xc(%rcx), %xmm0
mulss 0x1c(%rcx), %xmm0
movss 0x10(%rcx), %xmm1
mulss 0x18(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x18(%rdi)
movss 0x4(%rcx), %xmm0
mulss 0x20(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x1c(%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 0x20(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x18(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x10(%rdi)
movss (%rcx), %xmm0
mulss 0x1c(%rcx), %xmm0
movss 0x4(%rcx), %xmm1
mulss 0x18(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x1c(%rdi)
movss 0x4(%rcx), %xmm0
mulss 0x14(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x8(%rdi)
movss (%rcx), %xmm0
mulss 0x14(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0xc(%rcx), %xmm1
subss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x14(%rdi)
movss (%rcx), %xmm0
mulss 0x10(%rcx), %xmm0
movss 0x4(%rcx), %xmm1
mulss 0xc(%rcx), %xmm1
subss %xmm1, %xmm0
divss -0x4(%rbp), %xmm0
movss %xmm0, 0x20(%rdi)
movss 0x24(%rcx), %xmm0
mulss (%rdi), %xmm0
movss 0x28(%rcx), %xmm1
mulss 0xc(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x18(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
movss %xmm0, 0x24(%rdi)
movss 0x24(%rcx), %xmm0
mulss 0x4(%rdi), %xmm0
movss 0x28(%rcx), %xmm1
mulss 0x10(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x1c(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
movss %xmm0, 0x28(%rdi)
movss 0x24(%rcx), %xmm0
mulss 0x8(%rdi), %xmm0
movss 0x28(%rcx), %xmm1
mulss 0x14(%rdi), %xmm1
addss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x20(%rdi), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %ecx
xorl $0x80000000, %ecx       # imm = 0x80000000
movd %ecx, %xmm0
movss %xmm0, 0x2c(%rdi)
leaq 0x50(%rsp), %rsp
popq %rbp
retq
nop