// File: /workspace/github_cpp_makefile_star2_O3/manikandan5[P]Image-Matching-Stitching-Warping/./CImg.h
// Function: cimg_library::CImg<double>::det() const
Tdouble det() const {
      if (is_empty() || _width!=_height || _depth!=1 || _spectrum!=1)
        throw CImgInstanceException(_cimg_instance
                                    "det(): Instance is not a square matrix.",
                                    cimg_instance);

      switch (_width) {
      case 1 : return (Tdouble)((*this)(0,0));
      case 2 : return (Tdouble)((*this)(0,0))*(Tdouble)((*this)(1,1)) - (Tdouble)((*this)(0,1))*(Tdouble)((*this)(1,0));
      case 3 : {
        const Tdouble
          a = (Tdouble)_data[0], d = (Tdouble)_data[1], g = (Tdouble)_data[2],
          b = (Tdouble)_data[3], e = (Tdouble)_data[4], h = (Tdouble)_data[5],
          c = (Tdouble)_data[6], f = (Tdouble)_data[7], i = (Tdouble)_data[8];
        return i*a*e - a*h*f - i*b*d + b*g*f + c*d*h - c*g*e;
      }
      default : {
        CImg<Tfloat> lu(*this);
        CImg<uintT> indx;
        bool d;
        lu._LU(indx,d);
        Tdouble res = d?(Tdouble)1:(Tdouble)-1;
        cimg_forX(lu,i) res*=lu(i,i);
        return res;
      }
      }
    }

// Assembly:
pushq %r14
pushq %rbx
subq $0x58, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x65480
movl (%rbx), %ecx
testl %ecx, %ecx
je 0x65480
movl 0x4(%rbx), %edx
testl %edx, %edx
je 0x65480
movl 0x8(%rbx), %esi
testl %esi, %esi
je 0x65480
movl 0xc(%rbx), %edi
testl %edi, %edi
je 0x65480
cmpl %edx, %ecx
jne 0x65480
cmpl $0x1, %esi
jne 0x65480
cmpl $0x1, %edi
jne 0x65480
cmpl $0x3, %ecx
je 0x6533b
cmpl $0x2, %ecx
je 0x65326
cmpl $0x1, %ecx
jne 0x653c0
movsd (%rax), %xmm0
jmp 0x653b8
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
mulsd 0x10(%rax), %xmm1
mulsd 0x18(%rax), %xmm0
jmp 0x653b4
movsd (%rax), %xmm4
movsd 0x8(%rax), %xmm0
movsd 0x10(%rax), %xmm1
movsd 0x18(%rax), %xmm3
movsd 0x20(%rax), %xmm2
movsd 0x28(%rax), %xmm5
movsd 0x30(%rax), %xmm6
movsd 0x38(%rax), %xmm7
movsd 0x40(%rax), %xmm8
movapd %xmm5, %xmm9
mulsd %xmm4, %xmm9
mulsd %xmm8, %xmm4
mulsd %xmm7, %xmm9
mulsd %xmm2, %xmm4
subsd %xmm9, %xmm4
mulsd %xmm3, %xmm8
mulsd %xmm0, %xmm8
subsd %xmm8, %xmm4
mulsd %xmm1, %xmm3
mulsd %xmm7, %xmm3
addsd %xmm4, %xmm3
mulsd %xmm6, %xmm0
mulsd %xmm5, %xmm0
addsd %xmm3, %xmm0
mulsd %xmm6, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
addq $0x58, %rsp
popq %rbx
popq %r14
retq
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8a36
leaq 0x30(%rsp), %rsi
movq $0x0, 0x18(%rsi)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
movb $0x0, 0x10(%rsi)
leaq 0x7(%rsp), %rdx
movq %r14, %rdi
callq 0x67366
cmpb $0x0, 0x7(%rsp)
jne 0x65405
movsd 0x8ca5(%rip), %xmm0     # 0x6e0a8
jmp 0x6540d
movsd 0x8c03(%rip), %xmm0     # 0x6e010
movslq 0x10(%rsp), %rax
testq %rax, %rax
jle 0x6542f
movq 0x28(%rsp), %rcx
leal 0x1(%rax), %edx
xorl %esi, %esi
movl %esi, %edi
mulsd (%rcx,%rdi,8), %xmm0
addl %edx, %esi
decq %rax
jne 0x65421
cmpb $0x0, 0x40(%rsp)
jne 0x65451
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x65451
movsd %xmm0, 0x8(%rsp)
callq 0x4690
movsd 0x8(%rsp), %xmm0
cmpb $0x0, 0x20(%rsp)
jne 0x653b8
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x653b8
movsd %xmm0, 0x8(%rsp)
callq 0x4690
movsd 0x8(%rsp), %xmm0
jmp 0x653b8
movl $0x4008, %edi           # imm = 0x4008
callq 0x4210
movq %rax, %r14
movl (%rbx), %edx
movl 0x4(%rbx), %ecx
movl 0x8(%rbx), %r8d
movl 0xc(%rbx), %r9d
leaq 0x93c7(%rip), %rax      # 0x6e868
leaq 0xa79a(%rip), %r10      # 0x6fc42
cmpb $0x0, 0x10(%rbx)
cmovneq %rax, %r10
subq $0x8, %rsp
leaq 0x29c64(%rip), %r11     # 0x8f11f
leaq 0x2dd08(%rip), %rsi     # 0x931ca
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x18(%rbx)
callq 0xbfac
addq $0x20, %rsp
leaq 0x4275a(%rip), %rsi     # 0xa7c38
movq 0x42aeb(%rip), %rdx     # 0xa7fd0
movq %r14, %rdi
callq 0x4910
movq %rax, %rbx
cmpb $0x0, 0x40(%rsp)
jne 0x65506
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x65506
callq 0x4690
cmpb $0x0, 0x20(%rsp)
jne 0x65529
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x65529
callq 0x4690
jmp 0x65529
movq %rax, %rbx
movq %r14, %rdi
callq 0x43c0
movq %rbx, %rdi
callq 0x4960
nop