// File: melop[P]admixem/./spline.h
// Function: (anonymous namespace)::tk::band_matrix::lu_decompose()
void band_matrix::lu_decompose()
{
    int  i_max,j_max;
    int  j_min;
    double x;

    // preconditioning
    // normalize column i so that a_ii=1
    for(int i=0; i<this->dim(); i++) {
        assert(this->operator()(i,i)!=0.0);
        this->saved_diag(i)=1.0/this->operator()(i,i);
        j_min=std::max(0,i-this->num_lower());
        j_max=std::min(this->dim()-1,i+this->num_upper());
        for(int j=j_min; j<=j_max; j++) {
            this->operator()(i,j) *= this->saved_diag(i);
        }
        this->operator()(i,i)=1.0;          // prevents rounding errors
    }

    // Gauss LR-Decomposition
    for(int k=0; k<this->dim(); k++) {
        i_max=std::min(this->dim()-1,k+this->num_lower());  // num_lower not a mistake!
        for(int i=k+1; i<=i_max; i++) {
            assert(this->operator()(k,k)!=0.0);
            x=-this->operator()(i,k)/this->operator()(k,k);
            this->operator()(i,k)=-x;                         // assembly part of L
            j_max=std::min(this->dim()-1,k+this->num_upper());
            for(int j=k+1; j<=j_max; j++) {
                // assembly part of R
                this->operator()(i,j)=this->operator()(i,j)+x*this->operator()(k,j);
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x60(%rbp)
movl $0x0, -0x24(%rbp)
movq -0x60(%rbp), %rdi
movl -0x24(%rbp), %eax
movl %eax, -0x64(%rbp)
callq 0x288c0
movl %eax, %ecx
movl -0x64(%rbp), %eax
cmpl %ecx, %eax
jge 0x28aef
movq -0x60(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x24(%rbp), %edx
callq 0x28460
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x289ba
jp 0x289ba
jmp 0x289bc
jmp 0x289db
leaq 0x4f31f(%rip), %rdi     # 0x77ce2
leaq 0x4f03e(%rip), %rsi     # 0x77a08
movl $0xc4, %edx
leaq 0x4f327(%rip), %rcx     # 0x77cfd
callq 0x8300
movq -0x60(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x24(%rbp), %edx
callq 0x28460
movq -0x60(%rbp), %rdi
movsd 0x4d61a(%rip), %xmm0    # 0x76010
divsd (%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
movl -0x24(%rbp), %esi
callq 0x291b0
movsd -0x78(%rbp), %xmm0
movq -0x60(%rbp), %rdi
movsd %xmm0, (%rax)
movl $0x0, -0x28(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x6c(%rbp)
callq 0x28910
movl %eax, %ecx
movl -0x6c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x2c(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x2c(%rbp), %rsi
callq 0x30a80
movq -0x60(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x14(%rbp)
callq 0x288c0
movq -0x60(%rbp), %rdi
subl $0x1, %eax
movl %eax, -0x30(%rbp)
movl -0x24(%rbp), %eax
movl %eax, -0x68(%rbp)
callq 0x28940
movl %eax, %ecx
movl -0x68(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x34(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0x34(%rbp), %rsi
callq 0x30ac0
movl (%rax), %eax
movl %eax, -0x10(%rbp)
movl -0x14(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x10(%rbp), %eax
jg 0x28ac6
movq -0x60(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0x291b0
movq -0x60(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
movl -0x24(%rbp), %esi
movl -0x38(%rbp), %edx
callq 0x28460
movsd -0x80(%rbp), %xmm0
mulsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x28a82
movq -0x60(%rbp), %rdi
movl -0x24(%rbp), %esi
movl -0x24(%rbp), %edx
callq 0x28460
movsd 0x4d533(%rip), %xmm0    # 0x76010
movsd %xmm0, (%rax)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2897e
movl $0x0, -0x3c(%rbp)
movq -0x60(%rbp), %rdi
movl -0x3c(%rbp), %eax
movl %eax, -0x84(%rbp)
callq 0x288c0
movl %eax, %ecx
movl -0x84(%rbp), %eax
cmpl %ecx, %eax
jge 0x28d38
movq -0x60(%rbp), %rdi
callq 0x288c0
movq -0x60(%rbp), %rdi
subl $0x1, %eax
movl %eax, -0x40(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x88(%rbp)
callq 0x28910
movl %eax, %ecx
movl -0x88(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x44(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x30ac0
movl (%rax), %eax
movl %eax, -0xc(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %eax
cmpl -0xc(%rbp), %eax
jg 0x28d28
movq -0x60(%rbp), %rdi
movl -0x3c(%rbp), %esi
movl -0x3c(%rbp), %edx
callq 0x28460
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x28b8d
jp 0x28b8d
jmp 0x28b8f
jmp 0x28bae
leaq 0x4f1a3(%rip), %rdi     # 0x77d39
leaq 0x4ee6b(%rip), %rsi     # 0x77a08
movl $0xd2, %edx
leaq 0x4f154(%rip), %rcx     # 0x77cfd
callq 0x8300
movq -0x60(%rbp), %rdi
movl -0x48(%rbp), %esi
movl -0x3c(%rbp), %edx
callq 0x28460
movq -0x60(%rbp), %rdi
movsd (%rax), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0xa0(%rbp)
movl -0x3c(%rbp), %esi
movl -0x3c(%rbp), %edx
callq 0x28460
movsd -0xa0(%rbp), %xmm0
movq -0x60(%rbp), %rdi
divsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x98(%rbp)
movl -0x48(%rbp), %esi
movl -0x3c(%rbp), %edx
callq 0x28460
movsd -0x98(%rbp), %xmm0
movq -0x60(%rbp), %rdi
movsd %xmm0, (%rax)
callq 0x288c0
movq -0x60(%rbp), %rdi
subl $0x1, %eax
movl %eax, -0x4c(%rbp)
movl -0x3c(%rbp), %eax
movl %eax, -0x8c(%rbp)
callq 0x28940
movl %eax, %ecx
movl -0x8c(%rbp), %eax
addl %ecx, %eax
movl %eax, -0x50(%rbp)
leaq -0x4c(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x30ac0
movl (%rax), %eax
movl %eax, -0x10(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x10(%rbp), %eax
jg 0x28d18
movq -0x60(%rbp), %rdi
movl -0x48(%rbp), %esi
movl -0x54(%rbp), %edx
callq 0x28460
movq -0x60(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0xb8(%rbp)
movl -0x3c(%rbp), %esi
movl -0x54(%rbp), %edx
callq 0x28460
movsd -0xb8(%rbp), %xmm0
movsd -0xb0(%rbp), %xmm1
movq -0x60(%rbp), %rdi
movsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xa8(%rbp)
movl -0x48(%rbp), %esi
movl -0x54(%rbp), %edx
callq 0x28460
movsd -0xa8(%rbp), %xmm0
movsd %xmm0, (%rax)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x28c88
jmp 0x28d1a
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
jmp 0x28b61
jmp 0x28d2a
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x28af6
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)