// File: /workspace/github_cpp_makefile_star2_O1/manikandan5[P]Image-Matching-Stitching-Warping/./CImg.h
// Function: cimg_library::CImg<double>& cimg_library::CImg<double>::draw_line<double>(int, int, int, int, double const*, float, unsigned int, bool)
CImg<T>& draw_line(const int x0, const int y0,
                       const int x1, const int y1,
                       const tc *const color, const float opacity=1,
                       const unsigned int pattern=~0U, const bool init_hatch=true) {
      if (is_empty()) return *this;
      if (!color)
        throw CImgArgumentException(_cimg_instance
                                    "draw_line(): Specified color is (null).",
                                    cimg_instance);
      static unsigned int hatch = ~0U - (~0U>>1);
      if (init_hatch) hatch = ~0U - (~0U>>1);
      const bool xdir = x0<x1, ydir = y0<y1;
      int
        nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1,
        &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1,
        &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0,
        &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1,
        &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0;
      if (xright<0 || xleft>=width()) return *this;
      if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; }
      if (xright>=width()) {
        yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft));
        xright = width() - 1;
      }
      if (ydown<0 || yup>=height()) return *this;
      if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; }
      if (ydown>=height()) {
        xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup));
        ydown = height() - 1;
      }
      T *ptrd0 = data(nx0,ny0);
      int dx = xright - xleft, dy = ydown - yup;
      const bool steep = dy>dx;
      if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy);
      const long
        offx = (nx0<nx1?1:-1)*(steep?width():1),
        offy = (ny0<ny1?1:-1)*(steep?1:width());
      const unsigned long wh = (unsigned long)_width*_height;
      if (opacity>=1) {
        if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) {
          if (pattern&hatch) {
            T *ptrd = ptrd0; const tc* col = color;
            cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; }
          }
          hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1);
          ptrd0+=offx;
          if ((error-=dy)<0) { ptrd0+=offy; error+=dx; }
        } else for (int error = dx>>1, x = 0; x<=dx; ++x) {
          T *ptrd = ptrd0; const tc* col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; }
          ptrd0+=offx;
          if ((error-=dy)<0) { ptrd0+=offy; error+=dx; }
        }
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %r10
testq %r10, %r10
je 0xaff5
movdqu (%rbx), %xmm1
pxor %xmm2, %xmm2
pcmpeqd %xmm1, %xmm2
movmskps %xmm2, %eax
testb %al, %al
jne 0xaff5
testq %r9, %r9
je 0xb007
cmpb $0x0, 0x58(%rsp)
je 0xaa81
movl $0x80000000, 0xa2ae7(%rip) # imm = 0x80000000
cmpl %ecx, %esi
movl %ecx, %eax
cmovgl %esi, %eax
testl %eax, %eax
js 0xaff5
cmpl %ecx, %esi
movl %ecx, %r14d
cmovll %esi, %r14d
movd %xmm1, %edi
cmpl %edi, %r14d
jge 0xaff5
movl %ecx, %r11d
movl %edx, %ebp
movl %r8d, %r15d
movl %esi, %r12d
testl %r14d, %r14d
jns 0xab13
xorl %r12d, %r12d
xorps %xmm2, %xmm2
cvtsi2ss %r14d, %xmm2
cmpl %ecx, %esi
movl %edx, %r11d
cmovll %r8d, %r11d
cvtsi2ss %r11d, %xmm3
movl %r8d, %r15d
cmovll %edx, %r15d
cvtsi2ss %r15d, %xmm4
subss %xmm4, %xmm3
mulss %xmm2, %xmm3
xorps %xmm4, %xmm4
cvtsi2ss %eax, %xmm4
subss %xmm2, %xmm4
divss %xmm4, %xmm3
cvttss2si %xmm3, %eax
movl $0x0, %r11d
cmovll %ecx, %r11d
cmovgel %esi, %r12d
subl %eax, %r15d
cmpl %ecx, %esi
movl %edx, %ebp
cmovll %r15d, %ebp
cmovll %r8d, %r15d
cmpl %ecx, %esi
movl %r12d, %eax
cmovll %r11d, %eax
cmpl %edi, %eax
jl 0xab8c
xorps %xmm2, %xmm2
cvtsi2ss %eax, %xmm2
xorps %xmm3, %xmm3
cvtsi2ss %edi, %xmm3
cmpl %ecx, %esi
movl %ebp, %eax
cmovll %r15d, %eax
xorps %xmm4, %xmm4
cvtsi2ss %eax, %xmm4
movl %r15d, %r14d
cmovll %ebp, %r14d
movaps %xmm2, %xmm5
cvtsi2ss %r14d, %xmm6
subss %xmm3, %xmm5
movl %r11d, %r14d
cmovll %r12d, %r14d
subss %xmm6, %xmm4
xorps %xmm3, %xmm3
cvtsi2ss %r14d, %xmm3
leal -0x1(%rdi), %r14d
mulss %xmm5, %xmm4
subss %xmm3, %xmm2
divss %xmm2, %xmm4
cvttss2si %xmm4, %r13d
cmovll %r14d, %r11d
cmovgel %r14d, %r12d
subl %r13d, %eax
cmpl %ecx, %esi
cmovgel %eax, %ebp
cmovll %eax, %r15d
cmpl %r8d, %edx
movl %ebp, %eax
cmovll %r15d, %eax
testl %eax, %eax
js 0xaff5
cmpl %r8d, %edx
movl %r15d, %r13d
cmovll %ebp, %r13d
pshufd $0x55, %xmm1, %xmm2     # xmm2 = xmm1[1,1,1,1]
movd %xmm2, %r14d
cmpl %r14d, %r13d
jge 0xaff5
testl %r13d, %r13d
jns 0xac23
xorps %xmm2, %xmm2
cvtsi2ss %r13d, %xmm2
cmpl %r8d, %edx
movl %r12d, %r13d
cmovll %r11d, %r13d
xorps %xmm3, %xmm3
cvtsi2ss %r13d, %xmm3
movl %r11d, %r13d
cmovll %r12d, %r13d
xorps %xmm4, %xmm4
cvtsi2ss %r13d, %xmm4
xorps %xmm5, %xmm5
cvtsi2ss %eax, %xmm5
subss %xmm4, %xmm3
mulss %xmm2, %xmm3
subss %xmm2, %xmm5
divss %xmm5, %xmm3
cvttss2si %xmm3, %eax
movl %eax, 0x8(%rsp)
movl $0x0, %eax
cmovll %eax, %ebp
cmovgel %eax, %r15d
subl 0x8(%rsp), %r13d
cmpl %r8d, %edx
cmovgel %r13d, %r11d
cmovll %r13d, %r12d
cmpl %r8d, %edx
movl %ebp, %r13d
cmovll %r15d, %r13d
cmpl %r14d, %r13d
jl 0xacbd
cmpl %r8d, %edx
movl %r12d, %eax
cmovll %r11d, %eax
movq %r14, 0x8(%rsp)
movl %r11d, %r14d
cmovll %r12d, %r14d
movd %eax, %xmm2
movd %r13d, %xmm3
punpckldq %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
cvtdq2ps %xmm3, %xmm2
movd %r14d, %xmm3
shufps $0xd4, %xmm1, %xmm3     # xmm3 = xmm3[0,1],xmm1[1,3]
shufps $0x52, %xmm1, %xmm3     # xmm3 = xmm3[2,0],xmm1[1,1]
cvtdq2ps %xmm3, %xmm1
movaps %xmm2, %xmm3
subps %xmm1, %xmm3
movaps %xmm3, %xmm1
movl %r15d, %r14d
cmovll %ebp, %r14d
shufps $0x55, %xmm3, %xmm1     # xmm1 = xmm1[1,1],xmm3[1,1]
xorps %xmm4, %xmm4
cvtsi2ss %r14d, %xmm4
mulss %xmm3, %xmm1
movq 0x8(%rsp), %r14
leal -0x1(%r14), %r14d
subss %xmm4, %xmm2
divss %xmm2, %xmm1
cvttss2si %xmm1, %r13d
cmovgel %r14d, %ebp
cmovll %r14d, %r15d
movq 0x8(%rsp), %r14
subl %r13d, %eax
cmpl %r8d, %edx
cmovll %eax, %r11d
cmovgel %eax, %r12d
movl %ebp, %r13d
movl %edi, %eax
movq %rax, 0x8(%rsp)
imulq %rax, %r13
cmpl %ecx, %esi
movl %r12d, %eax
cmovll %r11d, %eax
movl %r11d, %ecx
cmovll %r12d, %ecx
subl %ecx, %eax
cmpl %r8d, %edx
movl %r12d, %ecx
leaq (%r10,%rcx,8), %r8
movl %r14d, %ecx
movl %ebp, %r14d
cmovll %r15d, %r14d
movl %r15d, %edx
cmovll %ebp, %edx
subl %edx, %r14d
cmpl %eax, %r14d
jle 0xad0d
movl $0x1, %r10d
movl %r15d, %esi
movl %r14d, %edx
jmp 0xad33
movl %edi, %r10d
movl $0x1, %edi
movl %r11d, %esi
movq %r8, 0x10(%rsp)
movl %ebp, %r8d
movl %r15d, %r11d
movl %eax, %edx
movl %r14d, %eax
movl %r12d, %ebp
movl %r8d, %r12d
movq 0x10(%rsp), %r8
movl 0x50(%rsp), %r15d
leaq (%r8,%r13,8), %r8
movl %edi, %r14d
negl %r14d
cmpl %esi, %ebp
cmovll %edi, %r14d
movslq %r14d, %rsi
movl %r10d, %edi
negl %edi
cmpl %r11d, %r12d
cmovll %r10d, %edi
movslq %edi, %rdi
ucomiss 0x6654f(%rip), %xmm0    # 0x712b0
jae 0xae52
movaps 0x663b2(%rip), %xmm1    # 0x71120
andps %xmm0, %xmm1
xorps %xmm3, %xmm3
cmpless %xmm0, %xmm3
andps %xmm0, %xmm3
movss 0x6652c(%rip), %xmm2    # 0x712b0
subss %xmm3, %xmm2
cmpl $-0x1, %r15d
je 0xaf03
testl %edx, %edx
js 0xaff5
movl 0xa27c7(%rip), %r12d    # 0xad568
movl %edx, %r11d
shrl %r11d
movl 0xc(%rbx), %r14d
cvtss2sd %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm2, %xmm1
imulq 0x8(%rsp), %rcx
shlq $0x3, %rcx
xorl %r15d, %r15d
movl $0x80000000, %ebp       # imm = 0x80000000
testl %r14d, %r14d
setle %r10b
testl %r12d, 0x50(%rsp)
sete %r13b
orb %r10b, %r13b
jne 0xae0a
movq %r8, %r10
xorl %r13d, %r13d
movsd (%r10), %xmm2
mulsd %xmm1, %xmm2
movsd (%r9,%r13,8), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm2, %xmm3
movsd %xmm3, (%r10)
incq %r13
addq %rcx, %r10
cmpl %r13d, %r14d
jne 0xade3
movl %r12d, %r13d
shrl %r13d
cmpl $0x2, %r12d
cmovbl %ebp, %r13d
leaq (%r8,%rsi,8), %r8
subl %eax, %r11d
movl $0x0, %r10d
cmovsq %rdi, %r10
leaq (%r8,%r10,8), %r8
movl %r11d, %r10d
sarl $0x1f, %r10d
andl %edx, %r10d
addl %r10d, %r11d
leal 0x1(%r15), %r10d
movl %r13d, %r12d
cmpl %edx, %r15d
movl %r10d, %r15d
jne 0xadc8
jmp 0xaef7
cmpl $-0x1, %r15d
je 0xaf8d
testl %edx, %edx
js 0xaff5
movl 0xa26fd(%rip), %r12d    # 0xad568
movl %edx, %r11d
shrl %r11d
movl 0xc(%rbx), %r14d
imulq 0x8(%rsp), %rcx
shlq $0x3, %rcx
xorl %r15d, %r15d
movl $0x80000000, %ebp       # imm = 0x80000000
testl %r14d, %r14d
setle %r10b
testl %r12d, 0x50(%rsp)
sete %r13b
orb %r10b, %r13b
jne 0xaeb8
movq %r8, %r10
xorl %r13d, %r13d
movsd (%r9,%r13,8), %xmm0
movsd %xmm0, (%r10)
incq %r13
addq %rcx, %r10
cmpl %r13d, %r14d
jne 0xaea2
movl %r12d, %r13d
shrl %r13d
cmpl $0x2, %r12d
cmovbl %ebp, %r13d
leaq (%r8,%rsi,8), %r8
subl %eax, %r11d
movl $0x0, %r10d
cmovsq %rdi, %r10
leaq (%r8,%r10,8), %r8
movl %r11d, %r10d
sarl $0x1f, %r10d
andl %edx, %r10d
addl %r10d, %r11d
leal 0x1(%r15), %r10d
movl %r13d, %r12d
cmpl %edx, %r15d
movl %r10d, %r15d
jne 0xae87
movl %r13d, 0xa266a(%rip)    # 0xad568
jmp 0xaff5
testl %edx, %edx
js 0xaff5
movl %edx, %r10d
shrl %r10d
movl 0xc(%rbx), %r11d
cvtss2sd %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtss2sd %xmm2, %xmm1
imulq 0x8(%rsp), %rcx
shlq $0x3, %rcx
xorl %r14d, %r14d
testl %r11d, %r11d
jle 0xaf5f
movq %r8, %r15
xorl %r12d, %r12d
movsd (%r15), %xmm2
mulsd %xmm1, %xmm2
movsd (%r9,%r12,8), %xmm3
mulsd %xmm0, %xmm3
addsd %xmm2, %xmm3
movsd %xmm3, (%r15)
incq %r12
addq %rcx, %r15
cmpl %r12d, %r11d
jne 0xaf38
leaq (%r8,%rsi,8), %r8
subl %eax, %r10d
movl $0x0, %r15d
cmovsq %rdi, %r15
leaq (%r8,%r15,8), %r8
movl %r10d, %ebp
sarl $0x1f, %ebp
andl %edx, %ebp
addl %ebp, %r10d
leal 0x1(%r14), %ebp
cmpl %edx, %r14d
movl %ebp, %r14d
jne 0xaf2d
jmp 0xaff5
testl %edx, %edx
js 0xaff5
movl %edx, %r10d
shrl %r10d
movl 0xc(%rbx), %r11d
imulq 0x8(%rsp), %rcx
shlq $0x3, %rcx
xorl %r14d, %r14d
testl %r11d, %r11d
jle 0xafc9
movq %r8, %r15
xorl %r12d, %r12d
movsd (%r9,%r12,8), %xmm0
movsd %xmm0, (%r15)
incq %r12
addq %rcx, %r15
cmpl %r12d, %r11d
jne 0xafb3
leaq (%r8,%rsi,8), %r8
subl %eax, %r10d
movl $0x0, %r15d
cmovsq %rdi, %r15
leaq (%r8,%r15,8), %r8
movl %r10d, %ebp
sarl $0x1f, %ebp
andl %edx, %ebp
addl %ebp, %r10d
leal 0x1(%r14), %ebp
cmpl %edx, %r14d
movl %ebp, %r14d
jne 0xafa8
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
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 0x68310(%rip), %rax     # 0x73338
leaq 0x696e3(%rip), %r10     # 0x74712
cmpb $0x0, 0x10(%rbx)
cmovneq %rax, %r10
subq $0x8, %rsp
leaq 0x88bad(%rip), %r11     # 0x93bef
leaq 0x880c0(%rip), %rsi     # 0x93109
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x18(%rbx)
callq 0xc196
addq $0x20, %rsp
leaq 0xa1bbb(%rip), %rsi     # 0xacc20
movq 0xa1f64(%rip), %rdx     # 0xacfd0
movq %r14, %rdi
callq 0x4900
movq %rax, %rbx
movq %r14, %rdi
callq 0x43b0
movq %rbx, %rdi
callq 0x4950
nop