// File: /workspace/github_cpp_makefile_star2_O3/vsklad[P]cgen/commandline.cpp
// Function: CGenCommandLineReader::parse_variable_except(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, CGenVariableInfo, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, CGenVariableInfo>>>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
void CGenCommandLineReader::parse_variable_except(CGenVariablesMap& variables_map, const std::string& variable_name) {
    if (variable_name.empty()) {
        parse_error(ERROR_EXCEPT_MUST_FOLLOW_DEFINITION);
    };
    if (is_binary_variable_name(variable_name)) {
        parse_error(ERROR_BINARY_VARIABLE_EXCEPT_INCOMPATIBLE);
    };
    
    CGenVariableInfo& variable_value = variables_map.find(variable_name)->second;
    
    if (variable_value.replace_existing) {
        parse_error(ERROR_EXCEPT_REPLACE_INCOMPATIBLE);
    };
    
    skip_token();
    read_symbol(':');
    const uint32_t param1 = read_uint32();
    if (is_symbol('.')) {
        if (param1 == 0) {
            parse_error(ERROR_RANGE_FIRST_ZERO);
        };
        variable_value.except_range_first = param1 - 1; // becomes zero based
        read_symbol('.');
        read_symbol('.');
        const uint32_t param2 = read_uint32(); // index of the last element, 1 based
        if (param2 < variable_value.except_range_first) {
            parse_error(ERROR_RANGE_FIRST_LAST);
        };
        variable_value.except_range_size = param2 - variable_value.except_range_first;
    } else {
        if (param1 == 0) {
            parse_error(ERROR_EXCEPT_ZERO);
        };
        variable_value.except_count = param1;
    };
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
cmpq $0x0, 0x8(%rdx)
jne 0x192e0
movq (%rbx), %rax
leaq -0x98(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2c2e9(%rip), %rsi     # 0x45589
leaq 0x2c320(%rip), %rdx     # 0x455c7
leaq -0xa8(%rbp), %r13
movq %r13, %rdi
callq 0x1dab2
movq %r12, %rdi
movq %r13, %rsi
callq 0x1c690
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
cmpq %rax, %rdi
je 0x192d9
callq 0xb280
cmpq $0x0, 0x8(%r14)
je 0x1933d
movq (%r14), %rax
movsbl (%rax), %eax
addl $-0x30, %eax
cmpl $0x9, %eax
ja 0x1933d
movq (%rbx), %rax
leaq -0x78(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2c2c1(%rip), %rsi     # 0x455c8
leaq 0x2c2ec(%rip), %rdx     # 0x455fa
leaq -0x88(%rbp), %r13
movq %r13, %rdi
callq 0x1dab2
movq %r12, %rdi
movq %r13, %rsi
callq 0x1c690
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x1933d
callq 0xb280
movq %r15, %rdi
movq %r14, %rsi
callq 0x1dd7e
movq %rax, %r14
cmpb $0x1, 0x78(%rax)
jne 0x1939f
movq (%rbx), %rax
leaq -0xd8(%rbp), %r13
movq -0x18(%rax), %r15
addq %rbx, %r15
movq %r13, -0x10(%r13)
leaq 0x2c28e(%rip), %rsi     # 0x455fb
leaq 0x2c2c1(%rip), %rdx     # 0x45635
leaq -0xe8(%rbp), %r12
movq %r12, %rdi
callq 0x1dab2
movq %r15, %rdi
movq %r12, %rsi
callq 0x1c690
movq -0xe8(%rbp), %rdi
cmpq %r13, %rdi
je 0x1939f
callq 0xb280
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movq 0x10(%rbx,%rcx), %rdx
addq %rdx, 0x8(%rbx,%rcx)
movq $0x0, 0x10(%rbx,%rcx)
movl $0x0, 0x40(%rbx,%rcx)
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x3a, %esi
callq 0x1c824
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x1c066
movl %eax, %r15d
movq (%rbx), %rax
movq -0x18(%rax), %r13
leaq (%rbx,%r13), %r12
movq %r12, %rdi
callq 0x1d33a
cmpq $0x0, 0x10(%rbx,%r13)
je 0x19511
movq 0x8(%r12), %rax
movq 0x18(%r12), %rcx
cmpb $0x2e, (%rcx,%rax)
jne 0x19511
testl %r15d, %r15d
jne 0x1946c
movq (%rbx), %rax
leaq -0x58(%rbp), %rcx
movq -0x18(%rax), %r12
addq %rbx, %r12
movq %rcx, -0x10(%rcx)
leaq 0x2c1fa(%rip), %rsi     # 0x45636
leaq 0x2c236(%rip), %rdx     # 0x45679
leaq -0x68(%rbp), %r13
movq %r13, %rdi
callq 0x1dab2
movq %r12, %rdi
movq %r13, %rsi
callq 0x1c690
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
cmpq %rax, %rdi
je 0x1946c
callq 0xb280
decl %r15d
movl %r15d, 0x4c(%r14)
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x2e, %esi
callq 0x1c824
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0x2e, %esi
callq 0x1c824
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
xorl %esi, %esi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x1c066
movl %eax, %r15d
cmpl 0x4c(%r14), %eax
jae 0x19505
movq (%rbx), %rax
leaq -0xb8(%rbp), %r13
addq -0x18(%rax), %rbx
movq %r13, -0x10(%r13)
leaq 0x2c1a7(%rip), %rsi     # 0x4567a
leaq 0x2c1ee(%rip), %rdx     # 0x456c8
leaq -0xc8(%rbp), %r12
movq %r12, %rdi
callq 0x1dab2
movq %rbx, %rdi
movq %r12, %rsi
callq 0x1c690
movq -0xc8(%rbp), %rdi
cmpq %r13, %rdi
je 0x19505
callq 0xb280
subl 0x4c(%r14), %r15d
movl $0x50, %r13d
jmp 0x19562
movl $0x48, %r13d
testl %r15d, %r15d
jne 0x19562
movq (%rbx), %rax
leaq -0x38(%rbp), %rcx
addq -0x18(%rax), %rbx
movq %rcx, -0x10(%rcx)
leaq 0x2c197(%rip), %rsi     # 0x456c9
leaq 0x2c1e5(%rip), %rdx     # 0x4571e
leaq -0x48(%rbp), %r12
movq %r12, %rdi
callq 0x1dab2
movq %rbx, %rdi
movq %r12, %rsi
callq 0x1c690
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
cmpq %rax, %rdi
je 0x19562
callq 0xb280
movl %r15d, (%r14,%r13)
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq -0x68(%rbp), %rdi
leaq -0x58(%rbp), %rax
jmp 0x195bf
movq %rax, %rbx
movq -0xc8(%rbp), %rdi
jmp 0x195db
movq %rax, %rbx
movq -0x48(%rbp), %rdi
leaq -0x38(%rbp), %rax
jmp 0x195bf
movq %rax, %rbx
movq -0xa8(%rbp), %rdi
leaq -0x98(%rbp), %rax
jmp 0x195bf
movq %rax, %rbx
movq -0x88(%rbp), %rdi
leaq -0x78(%rbp), %rax
cmpq %rax, %rdi
je 0x195c9
callq 0xb280
movq %rbx, %rdi
callq 0xb4e0
movq %rax, %rbx
movq -0xe8(%rbp), %rdi
cmpq %r13, %rdi
jne 0x195c4
jmp 0x195c9