// File: 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:
subq $0x148, %rsp            # imm = 0x148
movq %rdi, 0x138(%rsp)
movq 0x138(%rsp), %rdi
movq %rdi, 0x80(%rsp)
callq 0x10320
testb $0x1, %al
jne 0xb6087
movq 0x80(%rsp), %rcx
movl (%rcx), %eax
cmpl 0x4(%rcx), %eax
jne 0xb6087
movq 0x80(%rsp), %rax
cmpl $0x1, 0x8(%rax)
jne 0xb6087
movq 0x80(%rsp), %rax
cmpl $0x1, 0xc(%rax)
je 0xb616d
movl $0x4008, %edi           # imm = 0x4008
callq 0x5240
movq %rax, %rcx
movq 0x80(%rsp), %rax
movq %rcx, 0x50(%rsp)
movl (%rax), %ecx
movl %ecx, 0x58(%rsp)
movl 0x4(%rax), %ecx
movl %ecx, 0x5c(%rsp)
movl 0x8(%rax), %ecx
movl %ecx, 0x60(%rsp)
movl 0xc(%rax), %ecx
movl %ecx, 0x64(%rsp)
movq 0x18(%rax), %rcx
movq %rcx, 0x68(%rsp)
movb 0x10(%rax), %dl
leaq 0x32903(%rip), %rcx     # 0xe89d2
leaq 0x13a0b(%rip), %rax     # 0xc9ae1
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, 0x70(%rsp)
callq 0x118f0
movq %rax, 0x78(%rsp)
jmp 0xb60ee
movl 0x64(%rsp), %r9d
movl 0x60(%rsp), %r8d
movl 0x5c(%rsp), %ecx
movl 0x58(%rsp), %edx
movq 0x50(%rsp), %rdi
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %r10
movq 0x78(%rsp), %r11
movq %rsp, %rax
movq %r11, 0x10(%rax)
movq %r10, 0x8(%rax)
movq %rsi, (%rax)
leaq 0x370db(%rip), %rsi     # 0xed204
xorl %eax, %eax
callq 0x11fd0
jmp 0xb6132
movq 0x50(%rsp), %rdi
leaq 0x49a0a(%rip), %rsi     # 0xffb48
leaq -0xa3f35(%rip), %rdx    # 0x12210
callq 0x5920
movq 0x50(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x130(%rsp)
movl %eax, 0x12c(%rsp)
callq 0x53a0
jmp 0xb65ac
movq 0x80(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x4c(%rsp)
subl $0x1, %eax
je 0xb619f
jmp 0xb6182
movl 0x4c(%rsp), %eax
subl $0x2, %eax
je 0xb61c2
jmp 0xb618d
movl 0x4c(%rsp), %eax
subl $0x3, %eax
je 0xb6270
jmp 0xb6436
movq 0x80(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0xb28d0
movsd (%rax), %xmm0
movsd %xmm0, 0x140(%rsp)
jmp 0xb659b
movq 0x80(%rsp), %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0xb28d0
movq 0x80(%rsp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, 0x38(%rsp)
movl $0x1, %edx
movl %edx, %esi
callq 0xb28d0
movq 0x80(%rsp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, 0x40(%rsp)
xorl %esi, %esi
movl $0x1, %edx
callq 0xb28d0
movq 0x80(%rsp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, 0x30(%rsp)
movl $0x1, %esi
xorl %edx, %edx
callq 0xb28d0
movsd 0x30(%rsp), %xmm1
movsd 0x38(%rsp), %xmm0
movsd 0x40(%rsp), %xmm2
mulsd (%rax), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x140(%rsp)
jmp 0xb659b
movq 0x80(%rsp), %rax
movq 0x18(%rax), %rcx
movsd (%rcx), %xmm0
movsd %xmm0, 0x120(%rsp)
movq 0x18(%rax), %rcx
movsd 0x8(%rcx), %xmm0
movsd %xmm0, 0x118(%rsp)
movq 0x18(%rax), %rcx
movsd 0x10(%rcx), %xmm0
movsd %xmm0, 0x110(%rsp)
movq 0x18(%rax), %rcx
movsd 0x18(%rcx), %xmm0
movsd %xmm0, 0x108(%rsp)
movq 0x18(%rax), %rcx
movsd 0x20(%rcx), %xmm0
movsd %xmm0, 0x100(%rsp)
movq 0x18(%rax), %rcx
movsd 0x28(%rcx), %xmm0
movsd %xmm0, 0xf8(%rsp)
movq 0x18(%rax), %rcx
movsd 0x30(%rcx), %xmm0
movsd %xmm0, 0xf0(%rsp)
movq 0x18(%rax), %rcx
movsd 0x38(%rcx), %xmm0
movsd %xmm0, 0xe8(%rsp)
movq 0x18(%rax), %rax
movsd 0x40(%rax), %xmm0
movsd %xmm0, 0xe0(%rsp)
movsd 0xe0(%rsp), %xmm0
mulsd 0x120(%rsp), %xmm0
movsd 0x100(%rsp), %xmm2
movsd 0x120(%rsp), %xmm1
mulsd 0xf8(%rsp), %xmm1
mulsd 0xe8(%rsp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0xe0(%rsp), %xmm1
mulsd 0x108(%rsp), %xmm1
movsd 0x118(%rsp), %xmm2
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x108(%rsp), %xmm0
mulsd 0x110(%rsp), %xmm0
movsd 0xe8(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd 0xf0(%rsp), %xmm1
mulsd 0x118(%rsp), %xmm1
movsd 0xf8(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0xf0(%rsp), %xmm0
mulsd 0x110(%rsp), %xmm0
movsd 0x100(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x140(%rsp)
jmp 0xb659b
movq 0x80(%rsp), %rsi
leaq 0xc0(%rsp), %rdi
callq 0xadb0
leaq 0xa0(%rsp), %rdi
callq 0x59ef0
jmp 0xb645a
leaq 0xc0(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
leaq 0x9f(%rsp), %rdx
callq 0xba670
jmp 0xb6479
movb 0x9f(%rsp), %al
movsd 0x11b90(%rip), %xmm0    # 0xc8018
movsd 0x11b80(%rip), %xmm1    # 0xc8010
movsd %xmm1, 0x20(%rsp)
testb $0x1, %al
movsd %xmm0, 0x28(%rsp)
jne 0xb64ac
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
movl $0x0, 0x8c(%rsp)
movl 0x8c(%rsp), %eax
cmpl 0xc0(%rsp), %eax
jge 0xb655e
movl 0x8c(%rsp), %edx
leaq 0xc0(%rsp), %rdi
movl %edx, %esi
callq 0x9850
movq %rax, 0x18(%rsp)
jmp 0xb64f7
movq 0x18(%rsp), %rax
movsd (%rax), %xmm0
mulsd 0x90(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
movl 0x8c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x8c(%rsp)
jmp 0xb64c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x130(%rsp)
movl %eax, 0x12c(%rsp)
jmp 0xb658c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x130(%rsp)
movl %eax, 0x12c(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x31e50
jmp 0xb658c
movsd 0x90(%rsp), %xmm0
movsd %xmm0, 0x140(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x31e50
leaq 0xc0(%rsp), %rdi
callq 0xa540
jmp 0xb659b
leaq 0xc0(%rsp), %rdi
callq 0xa540
jmp 0xb65ac
movsd 0x140(%rsp), %xmm0
addq $0x148, %rsp            # imm = 0x148
retq
movq 0x130(%rsp), %rdi
callq 0x5970
nopl (%rax)