// File: /workspace/github_cpp_makefile_star2_O1/cjxgm[P]libgpp/src/libgpp.cpp
// Function: (anonymous namespace)::Preprocessor::splice_possible_user(int*, int*, int*, int*, int*, int*, int*, int, int*, int)
int splice_possible_user(int *idstart, int *idend, int *sh_end, int *lg_end,
                int *argb, int *arge, int *argc, int idcheck, int *id, int cmtmode) {
            int match, k, pos;

            if (!match_start_sequence(S->user.macro_start, idstart))
                return 0;
            *idend = identifier_end(*idstart);
            if ((*idend) && !get_char(*idend - 1))
                return 0;

            // look for args or no args
            *sh_end = *idend;
            if (!match_end_sequence(S->user.macro_end, sh_end))
                *sh_end = -1;
            pos = *idend;
            match = match_sequence(S->user.macro_arg_start, &pos);

            if (idcheck) {
                *id = find_ident(C->buf + *idstart, *idend - *idstart);
                if (*id < 0)
                    match = 0;
            }
            *lg_end = -1;

            if (match) {
                *argc = 0;
                while (1) {
                    if (*argc >= max_arg_count)
                        bug("too many macro parameters");
                    argb[*argc] = pos;
                    k = 0;
                    while (1) { // look for macro_arg_end, macro_arg_sep, or comment-start
                        pos = iter_identifier_end(pos);
                        skip_possible_comments(&pos, cmtmode, 0);
                        if (get_char(pos) == 0)
                            return (*sh_end >= 0); // EOF
                        if (strchr(S->user.stackchar, get_char(pos)))
                            k++;
                        if (k) {
                            if (strchr(S->user.unstackchar, get_char(pos)))
                                k--;
                        } else {
                            arge[*argc] = pos;
                            if (match_sequence(S->user.macro_arg_sep, &pos)) {
                                match = 0;
                                break;
                            }
                            if (match_end_sequence(S->user.macro_arg_end, &pos)) {
                                match = 1;
                                break;
                            }
                        }
                        pos++; // nothing matched, go forward
                    }
                    (*argc)++;
                    if (match) { // no more args
                        *lg_end = pos;
                        break;
                    }
                }
            }
            return ((*lg_end >= 0) || (*sh_end >= 0));
        }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r9, 0x20(%rsp)
movq %r8, %rbx
movq %rcx, 0x10(%rsp)
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %r12
movq (%rdi), %rax
movq (%rax), %rsi
movq %rbp, %rdx
callq 0x5968
xorl %r15d, %r15d
testl %eax, %eax
je 0x6ea4
movq %rbx, 0x18(%rsp)
movl (%rbp), %esi
movq %r12, %rdi
callq 0x61dc
movl %eax, (%r13)
testl %eax, %eax
je 0x6cc5
decl %eax
movq %r12, %rdi
movl %eax, %esi
callq 0x60ce
testb %al, %al
je 0x6ea4
movl 0x70(%rsp), %ebx
movl (%r13), %eax
movq 0x10(%rsp), %rdx
movl %eax, (%rdx)
movq (%r12), %rax
movq 0x8(%rax), %rsi
movq %r12, %rdi
callq 0x5b98
testl %eax, %eax
jne 0x6cf3
movq 0x10(%rsp), %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movl (%r13), %eax
leaq 0xc(%rsp), %rdx
movl %eax, (%rdx)
movq (%r12), %rax
movq 0x10(%rax), %rsi
movq %r12, %rdi
callq 0x5e50
movl %eax, %r15d
testl %ebx, %ebx
je 0x6d3e
movq 0x78(%rsp), %rbx
movq 0x20(%r12), %rax
movslq (%rbp), %rsi
movl (%r13), %edx
subl %esi, %edx
addq (%rax), %rsi
movq %r12, %rdi
callq 0x64ea
movl %eax, (%rbx)
xorl %ecx, %ecx
testl %eax, %eax
cmovsl %ecx, %r15d
movq 0x18(%rsp), %rcx
movl $0xffffffff, (%rcx)     # imm = 0xFFFFFFFF
testl %r15d, %r15d
je 0x6e8a
movl 0x80(%rsp), %ebp
movq 0x68(%rsp), %rax
movl $0x0, (%rax)
xorl %eax, %eax
leaq 0xc(%rsp), %r13
movl 0xc(%rsp), %ecx
cltq
movq 0x20(%rsp), %rdx
movl %ecx, (%rdx,%rax,4)
xorl %ebx, %ebx
movl 0xc(%rsp), %eax
movl %eax, %r15d
movq %r12, %rdi
movl %eax, %esi
callq 0x61dc
cmpl %r15d, %eax
jne 0x6d7f
movl %eax, 0xc(%rsp)
movq %r12, %rdi
movq %r13, %rsi
movl %ebp, %edx
xorl %ecx, %ecx
callq 0x6eb6
movl 0xc(%rsp), %r15d
movq %r12, %rdi
movl %r15d, %esi
callq 0x60ce
testb %al, %al
je 0x6e95
movq (%r12), %rax
movq 0x38(%rax), %r14
movq %r12, %rdi
movl %r15d, %esi
callq 0x60ce
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
xorl %ecx, %ecx
testq %rax, %rax
setne %cl
addl %ecx, %ebx
je 0x6e0d
movq (%r12), %rax
movq 0x40(%rax), %r14
movq %r12, %rdi
movl %r15d, %esi
callq 0x60ce
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
cmpq $0x1, %rax
adcl $-0x1, %ebx
jmp 0x6e4e
movq 0x68(%rsp), %rax
movslq (%rax), %rax
movq 0x60(%rsp), %rcx
movl %r15d, (%rcx,%rax,4)
movq (%r12), %rax
movq 0x18(%rax), %rsi
movq %r12, %rdi
movq %r13, %rdx
callq 0x5e50
testl %eax, %eax
jne 0x6e57
movq (%r12), %rax
movq 0x20(%rax), %rsi
movq %r12, %rdi
movq %r13, %rdx
callq 0x5b98
xorl %ebx, %ebx
testl %eax, %eax
jne 0x6e78
incl 0xc(%rsp)
jmp 0x6d7b
movq 0x68(%rsp), %rdx
movl (%rdx), %ecx
leal 0x1(%rcx), %eax
movl %eax, (%rdx)
cmpl $0x63, %ecx
jl 0x6d6b
leaq 0x1d03(%rip), %rdi      # 0x8b76
callq 0x2fc4
movq 0x68(%rsp), %rax
incl (%rax)
movl 0xc(%rsp), %eax
movq 0x18(%rsp), %rcx
movl %eax, (%rcx)
movl $0x1, %r15d
cmpl $0x0, (%rcx)
jns 0x6ea4
movq 0x10(%rsp), %rax
movl (%rax), %r15d
notl %r15d
shrl $0x1f, %r15d
movl %r15d, %eax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq