// File: /workspace/github_c_makefile_star2_O0/MaoKo[P]FGFX/fgfl/src/regex.c
// Function: regex_cce
static bitset_t*
regex_cce(int kind_cce) {
    bitset_t* cce_range = new_bitset();
    bitset_t* op_range = NULL_BITSET;

    switch (kind_cce) {
        case T_CCE_ALNUM:
            op_range = regex_cce(T_CCE_ALPHA);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            op_range = regex_cce(T_CCE_DIGIT);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            break;
        case T_CCE_ALPHA:
            op_range = regex_cce(T_CCE_LOWER);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            op_range = regex_cce(T_CCE_UPPER);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            break;
        case T_CCE_BLANK:
            ADD_BITSET(cce_range, '\t');
            ADD_BITSET(cce_range, ' ');
            break;
        case T_CCE_CNTRL:
            add_range_bitset(cce_range, '\0', '\x1F' + 1);
            ADD_BITSET(cce_range, '\x7F');
            break;
        case T_CCE_DIGIT:
            add_range_bitset(cce_range, '0', '9' + 1);
            break;
        case T_CCE_GRAPH:
            op_range = regex_cce(T_CCE_PRINT); OFF_BITSET(op_range, ' ');
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);
            break;
        case T_CCE_LOWER:
            add_range_bitset(cce_range, 'a', 'z' + 1);
            break;
        case T_CCE_PRINT:
            op_range = regex_cce(T_CCE_CNTRL);
            UNION_BITSET(cce_range, COMPL_BITSET(op_range));
            del_bitset(op_range);
            break;
        case T_CCE_PUNCT:
            op_range = regex_cce(T_CCE_GRAPH);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            op_range = regex_cce(T_CCE_ALNUM);
            UNION_BITSET(cce_range, COMPL_BITSET(op_range));
            del_bitset(op_range);        
            break;
        case T_CCE_SPACE:
            add_range_bitset(cce_range, '\t', '\r' + 1);
            ADD_BITSET(cce_range, ' ');
            break;
        case T_CCE_UPPER:
            add_range_bitset(cce_range, 'A', 'Z' + 1);
            break;
        case T_CCE_XDIGIT:
            op_range = regex_cce(T_CCE_DIGIT);
            UNION_BITSET(cce_range, op_range); del_bitset(op_range);        
            add_range_bitset(cce_range, 'a', 'f' + 1);
            add_range_bitset(cce_range, 'A', 'F' + 1);
            break;
    }
    return (cce_range);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl %edi, -0x4(%rbp)
callq 0x12b0
movq %rax, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movl -0x4(%rbp), %eax
addl $-0x4b, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0xb, %eax
ja 0x91e1
movq -0x20(%rbp), %rax
leaq 0x5f10(%rip), %rcx      # 0xedac
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x4c, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
movl $0x4e, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
jmp 0x91e1
movl $0x50, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
movl $0x55, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
jmp 0x91e1
movq -0x10(%rbp), %rcx
movl $0x9, %eax
cmpl 0x4(%rcx), %eax
jb 0x8f65
movq -0x10(%rbp), %rdi
movl $0x9, %esi
callq 0x1440
jmp 0x8f7a
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rcx
orq $0x200, %rcx            # imm = 0x200
movq %rcx, (%rax)
movq -0x10(%rbp), %rcx
movl $0x20, %eax
cmpl 0x4(%rcx), %eax
jb 0x8f98
movq -0x10(%rbp), %rdi
movl $0x20, %esi
callq 0x1440
jmp 0x8fb0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movabsq $0x100000000, %rcx      # imm = 0x100000000
orq (%rax), %rcx
movq %rcx, (%rax)
jmp 0x91e1
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
movl $0x20, %edx
callq 0x1630
movq -0x10(%rbp), %rcx
movl $0x7f, %eax
cmpl 0x4(%rcx), %eax
jb 0x8fe5
movq -0x10(%rbp), %rdi
movl $0x7f, %esi
callq 0x1440
jmp 0x8fff
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
jmp 0x91e1
movq -0x10(%rbp), %rdi
movl $0x30, %esi
movl $0x3a, %edx
callq 0x1630
jmp 0x91e1
movl $0x51, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rcx
movl $0x20, %eax
cmpl 0x4(%rcx), %eax
jb 0x903a
jmp 0x9052
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movabsq $-0x100000001, %rcx     # imm = 0xFFFFFFFEFFFFFFFF
andq (%rax), %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
jmp 0x91e1
movq -0x10(%rbp), %rdi
movl $0x61, %esi
movl $0x7b, %edx
callq 0x1630
jmp 0x91e1
movl $0x4d, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rsi
movl $0x3, %edi
xorl %eax, %eax
movl %eax, %edx
callq 0x18b0
movq -0x28(%rbp), %rsi
movq %rax, %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
jmp 0x91e1
movl $0x4f, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
movl $0x4b, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rsi
movl $0x3, %edi
xorl %eax, %eax
movl %eax, %edx
callq 0x18b0
movq -0x30(%rbp), %rsi
movq %rax, %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
jmp 0x91e1
movq -0x10(%rbp), %rdi
movl $0x9, %esi
movl $0xe, %edx
callq 0x1630
movq -0x10(%rbp), %rcx
movl $0x20, %eax
cmpl 0x4(%rcx), %eax
jb 0x9166
movq -0x10(%rbp), %rdi
movl $0x20, %esi
callq 0x1440
jmp 0x917e
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movabsq $0x100000000, %rcx      # imm = 0x100000000
orq (%rax), %rcx
movq %rcx, (%rax)
jmp 0x91e1
movq -0x10(%rbp), %rdi
movl $0x41, %esi
movl $0x5b, %edx
callq 0x1630
jmp 0x91e1
movl $0x4e, %edi
callq 0x8e60
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
xorl %edi, %edi
callq 0x18b0
movq -0x18(%rbp), %rdi
callq 0x1320
movq -0x10(%rbp), %rdi
movl $0x61, %esi
movl $0x67, %edx
callq 0x1630
movq -0x10(%rbp), %rdi
movl $0x41, %esi
movl $0x47, %edx
callq 0x1630
movq -0x10(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)