// File: /workspace/github_c_makefile_star2_O0/msteveb[P]autosetup/./jimsh0.c
// Function: JimExprOpBin
static int JimExprOpBin(Jim_Interp *interp, struct JimExprNode *node)
{
    int rc = JIM_OK;
    double dA, dB, dC = 0;
    jim_wide wA, wB, wC = 0;
    Jim_Obj *A, *B;

    if ((rc = JimExprGetTerm(interp, node->left, &A)) != JIM_OK) {
        return rc;
    }
    if ((rc = JimExprGetTerm(interp, node->right, &B)) != JIM_OK) {
        Jim_DecrRefCount(interp, A);
        return rc;
    }

    if ((A->typePtr != &doubleObjType || A->bytes) &&
        (B->typePtr != &doubleObjType || B->bytes) &&
        JimGetWideNoErr(interp, A, &wA) == JIM_OK && JimGetWideNoErr(interp, B, &wB) == JIM_OK) {



        switch (node->type) {
            case JIM_EXPROP_POW:
            case JIM_EXPROP_FUNC_POW:
                if (wA == 0 && wB < 0) {
                    Jim_SetResultString(interp, "exponentiation of zero by negative power", -1);
                    rc = JIM_ERR;
                    goto done;
                }
                wC = JimPowWide(wA, wB);
                goto intresult;
            case JIM_EXPROP_ADD:
                wC = wA + wB;
                goto intresult;
            case JIM_EXPROP_SUB:
                wC = wA - wB;
                goto intresult;
            case JIM_EXPROP_MUL:
                wC = wA * wB;
                goto intresult;
            case JIM_EXPROP_DIV:
                if (wB == 0) {
                    Jim_SetResultString(interp, "Division by zero", -1);
                    rc = JIM_ERR;
                    goto done;
                }
                else {
                    if (wB < 0) {
                        wB = -wB;
                        wA = -wA;
                    }
                    wC = wA / wB;
                    if (wA % wB < 0) {
                        wC--;
                    }
                    goto intresult;
                }
            case JIM_EXPROP_LT:
                wC = wA < wB;
                goto intresult;
            case JIM_EXPROP_GT:
                wC = wA > wB;
                goto intresult;
            case JIM_EXPROP_LTE:
                wC = wA <= wB;
                goto intresult;
            case JIM_EXPROP_GTE:
                wC = wA >= wB;
                goto intresult;
            case JIM_EXPROP_NUMEQ:
                wC = wA == wB;
                goto intresult;
            case JIM_EXPROP_NUMNE:
                wC = wA != wB;
                goto intresult;
        }
    }
    if (Jim_GetDouble(interp, A, &dA) == JIM_OK && Jim_GetDouble(interp, B, &dB) == JIM_OK) {
        switch (node->type) {
#ifndef JIM_MATH_FUNCTIONS
            case JIM_EXPROP_POW:
            case JIM_EXPROP_FUNC_POW:
            case JIM_EXPROP_FUNC_ATAN2:
            case JIM_EXPROP_FUNC_HYPOT:
            case JIM_EXPROP_FUNC_FMOD:
                Jim_SetResultString(interp, "unsupported", -1);
                rc = JIM_ERR;
                goto done;
#else
            case JIM_EXPROP_POW:
            case JIM_EXPROP_FUNC_POW:
                dC = pow(dA, dB);
                goto doubleresult;
            case JIM_EXPROP_FUNC_ATAN2:
                dC = atan2(dA, dB);
                goto doubleresult;
            case JIM_EXPROP_FUNC_HYPOT:
                dC = hypot(dA, dB);
                goto doubleresult;
            case JIM_EXPROP_FUNC_FMOD:
                dC = fmod(dA, dB);
                goto doubleresult;
#endif
            case JIM_EXPROP_ADD:
                dC = dA + dB;
                goto doubleresult;
            case JIM_EXPROP_SUB:
                dC = dA - dB;
                goto doubleresult;
            case JIM_EXPROP_MUL:
                dC = dA * dB;
                goto doubleresult;
            case JIM_EXPROP_DIV:
                if (dB == 0) {
#ifdef INFINITY
                    dC = dA < 0 ? -INFINITY : INFINITY;
#else
                    dC = (dA < 0 ? -1.0 : 1.0) * strtod("Inf", NULL);
#endif
                }
                else {
                    dC = dA / dB;
                }
                goto doubleresult;
            case JIM_EXPROP_LT:
                wC = dA < dB;
                goto intresult;
            case JIM_EXPROP_GT:
                wC = dA > dB;
                goto intresult;
            case JIM_EXPROP_LTE:
                wC = dA <= dB;
                goto intresult;
            case JIM_EXPROP_GTE:
                wC = dA >= dB;
                goto intresult;
            case JIM_EXPROP_NUMEQ:
                wC = dA == dB;
                goto intresult;
            case JIM_EXPROP_NUMNE:
                wC = dA != dB;
                goto intresult;
        }
    }
    else {



        int i = Jim_StringCompareObj(interp, A, B, 0);

        switch (node->type) {
            case JIM_EXPROP_LT:
                wC = i < 0;
                goto intresult;
            case JIM_EXPROP_GT:
                wC = i > 0;
                goto intresult;
            case JIM_EXPROP_LTE:
                wC = i <= 0;
                goto intresult;
            case JIM_EXPROP_GTE:
                wC = i >= 0;
                goto intresult;
            case JIM_EXPROP_NUMEQ:
                wC = i == 0;
                goto intresult;
            case JIM_EXPROP_NUMNE:
                wC = i != 0;
                goto intresult;
        }
    }

    rc = JIM_ERR;
done:
    Jim_DecrRefCount(interp, A);
    Jim_DecrRefCount(interp, B);
    return rc;
intresult:
    Jim_SetResultInt(interp, wC);
    goto done;
doubleresult:
    Jim_SetResult(interp, Jim_NewDoubleObj(interp, dC));
    goto done;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
leaq -0x58(%rbp), %rdx
callq 0x23a90
movl %eax, -0x1c(%rbp)
cmpl $0x0, %eax
je 0x22652
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x22d6a
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x60(%rbp), %rdx
callq 0x23a90
movl %eax, -0x1c(%rbp)
cmpl $0x0, %eax
je 0x22699
movq -0x58(%rbp), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x2268e
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x7a10
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x22d6a
movq -0x58(%rbp), %rax
leaq 0x23d9c(%rip), %rcx     # 0x46440
cmpq %rcx, 0x8(%rax)
jne 0x226b8
movq -0x58(%rbp), %rax
cmpq $0x0, (%rax)
je 0x22952
movq -0x60(%rbp), %rax
leaq 0x23d7d(%rip), %rcx     # 0x46440
cmpq %rcx, 0x8(%rax)
jne 0x226d7
movq -0x60(%rbp), %rax
cmpq $0x0, (%rax)
je 0x22952
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0x21920
cmpl $0x0, %eax
jne 0x22952
movq -0x10(%rbp), %rdi
movq -0x60(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0x21920
cmpl $0x0, %eax
jne 0x22952
movq -0x18(%rbp), %rax
movl (%rax), %eax
addl $-0x14, %eax
movl %eax, %ecx
movq %rcx, -0x98(%rbp)
subl $0x3a, %eax
ja 0x22950
movq -0x98(%rbp), %rax
leaq 0x14818(%rip), %rcx     # 0x36f4c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpq $0x0, -0x40(%rbp)
jne 0x227af
cmpq $0x0, -0x48(%rbp)
jge 0x227af
jmp 0x2274d
movq -0x10(%rbp), %rdi
leaq 0x19b32(%rip), %rsi     # 0x3c28a
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x7990
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22798
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x68(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x1c(%rbp)
jmp 0x22c64
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x23af0
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
subq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
imulq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpq $0x0, -0x48(%rbp)
jne 0x22864
jmp 0x22802
movq -0x10(%rbp), %rdi
leaq 0x19aa6(%rip), %rsi     # 0x3c2b3
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x7990
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x2284d
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x70(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x1c(%rbp)
jmp 0x22c64
cmpq $0x0, -0x48(%rbp)
jge 0x2287f
xorl %eax, %eax
subq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
xorl %eax, %eax
subq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cqto
idivq -0x48(%rbp)
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rax
cqto
idivq -0x48(%rbp)
cmpq $0x0, %rdx
jge 0x228a9
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setl %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setg %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setle %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setge %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movq -0x40(%rbp), %rax
cmpq -0x48(%rbp), %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
jmp 0x22952
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
leaq -0x28(%rbp), %rdx
callq 0xfa00
cmpl $0x0, %eax
jne 0x22b92
movq -0x10(%rbp), %rdi
movq -0x60(%rbp), %rsi
leaq -0x30(%rbp), %rdx
callq 0xfa00
cmpl $0x0, %eax
jne 0x22b92
movq -0x18(%rbp), %rax
movl (%rax), %eax
addl $-0x14, %eax
movl %eax, %ecx
movq %rcx, -0xa0(%rbp)
subl $0x3c, %eax
ja 0x22b8d
movq -0xa0(%rbp), %rax
leaq 0x146a1(%rip), %rcx     # 0x37050
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x229ba
movq -0x10(%rbp), %rdi
leaq 0x198ff(%rip), %rsi     # 0x3c2c4
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
callq 0x7990
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22a05
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x78(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movl $0x1, -0x1c(%rbp)
jmp 0x22c64
movsd -0x28(%rbp), %xmm0
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x22d0b
movsd -0x28(%rbp), %xmm0
subsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x22d0b
movsd -0x28(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x22d0b
movsd -0x30(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x22ab9
jp 0x22ab9
movsd -0x28(%rbp), %xmm2
xorps %xmm1, %xmm1
movss 0x14e38(%rip), %xmm0    # 0x378b0
movss 0x14e34(%rip), %xmm3    # 0x378b4
movss %xmm3, -0xa8(%rbp)
ucomisd %xmm2, %xmm1
movss %xmm0, -0xa4(%rbp)
ja 0x22aa6
movss -0xa8(%rbp), %xmm0
movss %xmm0, -0xa4(%rbp)
movss -0xa4(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x22ac8
movsd -0x28(%rbp), %xmm0
divsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x38(%rbp)
jmp 0x22d0b
movsd -0x28(%rbp), %xmm1
movsd -0x30(%rbp), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movsd -0x28(%rbp), %xmm0
ucomisd -0x30(%rbp), %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movsd -0x28(%rbp), %xmm1
movsd -0x30(%rbp), %xmm0
ucomisd %xmm1, %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movsd -0x28(%rbp), %xmm0
ucomisd -0x30(%rbp), %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movsd -0x28(%rbp), %xmm0
ucomisd -0x30(%rbp), %xmm0
sete %al
setnp %cl
andb %cl, %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
movsd -0x28(%rbp), %xmm0
ucomisd -0x30(%rbp), %xmm0
setne %al
setp %cl
orb %cl, %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
jmp 0x22c5d
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x60(%rbp), %rdx
xorl %ecx, %ecx
callq 0xcf40
movl %eax, -0x7c(%rbp)
movq -0x18(%rbp), %rax
movl (%rax), %eax
addl $-0x1d, %eax
movl %eax, %ecx
movq %rcx, -0xb0(%rbp)
subl $0x5, %eax
ja 0x22c5b
movq -0xb0(%rbp), %rax
leaq 0x14467(%rip), %rcx     # 0x37038
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, -0x7c(%rbp)
setl %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpl $0x0, -0x7c(%rbp)
setg %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpl $0x0, -0x7c(%rbp)
setle %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpl $0x0, -0x7c(%rbp)
setge %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpl $0x0, -0x7c(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
cmpl $0x0, -0x7c(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x50(%rbp)
jmp 0x22cad
jmp 0x22c5d
movl $0x1, -0x1c(%rbp)
movq -0x58(%rbp), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22c83
movq -0x10(%rbp), %rdi
movq -0x58(%rbp), %rsi
callq 0x7a10
movq -0x60(%rbp), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22ca2
movq -0x10(%rbp), %rdi
movq -0x60(%rbp), %rsi
callq 0x7a10
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x22d6a
jmp 0x22caf
movq -0x10(%rbp), %rdi
movq -0x50(%rbp), %rsi
callq 0x8d60
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22cf8
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x88(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x22c64
jmp 0x22d0d
movq -0x10(%rbp), %rdi
movsd -0x38(%rbp), %xmm0
callq 0xfbe0
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movl 0x10(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x10(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movl 0x10(%rcx), %eax
addl $-0x1, %eax
movl %eax, 0x10(%rcx)
cmpl $0x0, %eax
jg 0x22d57
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0x7a10
movq -0x90(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
jmp 0x22c64
movl -0x4(%rbp), %eax
addq $0xb0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)