// File: /workspace/github_cpp_makefile_star2_O2/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
callq 0x8dc8
testb %al, %al
jne 0x4c29f
movl (%rbx), %eax
cmpl 0x4(%rbx), %eax
jne 0x4c29f
cmpl $0x1, 0x8(%rbx)
jne 0x4c29f
cmpl $0x1, 0xc(%rbx)
jne 0x4c29f
cmpl $0x3, %eax
je 0x4c183
cmpl $0x2, %eax
je 0x4c16a
cmpl $0x1, %eax
jne 0x4c209
movq 0x18(%rbx), %rax
movsd (%rax), %xmm0
jmp 0x4c297
movq 0x18(%rbx), %rax
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
mulsd 0x10(%rax), %xmm1
mulsd 0x18(%rax), %xmm0
jmp 0x4c200
movq 0x18(%rbx), %rax
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
jmp 0x4c297
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x7064
leaq 0x30(%rsp), %rsi
andq $0x0, 0x18(%rsi)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsi)
movb $0x0, 0x10(%rsi)
leaq 0x7(%rsp), %rdx
movq %r14, %rdi
callq 0x4de3e
cmpb $0x0, 0x7(%rsp)
jne 0x4c24b
movsd 0x7e5f(%rip), %xmm0     # 0x540a8
jmp 0x4c253
movsd 0x7dbd(%rip), %xmm0     # 0x54010
movl 0x10(%rsp), %eax
movq 0x28(%rsp), %rcx
leal 0x1(%rax), %edx
xorl %esi, %esi
testl %eax, %eax
cmovlel %esi, %eax
subq $0x1, %rax
jb 0x4c277
movl %esi, %edi
mulsd (%rcx,%rdi,8), %xmm0
addl %edx, %esi
jmp 0x4c266
leaq 0x30(%rsp), %rdi
movsd %xmm0, 0x8(%rsp)
callq 0x17f44
leaq 0x10(%rsp), %rdi
callq 0x6c96
movsd 0x8(%rsp), %xmm0
addq $0x58, %rsp
popq %rbx
popq %r14
retq
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 0x8528(%rip), %rax      # 0x547e8
leaq 0x98fb(%rip), %r10      # 0x55bc2
cmpb $0x0, 0x10(%rbx)
cmovneq %rax, %r10
subq $0x8, %rsp
leaq 0x28dc5(%rip), %r11     # 0x7509f
leaq 0x2cf9f(%rip), %rsi     # 0x79280
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x18(%rbx)
callq 0x9bf8
addq $0x20, %rsp
leaq 0x4394b(%rip), %rsi     # 0x8fc48
movq 0x43cd4(%rip), %rdx     # 0x8ffd8
movq %r14, %rdi
callq 0x4910
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x17f44
leaq 0x10(%rsp), %rdi
callq 0x6c96
jmp 0x4c330
movq %rax, %rbx
movq %r14, %rdi
callq 0x4390
movq %rbx, %rdi
callq 0x4950