// File: /workspace/github_cpp_makefile_star2_O1/manikandan5[P]Image-Matching-Stitching-Warping/./CImg.h
// Function: cimg_library::CImg<double>::mirror(char)
CImg<T>& mirror(const char axis) {
      if (is_empty()) return *this;
      T *pf, *pb, *buf = 0;
      switch (cimg::uncase(axis)) {
      case 'x' : {
        pf = _data; pb = data(_width-1);
        const unsigned int width2 = _width/2;
        for (unsigned int yzv = 0; yzv<_height*_depth*_spectrum; ++yzv) {
          for (unsigned int x = 0; x<width2; ++x) { const T val = *pf; *(pf++) = *pb; *(pb--) = val; }
          pf+=_width - width2;
          pb+=_width + width2;
        }
      } break;
      case 'y' : {
        buf = new T[_width];
        pf = _data; pb = data(0,_height-1);
        const unsigned int height2 = _height/2;
        for (unsigned int zv = 0; zv<_depth*_spectrum; ++zv) {
          for (unsigned int y = 0; y<height2; ++y) {
            std::memcpy(buf,pf,_width*sizeof(T));
            std::memcpy(pf,pb,_width*sizeof(T));
            std::memcpy(pb,buf,_width*sizeof(T));
            pf+=_width;
            pb-=_width;
          }
          pf+=(unsigned long)_width*(_height - height2);
          pb+=(unsigned long)_width*(_height + height2);
        }
      } break;
      case 'z' : {
        buf = new T[(unsigned long)_width*_height];
        pf = _data; pb = data(0,0,_depth-1);
        const unsigned int depth2 = _depth/2;
        cimg_forC(*this,c) {
          for (unsigned int z = 0; z<depth2; ++z) {
            std::memcpy(buf,pf,_width*_height*sizeof(T));
            std::memcpy(pf,pb,_width*_height*sizeof(T));
            std::memcpy(pb,buf,_width*_height*sizeof(T));
            pf+=(unsigned long)_width*_height;
            pb-=(unsigned long)_width*_height;
          }
          pf+=(unsigned long)_width*_height*(_depth - depth2);
          pb+=(unsigned long)_width*_height*(_depth + depth2);
        }
      } break;
      case 'c' : {
        buf = new T[(unsigned long)_width*_height*_depth];
        pf = _data; pb = data(0,0,0,_spectrum-1);
        const unsigned int _spectrum2 = _spectrum/2;
        for (unsigned int v = 0; v<_spectrum2; ++v) {
          std::memcpy(buf,pf,_width*_height*_depth*sizeof(T));
          std::memcpy(pf,pb,_width*_height*_depth*sizeof(T));
          std::memcpy(pb,buf,_width*_height*_depth*sizeof(T));
          pf+=(unsigned long)_width*_height*_depth;
          pb-=(unsigned long)_width*_height*_depth;
        }
      } break;
      default :
        throw CImgArgumentException(_cimg_instance
                                    "mirror(): Invalid specified axis '%c'.",
                                    cimg_instance,
                                    axis);
      }
      delete[] buf;
      return *this;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %rbx
movq 0x18(%rdi), %r14
testq %r14, %r14
je 0x48bcc
movdqu (%rbx), %xmm1
pxor %xmm0, %xmm0
pcmpeqd %xmm1, %xmm0
movmskps %xmm0, %eax
testb %al, %al
jne 0x48bcc
movl %esi, %r15d
leal -0x5b(%r15), %eax
leal 0x20(%r15), %ecx
cmpb $-0x1a, %al
movzbl %r15b, %eax
movzbl %cl, %ecx
cmovbl %eax, %ecx
movzbl %cl, %eax
cmpl $0x78, %eax
jg 0x48916
cmpl $0x63, %eax
je 0x48a32
cmpl $0x78, %eax
jne 0x48bde
pshufd $0x55, %xmm1, %xmm0     # xmm0 = xmm1[1,1,1,1]
movd %xmm0, %ecx
pshufd $0xee, %xmm1, %xmm0     # xmm0 = xmm1[2,3,2,3]
movd %xmm0, %eax
imull %ecx, %eax
imull 0xc(%rbx), %eax
xorl %r15d, %r15d
testl %eax, %eax
je 0x48bbf
movd %xmm1, %ecx
movl %ecx, %edx
shrl %edx
leal -0x1(%rcx), %esi
leaq (%r14,%rsi,8), %rsi
movl %ecx, %edi
subl %edx, %edi
leal (%rdx,%rcx), %r8d
xorl %r9d, %r9d
movl %edx, %r10d
cmpl $0x2, %ecx
jb 0x48901
movq (%r14), %xmm0
movq (%rsi), %xmm1
movq %xmm1, (%r14)
addq $0x8, %r14
movq %xmm0, (%rsi)
addq $-0x8, %rsi
decl %r10d
jne 0x488e2
leaq (%r14,%rdi,8), %r14
leaq (%rsi,%r8,8), %rsi
incl %r9d
cmpl %eax, %r9d
jne 0x488da
jmp 0x48bbf
cmpl $0x79, %eax
movdqa %xmm1, 0x10(%rsp)
je 0x48af7
cmpl $0x7a, %eax
jne 0x48bde
movd %xmm1, %eax
pshufd $0x55, %xmm1, %xmm0     # xmm0 = xmm1[1,1,1,1]
movd %xmm0, %r12d
imulq %rax, %r12
movq %r12, %rax
shrq $0x3d, %rax
leaq (,%r12,8), %rcx
xorl %r13d, %r13d
negq %rax
movl $0x0, %edi
sbbq %rdi, %rdi
orq %rcx, %rdi
callq 0x4040
movq %rax, %r15
cmpl $0x0, 0xc(%rbx)
jle 0x48bbf
pshufd $0xee, 0x10(%rsp), %xmm0 # xmm0 = mem[2,3,2,3]
movd %xmm0, %eax
movl %eax, %ebp
shrl %ebp
movq %rax, 0x8(%rsp)
decl %eax
imulq %rax, %r12
leaq (%r14,%r12,8), %r12
movl %ebp, 0x4(%rsp)
movq %r13, 0x10(%rsp)
cmpl $0x2, 0x8(%rsp)
jb 0x489f5
movl 0x4(%rbx), %r13d
imull (%rbx), %r13d
shlq $0x3, %r13
movq %r15, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x4430
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x4430
movl 0x4(%rbx), %edx
imull (%rbx), %edx
shlq $0x3, %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x4430
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
imulq %rax, %rcx
leaq (%r14,%rcx,8), %r14
shlq $0x3, %rcx
subq %rcx, %r12
decl %ebp
jne 0x489a0
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
imulq %rax, %rcx
movl 0x8(%rbx), %eax
movl %eax, %edx
movl 0x4(%rsp), %ebp
subl %ebp, %edx
imulq %rcx, %rdx
leaq (%r14,%rdx,8), %r14
addl %ebp, %eax
imulq %rcx, %rax
leaq (%r12,%rax,8), %r12
movq 0x10(%rsp), %r13
incl %r13d
cmpl 0xc(%rbx), %r13d
jl 0x48994
jmp 0x48bbf
movd %xmm1, %eax
pshufd $0x55, %xmm1, %xmm0     # xmm0 = xmm1[1,1,1,1]
movd %xmm0, %ecx
imulq %rax, %rcx
pshufd $0xee, %xmm1, %xmm0     # xmm0 = xmm1[2,3,2,3]
movd %xmm0, %r12d
imulq %rcx, %r12
movq %r12, %rax
shrq $0x3d, %rax
leaq (,%r12,8), %rcx
xorl %edi, %edi
negq %rax
sbbq %rdi, %rdi
orq %rcx, %rdi
callq 0x4040
movq %rax, %r15
movl 0xc(%rbx), %eax
cmpl $0x2, %eax
jb 0x48bbf
movl %eax, %ebp
shrl %ebp
decl %eax
imulq %rax, %r12
leaq (%r14,%r12,8), %r12
movl 0x4(%rbx), %r13d
imull (%rbx), %r13d
imull 0x8(%rbx), %r13d
shlq $0x3, %r13
movq %r15, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x4430
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x4430
movl 0x4(%rbx), %edx
imull (%rbx), %edx
imull 0x8(%rbx), %edx
shlq $0x3, %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x4430
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
imulq %rax, %rcx
movl 0x8(%rbx), %eax
imulq %rcx, %rax
leaq (%r14,%rax,8), %r14
shlq $0x3, %rax
subq %rax, %r12
decl %ebp
jne 0x48a8d
jmp 0x48bbf
movd %xmm1, %r12d
leaq (,%r12,8), %rdi
callq 0x4040
movq %rax, %r15
movl 0xc(%rbx), %eax
imull 0x8(%rbx), %eax
testl %eax, %eax
je 0x48bbf
pshufd $0x55, 0x10(%rsp), %xmm0 # xmm0 = mem[1,1,1,1]
movd %xmm0, %eax
movl %eax, %ebp
shrl %ebp
movq %rax, 0x8(%rsp)
decl %eax
imulq %r12, %rax
leaq (%r14,%rax,8), %r12
xorl %ecx, %ecx
movl %ebp, 0x4(%rsp)
movl %ecx, 0x10(%rsp)
cmpl $0x2, 0x8(%rsp)
jb 0x48b8f
movl (%rbx), %r13d
shlq $0x3, %r13
movq %r15, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x4430
movq %r14, %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x4430
movl (%rbx), %edx
shlq $0x3, %rdx
movq %r12, %rdi
movq %r15, %rsi
callq 0x4430
movl (%rbx), %eax
leaq (%r14,%rax,8), %r14
shlq $0x3, %rax
subq %rax, %r12
decl %ebp
jne 0x48b4a
movl (%rbx), %eax
movl 0x4(%rbx), %ecx
movl %ecx, %edx
movl 0x4(%rsp), %ebp
subl %ebp, %edx
imulq %rax, %rdx
leaq (%r14,%rdx,8), %r14
addl %ebp, %ecx
imulq %rax, %rcx
leaq (%r12,%rcx,8), %r12
movl 0x10(%rsp), %ecx
incl %ecx
movl 0xc(%rbx), %eax
imull 0x8(%rbx), %eax
cmpl %eax, %ecx
jb 0x48b3f
testq %r15, %r15
je 0x48bcc
movq %r15, %rdi
callq 0x4680
movq %rbx, %rax
addq $0x28, %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 0x2a739(%rip), %rax     # 0x73338
cmpb $0x0, 0x10(%rbx)
leaq 0x2bb08(%rip), %r10     # 0x74712
cmovneq %rax, %r10
movsbl %r15b, %r11d
leaq 0x4afd6(%rip), %r15     # 0x93bef
leaq 0x4b7a6(%rip), %rsi     # 0x943c6
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r15
pushq %r10
pushq 0x18(%rbx)
callq 0xc196
addq $0x20, %rsp
leaq 0x63fe2(%rip), %rsi     # 0xacc20
movq 0x6438b(%rip), %rdx     # 0xacfd0
movq %r14, %rdi
callq 0x4900
movq %rax, %rbx
movq %r14, %rdi
callq 0x43b0
movq %rbx, %rdi
callq 0x4950