// File: /workspace/github_c_makefile_star2_O0/olcaytaner[P]Isell/matrix.c
// Function: balance
double* balance(matrix a)
{
 int i, j;
 BOOLEAN done = BOOLEAN_FALSE; 
 double sqrdx = 4, r, c, g, f, s, *scale;
 scale = safemalloc(a.row * sizeof(double), "balance", 3);
 for (i = 0; i < a.row; i++)
   scale[i] = 1.0;
 while (!done) 
  {
   done = BOOLEAN_TRUE; 
   for (i = 0; i < a.row; i++) 
    {
     r = 0.0;
     c = 0.0; 
     for (j = 0; j < a.col; j++)
       if (j != i) 
        { 
         c += fabs(a.values[j][i]); 
         r += fabs(a.values[i][j]);
        } 
     if (c != 0.0 && r != 0.0) 
      {
       g = r / 2; 
       f = 1.0; 
       s = c + r; 
       while (c < g) 
        {
         f *= 2; 
         c *= sqrdx;
        } 
       g = r * 2; 
       while (c > g) 
        {
         f /= 2; 
         c /= sqrdx;
        } 
       if ((c + r) / f < 0.95 * s) 
        {
         done = BOOLEAN_FALSE; 
         g = 1.0 / f; 
         scale[i] *= f; 
         for (j = 0; j < a.row; j++) 
           a.values[i][j] *= g; 
         for (j = 0; j < a.row; j++) 
           a.values[j][i] *= f;
        }
      }
    }
  }
 return scale;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x8(%rbp)
movl $0x0, -0x1c(%rbp)
movsd 0x84ee1(%rip), %xmm0    # 0xe2a80
movsd %xmm0, -0x28(%rbp)
movslq -0x10(%rbp), %rdi
shlq $0x3, %rdi
leaq 0x89168(%rip), %rsi     # 0xe6d1b
movl $0x3, %edx
callq 0x52d70
movq %rax, -0x58(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x10(%rbp), %eax
jge 0x5dbf0
movq -0x58(%rbp), %rax
movslq -0x14(%rbp), %rcx
movsd 0x84438(%rip), %xmm0    # 0xe2018
movsd %xmm0, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x5dbc8
jmp 0x5dbf2
cmpl $0x0, -0x1c(%rbp)
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5dc04
jmp 0x5de5f
movl $0x1, -0x1c(%rbp)
movl $0x0, -0x14(%rbp)
movl -0x14(%rbp), %eax
cmpl -0x10(%rbp), %eax
jge 0x5de5a
xorps %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0xc(%rbp), %eax
jge 0x5dca6
movl -0x18(%rbp), %eax
cmpl -0x14(%rbp), %eax
je 0x5dc99
movq -0x8(%rbp), %rax
movslq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x14(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x851ff(%rip), %xmm1    # 0xe2e60
pand %xmm1, %xmm0
addsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
movq -0x8(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x851d5(%rip), %xmm1    # 0xe2e60
pand %xmm1, %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
jmp 0x5dc9b
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x5dc35
movsd -0x38(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x5dcbb
jp 0x5dcbb
jmp 0x5de4a
movsd -0x30(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x5dcd0
jp 0x5dcd0
jmp 0x5de4a
movsd -0x30(%rbp), %xmm0
movsd 0x84fc3(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd 0x8432a(%rip), %xmm0    # 0xe2018
movsd %xmm0, -0x48(%rbp)
movsd -0x38(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x38(%rbp), %xmm1
movsd -0x40(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x5dd35
movsd 0x84f86(%rip), %xmm0    # 0xe2ca0
mulsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x28(%rbp), %xmm0
mulsd -0x38(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x5dd02
movsd 0x84f63(%rip), %xmm0    # 0xe2ca0
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x38(%rbp), %xmm0
ucomisd -0x40(%rbp), %xmm0
jbe 0x5dd7e
movsd -0x48(%rbp), %xmm0
movsd 0x84f40(%rip), %xmm1    # 0xe2ca0
divsd %xmm1, %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x28(%rbp), %xmm1
movsd -0x38(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x5dd47
movsd -0x38(%rbp), %xmm1
addsd -0x30(%rbp), %xmm1
divsd -0x48(%rbp), %xmm1
movsd 0x88c9b(%rip), %xmm0    # 0xe6a30
mulsd -0x50(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x5de48
movl $0x0, -0x1c(%rbp)
movsd 0x84265(%rip), %xmm0    # 0xe2018
divsd -0x48(%rbp), %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x48(%rbp), %xmm0
movq -0x58(%rbp), %rax
movslq -0x14(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x10(%rbp), %eax
jge 0x5de0d
movsd -0x40(%rbp), %xmm0
movq -0x8(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x18(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x5dddb
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x10(%rbp), %eax
jge 0x5de46
movsd -0x48(%rbp), %xmm0
movq -0x8(%rbp), %rax
movslq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x14(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x5de14
jmp 0x5de48
jmp 0x5de4a
jmp 0x5de4c
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x5dc12
jmp 0x5dbf2
movq -0x58(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)