// File: /workspace/github_cpp_makefile_star2_O1/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 $0x20, %edi
callq 0x2180
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movups %xmm0, 0x10(%rax)
movb (%rbx), %cl
testb %cl, %cl
je 0x2e5c
leaq 0x55e0(%rip), %rdx      # 0x8330
testb $0x60, %cl
je 0x2d8f
cmpb $0x2d, 0x1(%rbx)
jne 0x2d73
movb 0x2(%rbx), %sil
testb $0x60, %sil
sete %dil
cmpb %cl, %sil
setb %sil
orb %dil, %sil
je 0x2dc0
movl %ecx, %edi
movl $0x1, %esi
shll %cl, %esi
shrb $0x3, %dil
movzbl %dil, %ecx
andl $0x1c, %ecx
addq %rax, %rcx
jmp 0x2e4c
testb %cl, %cl
js 0x2e5e
movzbl %cl, %ecx
decl %ecx
cmpl $0xb, %ecx
ja 0x2e4e
movl $0x200, %esi            # imm = 0x200
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
orb $0x4, 0x1(%rax)
orb $0x1, 0x4(%rax)
jmp 0x2e49
addq $0x2, %rbx
cmpb (%rbx), %cl
ja 0x2e4e
movl %ecx, %esi
shrb $0x3, %sil
movl $0x1, %edi
shll %cl, %edi
movzbl %sil, %esi
andl $0x1c, %esi
orl %edi, (%rax,%rsi)
incb %cl
jmp 0x2dc4
movl $0x30, %ecx
movl $0x1, %esi
shll %cl, %esi
movl %ecx, %edi
shrl $0x5, %edi
orl %esi, (%rax,%rdi,4)
incl %ecx
cmpl $0x3a, %ecx
jne 0x2dec
jmp 0x2e4e
orb $0x1, 0x4(%rax)
orb $0x6, 0x1(%rax)
movl $0x41, %ecx
movl $0x1, %esi
shll %cl, %esi
movl %ecx, %edi
shrl $0x5, %edi
orl %esi, (%rax,%rdi,4)
incl %ecx
cmpl $0x5b, %ecx
jne 0x2e11
movl $0x61, %ecx
movl $0x1, %esi
shll %cl, %esi
movl %ecx, %edi
shrl $0x5, %edi
orl %esi, (%rax,%rdi,4)
incl %ecx
cmpl $0x7b, %ecx
jne 0x2e2c
jmp 0x2e4e
movl $0x400, %esi            # imm = 0x400
movq %rax, %rcx
orl %esi, (%rcx)
movb 0x1(%rbx), %cl
incq %rbx
testb %cl, %cl
jne 0x2d50
popq %rbx
retq
leaq 0x5709(%rip), %rdi      # 0x856e
callq 0x2fc4
leaq 0x573d(%rip), %rdi      # 0x85ae
callq 0x2fc4