// File: /workspace/github_cpp_makefile_star2_O1/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 0x68185
movdqu (%rbx), %xmm0
pxor %xmm1, %xmm1
pcmpeqd %xmm0, %xmm1
movmskps %xmm1, %ecx
testb %cl, %cl
jne 0x68185
pshufd $0x55, %xmm0, %xmm1     # xmm1 = xmm0[1,1,1,1]
pcmpeqd %xmm0, %xmm1
movd %xmm1, %ecx
testb $0x1, %cl
je 0x68185
pshufd $0xee, %xmm0, %xmm1     # xmm1 = xmm0[2,3,2,3]
movd %xmm1, %ecx
cmpl $0x1, %ecx
jne 0x68185
cmpl $0x1, 0xc(%rbx)
jne 0x68185
movd %xmm0, %ecx
cmpl $0x3, %ecx
je 0x6803e
cmpl $0x2, %ecx
je 0x68024
cmpl $0x1, %ecx
jne 0x680c3
movsd (%rax), %xmm0
jmp 0x680bb
leal 0x1(%rcx), %edx
movl %ecx, %ecx
movsd (%rax), %xmm0
movsd 0x8(%rax), %xmm1
mulsd (%rax,%rcx,8), %xmm1
mulsd (%rax,%rdx,8), %xmm0
jmp 0x680b7
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 0x8a94
leaq 0x30(%rsp), %rsi
movq $0x0, 0x18(%rsi)
pxor %xmm0, %xmm0
movdqa %xmm0, (%rsi)
movb $0x0, 0x10(%rsi)
leaq 0x7(%rsp), %rdx
movq %r14, %rdi
callq 0x6a27e
cmpb $0x0, 0x7(%rsp)
jne 0x6810a
movsd 0x8f08(%rip), %xmm0     # 0x71010
jmp 0x68112
movsd 0x8f06(%rip), %xmm0     # 0x71018
movslq 0x10(%rsp), %rax
testq %rax, %rax
jle 0x68134
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 0x68126
cmpb $0x0, 0x40(%rsp)
jne 0x68156
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x68156
movsd %xmm0, 0x8(%rsp)
callq 0x4680
movsd 0x8(%rsp), %xmm0
cmpb $0x0, 0x20(%rsp)
jne 0x680bb
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x680bb
movsd %xmm0, 0x8(%rsp)
callq 0x4680
movsd 0x8(%rsp), %xmm0
jmp 0x680bb
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 0xb192(%rip), %rax      # 0x73338
leaq 0xc565(%rip), %r10      # 0x74712
cmpb $0x0, 0x10(%rbx)
cmovneq %rax, %r10
subq $0x8, %rsp
leaq 0x2ba2f(%rip), %r11     # 0x93bef
leaq 0x2fbc9(%rip), %rsi     # 0x97d90
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x18(%rbx)
callq 0xbfd8
addq $0x20, %rsp
leaq 0x44a25(%rip), %rsi     # 0xacc08
movq 0x44de6(%rip), %rdx     # 0xacfd0
movq %r14, %rdi
callq 0x4900
movq %rax, %rbx
cmpb $0x0, 0x40(%rsp)
jne 0x6820b
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x6820b
callq 0x4680
cmpb $0x0, 0x20(%rsp)
jne 0x6822e
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x6822e
callq 0x4680
jmp 0x6822e
movq %rax, %rbx
movq %r14, %rdi
callq 0x43b0
movq %rbx, %rdi
callq 0x4950