// File: cjxgm[P]libgpp/src/libgpp.cpp
// Function: (anonymous namespace)::Preprocessor::arithm_eval(int, int)
char *arithm_eval(int pos1, int pos2) {
            // first define the defined(...) operator
            auto i = find_ident("defined", strlen("defined"));
            if (i >= 0)
                warning("the defined(...) macro is already defined");
            else {
                newmacro("defined", strlen("defined"), 1);
                macros[nmacros].macrolen = 0;
                macros[nmacros].macrotext = XX malloc(1);
                macros[nmacros].macrotext[0] = 0;
                macros[nmacros].nnamedargs = -2; // trademark of the defined(...) macro
                nmacros++;
            }
            // process the text in a usual way
            auto s = process_text(C->buf + pos1, pos2 - pos1, FLAG_META);
            // undefine the defined(...) operator
            if (i < 0) {
                i = find_ident("defined", strlen("defined"));
                if ((i < 0) || (macros[i].nnamedargs != -2))
                    warning("the defined(...) macro was redefined in expression");
                else
                    delete_macro(i);
            }

            if (!do_arithm_eval(s, 0, strlen(s), &i))
                return s; // couldn't compute

            free(s);
            auto result = std::to_string(i);
            return my_strdup(result.data());
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x70(%rbp)
leaq 0x3d77(%rip), %rsi      # 0xbcbb
movl $0x7, %edx
callq 0x77e0
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
jl 0x7f68
leaq 0x3d3b(%rip), %rdi      # 0xbc99
callq 0x6ed0
jmp 0x800e
movq -0x70(%rbp), %rdi
leaq 0x3d48(%rip), %rsi      # 0xbcbb
movl $0x7, %edx
movl $0x1, %ecx
callq 0x79d0
movq -0x70(%rbp), %rcx
movq 0x8(%rcx), %rax
movslq 0x10(%rcx), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x18(%rax)
movl $0x1, %edi
callq 0x21a0
movq %rax, %rsi
leaq -0x29(%rbp), %rdi
callq 0x3060
movq %rax, -0x28(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x3730
movq %rax, %rdx
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rcx
movslq 0x10(%rax), %rsi
imulq $0x30, %rsi, %rsi
addq %rsi, %rcx
movq %rdx, 0x8(%rcx)
movq 0x8(%rax), %rcx
movslq 0x10(%rax), %rdx
imulq $0x30, %rdx, %rdx
addq %rdx, %rcx
movq 0x8(%rcx), %rcx
movb $0x0, (%rcx)
movq 0x8(%rax), %rcx
movslq 0x10(%rax), %rdx
imulq $0x30, %rdx, %rdx
addq %rdx, %rcx
movl $0xfffffffe, 0x1c(%rcx) # imm = 0xFFFFFFFE
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x70(%rbp), %rdi
movq 0x20(%rdi), %rax
movq (%rax), %rsi
movslq -0x14(%rbp), %rax
addq %rax, %rsi
movl -0x18(%rbp), %edx
subl -0x14(%rbp), %edx
xorl %ecx, %ecx
callq 0x40f0
movq %rax, -0x38(%rbp)
cmpl $0x0, -0x1c(%rbp)
jge 0x808a
movq -0x70(%rbp), %rdi
leaq 0x3c79(%rip), %rsi      # 0xbcbb
movl $0x7, %edx
callq 0x77e0
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
jl 0x806e
movq -0x70(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x1c(%rbp), %rcx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
cmpl $-0x2, 0x1c(%rax)
je 0x807c
leaq 0x3c4e(%rip), %rdi      # 0xbcc3
callq 0x6ed0
jmp 0x8088
movq -0x70(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0x7860
jmp 0x808a
movq -0x38(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x38(%rbp), %rdi
callq 0x2070
movq -0x78(%rbp), %rdi
movl %eax, %edx
xorl %esi, %esi
leaq -0x1c(%rbp), %rcx
callq 0x9440
cmpl $0x0, %eax
jne 0x80bb
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x811b
movq -0x38(%rbp), %rdi
callq 0x2170
movl -0x1c(%rbp), %esi
leaq -0x58(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq 0xac20
movq -0x88(%rbp), %rdi
callq 0x2180
movq %rax, %rdi
callq 0x34e0
movq %rax, -0x80(%rbp)
jmp 0x80f1
movq -0x80(%rbp), %rax
movq %rax, -0x8(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x22d8
jmp 0x811b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x22d8
jmp 0x8128
movq -0x8(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq
movq -0x60(%rbp), %rdi
callq 0x2280
nopw %cs:(%rax,%rax)