// File: /workspace/github_c_makefile_star2_O2/msteveb[P]autosetup/./jimsh0.c
// Function: Jim_EvalExpression
int Jim_EvalExpression(Jim_Interp *interp, Jim_Obj *exprObjPtr)
{
    struct ExprTree *expr;
    int retcode = JIM_OK;

    Jim_IncrRefCount(exprObjPtr);
    expr = JimGetExpression(interp, exprObjPtr);
    if (!expr) {
        retcode = JIM_ERR;
        goto done;
    }

#ifdef JIM_OPTIMIZATION
    if (!interp->safeexpr) {
        Jim_Obj *objPtr;


        switch (expr->len) {
            case 1:
                objPtr = JimExprIntValOrVar(interp, expr->expr);
                if (objPtr) {
                    Jim_SetResult(interp, objPtr);
                    goto done;
                }
                break;

            case 2:
                if (expr->expr->type == JIM_EXPROP_NOT) {
                    objPtr = JimExprIntValOrVar(interp, expr->expr->left);

                    if (objPtr && JimIsWide(objPtr)) {
                        Jim_SetResult(interp, JimWideValue(objPtr) ? interp->falseObj : interp->trueObj);
                        goto done;
                    }
                }
                break;

            case 3:
                objPtr = JimExprIntValOrVar(interp, expr->expr->left);
                if (objPtr && JimIsWide(objPtr)) {
                    Jim_Obj *objPtr2 = JimExprIntValOrVar(interp, expr->expr->right);
                    if (objPtr2 && JimIsWide(objPtr2)) {
                        jim_wide wideValueA = JimWideValue(objPtr);
                        jim_wide wideValueB = JimWideValue(objPtr2);
                        int cmpRes;
                        switch (expr->expr->type) {
                            case JIM_EXPROP_LT:
                                cmpRes = wideValueA < wideValueB;
                                break;
                            case JIM_EXPROP_LTE:
                                cmpRes = wideValueA <= wideValueB;
                                break;
                            case JIM_EXPROP_GT:
                                cmpRes = wideValueA > wideValueB;
                                break;
                            case JIM_EXPROP_GTE:
                                cmpRes = wideValueA >= wideValueB;
                                break;
                            case JIM_EXPROP_NUMEQ:
                                cmpRes = wideValueA == wideValueB;
                                break;
                            case JIM_EXPROP_NUMNE:
                                cmpRes = wideValueA != wideValueB;
                                break;
                            default:
                                goto noopt;
                        }
                        Jim_SetResult(interp, cmpRes ? interp->trueObj : interp->falseObj);
                        goto done;
                    }
                }
                break;
        }
    }
noopt:
#endif

    expr->inUse++;


    retcode = JimExprEvalTermNode(interp, expr->expr);


    Jim_FreeIntRep(interp, exprObjPtr);
    exprObjPtr->typePtr = &exprObjType;
    Jim_SetIntRepPtr(exprObjPtr, expr);

done:
    Jim_DecrRefCount(interp, exprObjPtr);

    return retcode;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2a8, %rsp            # imm = 0x2A8
movq %rsi, %r13
incl 0x10(%rsi)
movq %rdi, %r12
leaq 0x24950(%rip), %rax     # 0x314f0
cmpq %rax, 0x8(%rsi)
je 0xcf96
leaq -0x94(%rbp), %rbx
movq %r12, %rdi
movq %r13, %rsi
movq %rbx, %rdx
callq 0xb377
movq %rax, -0x88(%rbp)
incl 0x10(%rax)
leaq -0x98(%rbp), %r14
movq %r13, -0x80(%rbp)
movq %r13, %rdi
movq %r14, %rsi
callq 0x7fc7
leaq -0x2c0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq $0x14, -0x8(%rcx)
movl (%r14), %ecx
movl (%rbx), %edx
leaq -0x78(%rbp), %rsi
movq %rax, (%rsi)
movl %ecx, 0x8(%rsi)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rsi)
movups %xmm0, 0x20(%rsi)
movl %edx, 0xc(%rsi)
movabsq $0x2000000001, %rax     # imm = 0x2000000001
movq %rax, 0x30(%rsi)
movl %edx, 0x38(%rsi)
xorl %ebx, %ebx
callq 0x64e0
movq %rax, %r13
movq %r12, -0x30(%rbp)
testl %ebx, %ebx
jne 0xcf51
andq $0x0, -0x38(%rbp)
leaq -0x78(%rbp), %rbx
movq -0x78(%rbp), %r15
movl -0x6c(%rbp), %ecx
movl -0x70(%rbp), %edi
leal -0x1(%rdi), %eax
xorl %r14d, %r14d
movq (%r13), %rsi
movzbl (%r15,%r14), %edx
testb $0x20, 0x1(%rsi,%rdx,2)
jne 0xcc6e
cmpl $0x5c, %edx
jne 0xcc8d
cmpb $0xa, 0x1(%r15,%r14)
je 0xcc78
jmp 0xcc9c
cmpl $0xa, %edx
jne 0xcc78
incl %ecx
movl %ecx, -0x6c(%rbp)
leaq (%r15,%r14), %rdx
incq %rdx
movq %rdx, -0x78(%rbp)
movl %eax, -0x70(%rbp)
decl %eax
incq %r14
jmp 0xcc4f
cmpl $0x23, %edx
jne 0xcc9c
movq %rbx, %rdi
callq 0x15eb7
jmp 0xcc3f
movl %ecx, -0x58(%rbp)
leaq (%r15,%r14), %rbx
movq %rbx, -0x68(%rbp)
cmpl %r14d, %edi
jne 0xccc3
movq %rbx, -0x60(%rbp)
movabsq $0x100000007, %rax      # imm = 0x100000007
movq %rax, -0x54(%rbp)
jmp 0xce59
movzbl (%rbx), %edx
leal -0x22(%rdx), %r8d
cmpl $0x2c, %r8d
ja 0xcd6c
leaq 0x1637d(%rip), %rdx     # 0x23058
movslq (%rdx,%r8,4), %r8
addq %rdx, %r8
pushq $0xb
popq %rdx
jmpq *%r8
movl $0xe, -0x54(%rbp)
movq %rbx, %rdi
leaq -0x78(%rbp), %rsi
callq 0xc7ef
movq -0x78(%rbp), %rbx
movsbl (%rbx), %esi
leaq 0x1b255(%rip), %rdi     # 0x27f5e
pushq $0x8
popq %rdx
callq 0x6290
testq %rax, %rax
setne %al
movq -0x68(%rbp), %rdi
cmpq %rdi, %rbx
sete %cl
orb %al, %cl
cmpb $0x1, %cl
jne 0xce42
leaq -0xe0(%rbp), %rsi
callq 0x6120
movq -0xe0(%rbp), %rbx
movq -0x68(%rbp), %rdi
pushq $0x1
popq %rax
cmpq %rdi, %rbx
je 0xce51
movq -0x78(%rbp), %rax
cmpq %rax, %rbx
jbe 0xce3f
movl $0xf, -0x54(%rbp)
movq %rbx, -0x78(%rbp)
jmp 0xce42
leal -0x66(%rdx), %eax
cmpl $0x9, %eax
jbe 0xcd9e
cmpl $0x5b, %edx
je 0xcece
cmpl $0x74, %edx
je 0xcdae
cmpl $0x79, %edx
je 0xcdae
cmpl $0x7b, %edx
jne 0xce34
leaq -0x78(%rbp), %rdi
callq 0x15f10
jmp 0xce59
leaq 0x16367(%rip), %rcx     # 0x2310c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0x78(%rbp), %rdi
callq 0x174aa
testl %eax, %eax
jne 0xce34
jmp 0xce59
xorl %r12d, %r12d
movq %rdi, -0x90(%rbp)
cmpq $0x30, %r12
je 0xce23
leaq 0x25459(%rip), %rax     # 0x32230
movq (%r12,%rax), %rdi
movq %rbx, %rsi
pushq $0x3
popq %rdx
callq 0x60b0
movq -0x90(%rbp), %rdi
addq $0x8, %r12
testl %eax, %eax
jne 0xcdca
leaq (%r15,%r14), %rax
addq $0x3, %rax
movq %rax, -0x78(%rbp)
subl %r14d, %edi
addl $-0x3, %edi
movl %edi, -0x70(%rbp)
leaq (%r15,%r14), %rax
addq $0x2, %rax
movq %rax, -0x60(%rbp)
movl $0xf, -0x54(%rbp)
movq -0x30(%rbp), %r12
jmp 0xce59
leaq -0x78(%rbp), %rdi
callq 0x174aa
testl %eax, %eax
movq -0x30(%rbp), %r12
je 0xce59
leaq -0x78(%rbp), %rdi
callq 0x17375
jmp 0xce51
movq %rax, %rbx
leaq -0x1(%rbx), %rax
movq %rax, -0x60(%rbp)
subl %ebx, %edi
addl %edi, -0x70(%rbp)
xorl %eax, %eax
testl %eax, %eax
jne 0xceee
movq -0x68(%rbp), %rsi
movl -0x60(%rbp), %edx
subl %esi, %edx
incl %edx
movl -0x54(%rbp), %ecx
movl -0x58(%rbp), %r8d
leaq -0x2d0(%rbp), %rdi
callq 0x159bb
movl -0x50(%rbp), %ebx
jmp 0xcc2e
pushq $0xc
jmp 0xceb6
leaq (%r15,%r14), %rax
incq %rax
movq %rax, -0x68(%rbp)
movl %ecx, -0x58(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x160eb
movl %eax, -0x54(%rbp)
jmp 0xce59
leaq -0x78(%rbp), %rbx
movq %rbx, %rdi
callq 0x15c85
testl %eax, %eax
je 0xced9
movq %rbx, %rdi
jmp 0xce38
pushq $0xd
popq %rdx
movl %edx, -0x54(%rbp)
movq %rbx, -0x60(%rbp)
leaq (%r15,%r14), %rcx
incq %rcx
movq %rcx, -0x78(%rbp)
movl %eax, -0x70(%rbp)
jmp 0xce59
leaq -0x78(%rbp), %rdi
callq 0x15c64
jmp 0xce59
cmpl $0x11, -0x54(%rbp)
jne 0xce59
leaq 0x1afa3(%rip), %rax     # 0x27e8d
movq %rax, -0x38(%rbp)
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0xcf09
xorl %esi, %esi
callq *0x2637f(%rip)          # 0x33288
leaq 0x1af4a(%rip), %rsi     # 0x27e5a
xorl %r14d, %r14d
movq %r12, %rdi
movq -0x80(%rbp), %r13
movq %r13, %rdx
xorl %eax, %eax
callq 0x68a7
movq -0x38(%rbp), %rcx
testq %rcx, %rcx
je 0xd1ae
movq (%r12), %rsi
leaq 0x1a178(%rip), %rdx     # 0x270b4
xorl %r14d, %r14d
movq %r12, %rdi
xorl %r8d, %r8d
xorl %eax, %eax
callq 0xa731
jmp 0xd1ae
cmpl $0x1, -0x2c4(%rbp)
jg 0xcf9f
leaq 0x1af1b(%rip), %rsi     # 0x27e7c
pushq $-0x1
popq %rdx
movq %r12, %rdi
callq 0x7363
movq %rax, %rbx
incl 0x10(%rax)
movq (%r12), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
movq -0x80(%rbp), %r13
jg 0xcf90
movq %r12, %rdi
callq 0x73bf
movq %rbx, (%r12)
jmp 0xcfb2
movq 0x18(%r13), %r14
jmp 0xd1f4
movl -0x44(%rbp), %esi
movq %r12, %rdi
callq 0xf7d0
testl %eax, %eax
movq -0x80(%rbp), %r13
je 0xcff3
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0xcfcd
xorl %esi, %esi
callq *0x262bb(%rip)          # 0x33288
movq -0x88(%rbp), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
jg 0xd235
movq %r12, %rdi
callq 0x73bf
jmp 0xd235
leaq -0xe0(%rbp), %rbx
andq $0x0, (%rbx)
movq -0x2d0(%rbp), %rax
movq %rax, 0x10(%rbx)
movq %rax, 0x8(%rbx)
movq %r13, 0x28(%rbx)
movq -0x88(%rbp), %rax
movq %rax, 0x30(%rbx)
movslq -0x2c4(%rbp), %rax
imulq $0x28, %rax, %rsi
addq $-0x28, %rsi
movq %r12, %r15
xorl %r12d, %r12d
xorl %edi, %edi
callq *0x2624f(%rip)          # 0x33288
movq %rax, %r14
movq %rax, 0x38(%rbx)
movslq -0x2c4(%rbp), %rax
imulq $0x28, %rax, %rdx
addq $-0x28, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x6240
movq %r14, 0x40(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x18(%rbx)
pushq $0x1
popq %r8
movq %r15, %rdi
movq %rbx, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x18447
movl $0x0, %r15d
testl %eax, %eax
jne 0xd0f1
movslq -0xc8(%rbp), %rax
testq %rax, %rax
je 0xd0a5
leaq -0x1(%rax), %rcx
movl %ecx, -0xc8(%rbp)
movq -0xc0(%rbp), %rcx
movq -0x8(%rcx,%rax,8), %r15
jmp 0xd0a8
xorl %r15d, %r15d
movq -0x30(%rbp), %r14
cmpl $0x0, -0xe0(%rbp)
je 0xd0ee
leaq 0x1aeba(%rip), %rsi     # 0x27f76
pushq $-0x1
popq %rdx
movq %r14, %rdi
callq 0x7363
movq %rax, %rbx
incl 0x10(%rax)
movq (%r14), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
jg 0xd0e6
movq %r14, %rdi
callq 0x73bf
movq %rbx, (%r14)
xorl %r12d, %r12d
jmp 0xd0f1
movb $0x1, %r12b
movq -0xc0(%rbp), %rdi
xorl %esi, %esi
callq *0x26188(%rip)          # 0x33288
testb %r12b, %r12b
je 0xd169
pushq $0x18
popq %rsi
xorl %edi, %edi
callq *0x26178(%rip)          # 0x33288
movq %rax, %r14
movl $0x1, 0x14(%rax)
movq %r15, (%rax)
movq -0xa8(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
subq %rcx, %rax
pushq $0x28
popq %rcx
cqto
idivq %rcx
movl %eax, 0x10(%r14)
cmpl %eax, -0x2c4(%rbp)
movq -0x30(%rbp), %r12
jg 0xd193
leaq 0x1ae3f(%rip), %rdi     # 0x27f90
leaq 0x19aa3(%rip), %rsi     # 0x26bfb
leaq 0x1ae53(%rip), %rcx     # 0x27fb2
movl $0x3b0d, %edx           # imm = 0x3B0D
callq 0x6220
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rax
subq %rsi, %rax
pushq $0x28
popq %rcx
cqto
idivq %rcx
movq -0x30(%rbp), %r12
movq %r12, %rdi
movl %eax, %edx
callq 0x189d0
xorl %r14d, %r14d
movq -0x2d0(%rbp), %rdi
leaq -0x2c0(%rbp), %rax
cmpq %rax, %rdi
je 0xd1ae
xorl %esi, %esi
callq *0x260da(%rip)          # 0x33288
movq -0x88(%rbp), %rsi
movl 0x10(%rsi), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%rsi)
cmpl $0x1, %eax
jg 0xd1cb
movq %r12, %rdi
callq 0x73bf
movq 0x8(%r13), %rax
testq %rax, %rax
je 0xd1e5
movq 0x8(%rax), %rax
testq %rax, %rax
je 0xd1e5
movq %r12, %rdi
movq %r13, %rsi
callq *%rax
movq %r14, 0x18(%r13)
leaq 0x24300(%rip), %rax     # 0x314f0
movq %rax, 0x8(%r13)
testq %r14, %r14
je 0xd235
incl 0x14(%r14)
movq (%r14), %rsi
movq %r12, %rdi
callq 0xea75
movl %eax, %ebx
movq 0x8(%r13), %rax
testq %rax, %rax
je 0xd224
movq 0x8(%rax), %rax
testq %rax, %rax
je 0xd224
movq %r12, %rdi
movq %r13, %rsi
callq *%rax
leaq 0x242c5(%rip), %rax     # 0x314f0
movq %rax, 0x8(%r13)
movq %r14, 0x18(%r13)
jmp 0xd238
pushq $0x1
popq %rbx
movl 0x10(%r13), %eax
leal -0x1(%rax), %ecx
movl %ecx, 0x10(%r13)
cmpl $0x1, %eax
jg 0xd253
movq %r12, %rdi
movq %r13, %rsi
callq 0x73bf
movl %ebx, %eax
addq $0x2a8, %rsp            # imm = 0x2A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq