// File: /workspace/github_c_makefile_star2_O0/halcy[P]quasi_crystals_bot/Vector/Matrix.c
// Function: mat4x4inverse
mat4x4_t mat4x4inverse(mat4x4_t m)
{
	mat4x4_t res;

	float a0=m.m[0]*m.m[5]-m.m[1]*m.m[4];
	float a1=m.m[0]*m.m[6]-m.m[2]*m.m[4];
	float a2=m.m[0]*m.m[7]-m.m[3]*m.m[4];
	float a3=m.m[1]*m.m[6]-m.m[2]*m.m[5];
	float a4=m.m[1]*m.m[7]-m.m[3]*m.m[5];
	float a5=m.m[2]*m.m[7]-m.m[3]*m.m[6];
	float b0=m.m[8]*m.m[13]-m.m[9]*m.m[12];
	float b1=m.m[8]*m.m[14]-m.m[10]*m.m[12];
	float b2=m.m[8]*m.m[15]-m.m[11]*m.m[12];
	float b3=m.m[9]*m.m[14]-m.m[10]*m.m[13];
	float b4=m.m[9]*m.m[15]-m.m[11]*m.m[13];
	float b5=m.m[10]*m.m[15]-m.m[11]*m.m[14];
	float det=a0*b5-a1*b4+a2*b3+a3*b2-a4*b1+a5*b0;
	// singular if det==0

	res.m[0]=(m.m[5]*b5-m.m[6]*b4+m.m[7]*b3)/det;
	res.m[4]=-(m.m[4]*b5-m.m[6]*b2+m.m[7]*b1)/det;
	res.m[8]=(m.m[4]*b4-m.m[5]*b2+m.m[7]*b0)/det;
	res.m[12]=-(m.m[4]*b3-m.m[5]*b1+m.m[6]*b0)/det;

	res.m[1]=-(m.m[1]*b5-m.m[2]*b4+m.m[3]*b3)/det;
	res.m[5]=(m.m[0]*b5-m.m[2]*b2+m.m[3]*b1)/det;
	res.m[9]=-(m.m[0]*b4-m.m[1]*b2+m.m[3]*b0)/det;
	res.m[13]=(m.m[0]*b3-m.m[1]*b1+m.m[2]*b0)/det;

	res.m[2]=(m.m[13]*a5-m.m[14]*a4+m.m[15]*a3)/det;
	res.m[6]=-(m.m[12]*a5-m.m[14]*a2+m.m[15]*a1)/det;
	res.m[10]=(m.m[12]*a4-m.m[13]*a2+m.m[15]*a0)/det;
	res.m[14]=-(m.m[12]*a3-m.m[13]*a1+m.m[14]*a0)/det;

	res.m[3]=-(m.m[9]*a5-m.m[10]*a4+m.m[11]*a3)/det;
	res.m[7]=(m.m[8]*a5-m.m[10]*a2+m.m[11]*a1)/det;
	res.m[11]=-(m.m[8]*a4-m.m[9]*a2+m.m[11]*a0)/det;
	res.m[15]=(m.m[8]*a3-m.m[9]*a1+m.m[10]*a0)/det;

	return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, %rax
leaq 0x10(%rbp), %rcx
movss (%rcx), %xmm0
mulss 0x14(%rcx), %xmm0
movss 0x4(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x4(%rbp)
movss (%rcx), %xmm0
mulss 0x18(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x8(%rbp)
movss (%rcx), %xmm0
mulss 0x1c(%rcx), %xmm0
movss 0xc(%rcx), %xmm1
mulss 0x10(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0xc(%rbp)
movss 0x4(%rcx), %xmm0
mulss 0x18(%rcx), %xmm0
movss 0x8(%rcx), %xmm1
mulss 0x14(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x10(%rbp)
movss 0x4(%rcx), %xmm0
mulss 0x1c(%rcx), %xmm0
movss 0xc(%rcx), %xmm1
mulss 0x14(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x14(%rbp)
movss 0x8(%rcx), %xmm0
mulss 0x1c(%rcx), %xmm0
movss 0xc(%rcx), %xmm1
mulss 0x18(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x18(%rbp)
movss 0x20(%rcx), %xmm0
mulss 0x34(%rcx), %xmm0
movss 0x24(%rcx), %xmm1
mulss 0x30(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x1c(%rbp)
movss 0x20(%rcx), %xmm0
mulss 0x38(%rcx), %xmm0
movss 0x28(%rcx), %xmm1
mulss 0x30(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x20(%rbp)
movss 0x20(%rcx), %xmm0
mulss 0x3c(%rcx), %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x30(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x24(%rbp)
movss 0x24(%rcx), %xmm0
mulss 0x38(%rcx), %xmm0
movss 0x28(%rcx), %xmm1
mulss 0x34(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x28(%rbp)
movss 0x24(%rcx), %xmm0
mulss 0x3c(%rcx), %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x34(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x2c(%rbp)
movss 0x28(%rcx), %xmm0
mulss 0x3c(%rcx), %xmm0
movss 0x2c(%rcx), %xmm1
mulss 0x38(%rcx), %xmm1
subss %xmm1, %xmm0
movss %xmm0, -0x30(%rbp)
movss -0x4(%rbp), %xmm0
mulss -0x30(%rbp), %xmm0
movss -0x8(%rbp), %xmm1
mulss -0x2c(%rbp), %xmm1
subss %xmm1, %xmm0
movss -0xc(%rbp), %xmm1
mulss -0x28(%rbp), %xmm1
addss %xmm1, %xmm0
movss -0x10(%rbp), %xmm1
mulss -0x24(%rbp), %xmm1
addss %xmm1, %xmm0
movss -0x14(%rbp), %xmm1
mulss -0x20(%rbp), %xmm1
subss %xmm1, %xmm0
movss -0x18(%rbp), %xmm1
mulss -0x1c(%rbp), %xmm1
addss %xmm1, %xmm0
movss %xmm0, -0x34(%rbp)
movss 0x14(%rcx), %xmm0
mulss -0x30(%rbp), %xmm0
movss 0x18(%rcx), %xmm1
mulss -0x2c(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x1c(%rcx), %xmm1
mulss -0x28(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, (%rdi)
movss 0x10(%rcx), %xmm0
mulss -0x30(%rbp), %xmm0
movss 0x18(%rcx), %xmm1
mulss -0x24(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x1c(%rcx), %xmm1
mulss -0x20(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x10(%rdi)
movss 0x10(%rcx), %xmm0
mulss -0x2c(%rbp), %xmm0
movss 0x14(%rcx), %xmm1
mulss -0x24(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x1c(%rcx), %xmm1
mulss -0x1c(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x20(%rdi)
movss 0x10(%rcx), %xmm0
mulss -0x28(%rbp), %xmm0
movss 0x14(%rcx), %xmm1
mulss -0x20(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x18(%rcx), %xmm1
mulss -0x1c(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x30(%rdi)
movss 0x4(%rcx), %xmm0
mulss -0x30(%rbp), %xmm0
movss 0x8(%rcx), %xmm1
mulss -0x2c(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0xc(%rcx), %xmm1
mulss -0x28(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x4(%rdi)
movss (%rcx), %xmm0
mulss -0x30(%rbp), %xmm0
movss 0x8(%rcx), %xmm1
mulss -0x24(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0xc(%rcx), %xmm1
mulss -0x20(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x14(%rdi)
movss (%rcx), %xmm0
mulss -0x2c(%rbp), %xmm0
movss 0x4(%rcx), %xmm1
mulss -0x24(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0xc(%rcx), %xmm1
mulss -0x1c(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x24(%rdi)
movss (%rcx), %xmm0
mulss -0x28(%rbp), %xmm0
movss 0x4(%rcx), %xmm1
mulss -0x20(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x8(%rcx), %xmm1
mulss -0x1c(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x34(%rdi)
movss 0x34(%rcx), %xmm0
mulss -0x18(%rbp), %xmm0
movss 0x38(%rcx), %xmm1
mulss -0x14(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x3c(%rcx), %xmm1
mulss -0x10(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x8(%rdi)
movss 0x30(%rcx), %xmm0
mulss -0x18(%rbp), %xmm0
movss 0x38(%rcx), %xmm1
mulss -0xc(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x3c(%rcx), %xmm1
mulss -0x8(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x18(%rdi)
movss 0x30(%rcx), %xmm0
mulss -0x14(%rbp), %xmm0
movss 0x34(%rcx), %xmm1
mulss -0xc(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x3c(%rcx), %xmm1
mulss -0x4(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x28(%rdi)
movss 0x30(%rcx), %xmm0
mulss -0x10(%rbp), %xmm0
movss 0x34(%rcx), %xmm1
mulss -0x8(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x38(%rcx), %xmm1
mulss -0x4(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x38(%rdi)
movss 0x24(%rcx), %xmm0
mulss -0x18(%rbp), %xmm0
movss 0x28(%rcx), %xmm1
mulss -0x14(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss -0x10(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0xc(%rdi)
movss 0x20(%rcx), %xmm0
mulss -0x18(%rbp), %xmm0
movss 0x28(%rcx), %xmm1
mulss -0xc(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss -0x8(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x1c(%rdi)
movss 0x20(%rcx), %xmm0
mulss -0x14(%rbp), %xmm0
movss 0x24(%rcx), %xmm1
mulss -0xc(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x2c(%rcx), %xmm1
mulss -0x4(%rbp), %xmm1
addss %xmm1, %xmm0
movd %xmm0, %edx
xorl $0x80000000, %edx       # imm = 0x80000000
movd %edx, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x2c(%rdi)
movss 0x20(%rcx), %xmm0
mulss -0x10(%rbp), %xmm0
movss 0x24(%rcx), %xmm1
mulss -0x8(%rbp), %xmm1
subss %xmm1, %xmm0
movss 0x28(%rcx), %xmm1
mulss -0x4(%rbp), %xmm1
addss %xmm1, %xmm0
divss -0x34(%rbp), %xmm0
movss %xmm0, 0x3c(%rdi)
popq %rbp
retq
nopw (%rax,%rax)