// File: /workspace/github_c_makefile_star2_O0/ugobas[P]tnm/nma.c
// Function: Get_rotation
void Get_rotation(double **inertia, double **rotation)
{
  int i, j;
  double **e_vec=Allocate_mat2_d(3,3), e_val[3], det;

  //svdcmp(inertia, 3, 3, e_val, e_vec);
  dd_Diagonalize(3, inertia, e_val, e_vec, 1);

  // Test determinant
  det=
    e_vec[0][0]*(e_vec[1][1]*e_vec[2][2]-e_vec[1][2]*e_vec[2][1])-
    e_vec[0][1]*(e_vec[1][0]*e_vec[2][2]-e_vec[1][2]*e_vec[2][0])+
    e_vec[0][2]*(e_vec[1][0]*e_vec[2][1]-e_vec[1][1]*e_vec[2][0]);
  if(det<0){
    printf("Determinant = %.3f\n", det);
    for(j=0; j<3; j++)e_vec[0][j]=-e_vec[0][j];
  }

  for(i=0; i<3; i++){
    for(j=0; j<3; j++)rotation[i][j]=e_vec[i][j];
  }

  // Clean
  Empty_matrix_d(e_vec, 3);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x3, %esi
movl %esi, %edi
callq 0x694a0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rsi
leaq -0x40(%rbp), %rdx
movq -0x20(%rbp), %rcx
movl $0x3, %edi
movl $0x1, %r8d
callq 0x6b130
movq -0x20(%rbp), %rax
movq (%rax), %rax
movsd (%rax), %xmm1
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x8(%rax), %xmm2
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movsd 0x10(%rax), %xmm3
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
mulsd 0x8(%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm3, %xmm2
addsd %xmm0, %xmm2
movq -0x20(%rbp), %rax
movq (%rax), %rax
movsd 0x8(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm3
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movsd 0x10(%rax), %xmm5
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm4
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
mulsd (%rax), %xmm4
movq %xmm4, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm4
mulsd %xmm5, %xmm3
addsd %xmm4, %xmm3
mulsd %xmm3, %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq -0x20(%rbp), %rax
movq (%rax), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd (%rax), %xmm2
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movsd 0x8(%rax), %xmm4
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x8(%rax), %xmm3
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
mulsd (%rax), %xmm3
movq %xmm3, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm3
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x48(%rbp), %xmm0
jbe 0x37172
movsd -0x48(%rbp), %xmm0
leaq 0x46eac(%rip), %rdi     # 0x7dfc6
movb $0x1, %al
callq 0x10d0
movl $0x0, -0x18(%rbp)
cmpl $0x3, -0x18(%rbp)
jge 0x37170
movq -0x20(%rbp), %rax
movq (%rax), %rax
movslq -0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x20(%rbp), %rax
movq (%rax), %rax
movslq -0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x37128
jmp 0x37172
movl $0x0, -0x14(%rbp)
cmpl $0x3, -0x14(%rbp)
jge 0x371ce
movl $0x0, -0x18(%rbp)
cmpl $0x3, -0x18(%rbp)
jge 0x371c1
movq -0x20(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x37186
jmp 0x371c3
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x37179
movq -0x20(%rbp), %rdi
movl $0x3, %esi
callq 0x692a0
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)