// File: /workspace/github_cpp_makefile_star2_O3/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 %rbx
movq %rdi, %rbx
movl $0x1, %edi
movl $0x20, %esi
callq 0x20c0
movb (%rbx), %cl
testb %cl, %cl
je 0x2e2a
leaq 0x560c(%rip), %rdx      # 0x831c
movabsq $0x100000600, %rsi      # imm = 0x100000600
testb $0x60, %cl
je 0x2d5a
cmpb $0x2d, 0x1(%rbx)
jne 0x2d3d
movb 0x2(%rbx), %dil
testb $0x60, %dil
sete %r8b
cmpb %cl, %dil
setb %dil
orb %r8b, %dil
je 0x2d8b
movl %ecx, %r8d
movl $0x1, %edi
shll %cl, %edi
shrb $0x3, %r8b
movzbl %r8b, %ecx
andl $0x1c, %ecx
addq %rax, %rcx
jmp 0x2e1a
testb %cl, %cl
js 0x2e2c
movzbl %cl, %ecx
decl %ecx
cmpl $0xb, %ecx
ja 0x2e1c
movl $0x200, %edi            # imm = 0x200
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
orb $0x4, 0x1(%rax)
orb $0x1, 0x4(%rax)
jmp 0x2e17
addq $0x2, %rbx
movl %ecx, %edi
shrb $0x3, %dil
movl $0x1, %r8d
shll %cl, %r8d
movzbl %dil, %edi
andl $0x1c, %edi
orl %r8d, (%rax,%rdi)
incb %cl
cmpb (%rbx), %cl
jbe 0x2d8f
jmp 0x2e1c
movl $0x30, %ecx
movl $0x1, %edi
shll %cl, %edi
movl %ecx, %r8d
shrl $0x5, %r8d
orl %edi, (%rax,%r8,4)
incl %ecx
cmpl $0x3a, %ecx
jne 0x2db6
jmp 0x2e1c
orq %rsi, (%rax)
movl $0x41, %ecx
movl $0x1, %edi
shll %cl, %edi
movl %ecx, %r8d
shrl $0x5, %r8d
orl %edi, (%rax,%r8,4)
incl %ecx
cmpl $0x5b, %ecx
jne 0x2dd9
movl $0x61, %ecx
movl $0x1, %edi
shll %cl, %edi
movl %ecx, %r8d
shrl $0x5, %r8d
orl %edi, (%rax,%r8,4)
incl %ecx
cmpl $0x7b, %ecx
jne 0x2df7
jmp 0x2e1c
movl $0x400, %edi            # imm = 0x400
movq %rax, %rcx
orl %edi, (%rcx)
movb 0x1(%rbx), %cl
incq %rbx
testb %cl, %cl
jne 0x2d1a
popq %rbx
retq
leaq 0x56df(%rip), %rdi      # 0x8512
callq 0x2fa0
leaq 0x5713(%rip), %rdi      # 0x8552
callq 0x2fa0