// File: /workspace/github_c_makefile_star2_O0/afi-lambda[P]a_little_smalltalk/src/primitive.c
// Function: floatBinary
static object floatBinary(int number, double first, double second)
{
    boolean binResult;
    object returnedObject;

    switch (number)
    {
    case 0:
        first += second;
        break;

    case 1:
        first -= second;
        break;
    case 2:
        binResult = (first < second);
        break;
    case 3:
        binResult = (first > second);
        break;
    case 4:
        binResult = (first <= second);
        break;
    case 5:
        binResult = (first >= second);
        break;
    case 6:
        binResult = (first == second);
        break;
    case 7:
        binResult = (first != second);
        break;
    case 8:
        first *= second;
        break;
    case 9:
        first /= second;
        break;
    default:
        sysError("unknown primitive", "floatBinary");
        break;
    }

    if ((number >= 2) && (number <= 7))
        if (binResult)
            returnedObject = trueobj;
        else
            returnedObject = falseobj;
    else
        returnedObject = newFloat(first);
    return (returnedObject);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl %edi, -0x4(%rbp)
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movl -0x4(%rbp), %eax
movq %rax, -0x28(%rbp)
subq $0x9, %rax
ja 0x7fc1
movq -0x28(%rbp), %rax
leaq 0x4797(%rip), %rcx      # 0xc658
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsd -0x18(%rbp), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0x7fd4
movsd -0x18(%rbp), %xmm1
movsd -0x10(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm1
movsd -0x18(%rbp), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm0
ucomisd -0x18(%rbp), %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm1
movsd -0x18(%rbp), %xmm0
ucomisd %xmm1, %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm0
ucomisd -0x18(%rbp), %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm0
ucomisd -0x18(%rbp), %xmm0
sete %al
setnp %cl
andb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x10(%rbp), %xmm0
ucomisd -0x18(%rbp), %xmm0
setne %al
setp %cl
orb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x1c(%rbp)
jmp 0x7fd4
movsd -0x18(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0x7fd4
movsd -0x18(%rbp), %xmm1
movsd -0x10(%rbp), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
jmp 0x7fd4
leaq 0x44f7(%rip), %rdi      # 0xc4bf
leaq 0x47fa(%rip), %rsi      # 0xc7c9
callq 0x63f0
cmpl $0x2, -0x4(%rbp)
jl 0x8006
cmpl $0x7, -0x4(%rbp)
jg 0x8006
cmpl $0x0, -0x1c(%rbp)
je 0x7ff6
leaq 0x22005(%rip), %rax     # 0x29ff2
movw (%rax), %ax
movw %ax, -0x1e(%rbp)
jmp 0x8004
leaq 0x21ff7(%rip), %rax     # 0x29ff4
movw (%rax), %ax
movw %ax, -0x1e(%rbp)
jmp 0x8014
movsd -0x10(%rbp), %xmm0
callq 0x4330
movw %ax, -0x1e(%rbp)
movw -0x1e(%rbp), %ax
addq $0x30, %rsp
popq %rbp
retq
nop