// File: /workspace/github_cpp_makefile_star2_O2/cjxgm[P]libgpp/src/libgpp.cpp
// Function: (anonymous namespace)::make_charset_subset(unsigned char const*)
Charset_Subset make_charset_subset(unsigned char const* s) {
        Charset_Subset x;
        int i;
        unsigned char c;

        x = XX malloc(CHARSET_SUBSET_LEN * sizeof(std::uint32_t));
        for (i = 0; i < CHARSET_SUBSET_LEN; i++)
            x[i] = 0;
        while (*s != 0) {
            if (!((*s) & 0x60)) { // special sequences
                if ((*s) & 0x80)
                    bug("negated special sequences not allowed in charset specifications");
                switch ((*s) & 0x1f) {
                case '\002': // \w, \W, \i, \o, \O not allowed
                case '\004':
                case '\010':
                case '\013':
                case '\014':
                    bug("special sequence not allowed in charset specification");
                case '\003':
                    add_to_charset(x, '\n');
                    // fallthrough
                case '\001':
                    add_to_charset(x, ' ');
                    // fallthrough
                case '\011':
                    add_to_charset(x, '\t');
                    break;
                case '\006':
                    add_to_charset(x, '\n');
                    add_to_charset(x, ' ');
                    add_to_charset(x, '\t');
                    // fallthrough
                case '\005':
                    for (c = 'A'; c <= 'Z'; c++)
                        add_to_charset(x, c);
                    for (c = 'a'; c <= 'z'; c++)
                        add_to_charset(x, c);
                    break;
                case '\007':
                    for (c = '0'; c <= '9'; c++)
                        add_to_charset(x, c);
                    break;
                case '\012':
                    add_to_charset(x, '\n');
                    break;
                }
            } else if ((s[1] == '-') && ((s[2] & 0x60) != 0) && (s[2] >= *s)) {
                for (c = *s; c <= s[2]; c++)
                    add_to_charset(x, c);
                s += 2;
            } else
                add_to_charset(x, *s);
            s++;
        }
        return x;
    }

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
pushq $0x20
popq %rdi
callq 0x2170
xorl %ecx, %ecx
cmpq $0x8, %rcx
je 0x2a85
andl $0x0, (%rax,%rcx,4)
incq %rcx
jmp 0x2a76
leaq 0x5864(%rip), %rdx      # 0x82f0
pushq $0x41
popq %rsi
pushq $0x61
popq %rdi
pushq $0x1
popq %r8
movabsq $0x100000600, %r9       # imm = 0x100000600
pushq $0x30
popq %r10
movzbl (%rbx), %ecx
testq %rcx, %rcx
je 0x2bac
testb $0x60, %cl
je 0x2ae5
cmpb $0x2d, 0x1(%rbx)
jne 0x2ad3
movb 0x2(%rbx), %r11b
testb $0x60, %r11b
sete %bpl
cmpb %cl, %r11b
setb %r14b
orb %bpl, %r14b
je 0x2b14
movl %r8d, %r11d
shll %cl, %r11d
shrl $0x5, %ecx
leaq (%rax,%rcx,4), %rcx
jmp 0x2ba1
testb %cl, %cl
js 0x2bb1
decl %ecx
cmpl $0xb, %ecx
ja 0x2ba4
movl $0x200, %r11d           # imm = 0x200
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
orb $0x4, 0x1(%rax)
orb $0x1, 0x4(%rax)
jmp 0x2b9e
addq $0x2, %rbx
cmpb %r11b, %cl
ja 0x2ba4
movl %ecx, %r11d
shrb $0x3, %r11b
movl %r8d, %ebp
shll %cl, %ebp
movzbl %r11b, %r11d
andl $0x1c, %r11d
orl %ebp, (%rax,%r11)
incb %cl
movb (%rbx), %r11b
jmp 0x2b18
movl %r10d, %ecx
cmpl $0x3a, %ecx
je 0x2ba4
movl %r8d, %r11d
shll %cl, %r11d
movl %ecx, %r14d
shrl $0x5, %r14d
orl %r11d, (%rax,%r14,4)
incl %ecx
jmp 0x2b43
orq %r9, (%rax)
movl %esi, %ecx
cmpl $0x5b, %ecx
je 0x2b7c
movl %r8d, %r11d
shll %cl, %r11d
movl %ecx, %r14d
shrl $0x5, %r14d
orl %r11d, (%rax,%r14,4)
incl %ecx
jmp 0x2b62
movl %edi, %ecx
cmpl $0x7b, %ecx
je 0x2ba4
movl %r8d, %r11d
shll %cl, %r11d
movl %ecx, %r14d
shrl $0x5, %r14d
orl %r11d, (%rax,%r14,4)
incl %ecx
jmp 0x2b7e
movl $0x400, %r11d           # imm = 0x400
movq %rax, %rcx
orl %r11d, (%rcx)
incq %rbx
jmp 0x2aa4
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x588e(%rip), %rdi      # 0x8446
callq 0x2d13
leaq 0x58c2(%rip), %rdi      # 0x8486
callq 0x2d13