// File: /workspace/github_cpp_makefile_star2_O1/demon386[P]git-store/./libs/filesystem/src/path.cpp
// Function: boost::filesystem::path::m_path_iterator_decrement(boost::filesystem::path::iterator&)
void path::m_path_iterator_decrement(path::iterator & it)
  {
    BOOST_ASSERT_MSG(it.m_pos, "path::iterator decrement past begin()");

    size_type end_pos(it.m_pos);

    // if at end and there was a trailing non-root '/', return "."
    if (it.m_pos == it.m_path_ptr->m_pathname.size()
      && it.m_path_ptr->m_pathname.size() > 1
      && is_separator(it.m_path_ptr->m_pathname[it.m_pos-1])
      && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1) 
       )
    {
      --it.m_pos;
      it.m_element = detail::dot_path();
      return;
    }

    size_type root_dir_pos(root_directory_start(it.m_path_ptr->m_pathname, end_pos));

    // skip separators unless root directory
    for (
      ; 
      end_pos > 0
      && (end_pos-1) != root_dir_pos
      && is_separator(it.m_path_ptr->m_pathname[end_pos-1])
      ;
      --end_pos) {}

    it.m_pos = filename_pos(it.m_path_ptr->m_pathname, end_pos);
    it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
    if (it.m_element.m_pathname == preferred_separator_string) // needed for Windows, harmless on POSIX 
      it.m_element.m_pathname = separator_string;    // generic format; see docs 
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x28, %rsp
movq 0x28(%rdi), %r14
testq %r14, %r14
je 0x2b76f
movq %rdi, %rbx
movq 0x20(%rdi), %rdi
movq 0x8(%rdi), %rax
cmpq %rax, %r14
setne %cl
cmpq $0x2, %rax
setb %al
orb %cl, %al
jne 0x2b688
movq (%rdi), %rax
cmpb $0x2f, -0x1(%rax,%r14)
jne 0x2b688
leaq -0x1(%r14), %rsi
callq 0x2ad59
testb %al, %al
je 0x2b74d
movq 0x20(%rbx), %rdi
movq %r14, %rsi
callq 0x2aafe
movq 0x20(%rbx), %rdx
leaq 0x1(%rax), %rcx
incq %r14
negq %rax
cmpq $0x1, %r14
je 0x2b6c6
leaq (%rax,%r14), %rsi
cmpq $0x2, %rsi
je 0x2b6cb
movq (%rdx), %rsi
leaq -0x1(%r14), %r15
cmpb $0x2f, -0x2(%rsi,%r14)
movq %r15, %r14
je 0x2b6a2
jmp 0x2b6ce
xorl %r15d, %r15d
jmp 0x2b6ce
movq %rcx, %r15
movq 0x20(%rbx), %rdi
movq %r15, %rsi
callq 0x2ac0e
movq %rax, 0x28(%rbx)
movq 0x20(%rbx), %rsi
subq %rax, %r15
leaq -0x38(%rbp), %r14
movq %r14, %rdi
movq %rax, %rdx
movq %r15, %rcx
callq 0xb490
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb290
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b714
callq 0xb430
leaq 0x9939(%rip), %rsi      # 0x35054
movq %rbx, %rdi
callq 0xb110
testl %eax, %eax
jne 0x2b742
movq 0x8(%rbx), %rdx
leaq 0x9922(%rip), %rcx      # 0x35054
movl $0x1, %r8d
movq %rbx, %rdi
xorl %esi, %esi
callq 0xb6f0
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
decq 0x28(%rbx)
callq 0x2ade1
leaq 0x20ea3(%rip), %rsi     # 0x4c600
movq %rbx, %rdi
addq $0x28, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0xb290
leaq 0xb027(%rip), %rdi      # 0x3679d
leaq 0xaee5(%rip), %rsi      # 0x36662
leaq 0xb04f(%rip), %rcx      # 0x367d3
movl $0x308, %edx            # imm = 0x308
callq 0xb310
movq %rax, %rbx
leaq -0x28(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b7a3
callq 0xb430
movq %rbx, %rdi
callq 0xb7f0
nop