// File: /workspace/github_c_makefile_star2_O1/BernardTatin[P]s7sh/s7.c
// Function: g_greater_2
static s7_pointer g_greater_2(s7_scheme *sc, s7_pointer args)
    {
        /* ridiculous repetition, but overheads are killing this poor thing */
        s7_pointer x, y;
        x = car(args);
        y = cadr(args);
#if (!MS_WINDOWS)
        if (type(x) == type(y))
        {
            if (type(x) == T_INTEGER) return(make_boolean(sc, integer(x) > integer(y)));
            if (type(x) == T_REAL)	return(make_boolean(sc, real(x) > real(y)));
            if (type(x) == T_RATIO)	return(make_boolean(sc, fraction(x) > fraction(y)));
        }
#endif
        switch (type(x))
        {
            case T_INTEGER:
                switch (type(y))
                {
                    case T_INTEGER: return(make_boolean(sc, integer(x) > integer(y)));
                    case T_RATIO:   return(g_greater(sc, set_plist_2(sc, x, y)));
                    case T_REAL:    if (is_NaN(real(y))) return(sc->F); return(make_boolean(sc, integer(x) > real(y)));
                    default:        return(make_boolean(sc, gt_out_y(sc, x, y)));
                }
                break;

            case T_RATIO:       return(g_greater(sc, set_plist_2(sc, x, y)));

            case T_REAL:
                                switch (type(y))
                                {
                                    case T_INTEGER: if (is_NaN(real(x))) return(sc->F); return(make_boolean(sc, real(x) > integer(y)));
                                    case T_RATIO:   if (is_NaN(real(x))) return(sc->F); return(make_boolean(sc, real(x) > fraction(y)));
                                    case T_REAL:    if (is_NaN(real(x))) return(sc->F); return(make_boolean(sc, real(x) > real(y)));
                                    default:        return(make_boolean(sc, gt_out_y(sc, x, y)));
                                }
                                break;

            default:            return(make_boolean(sc, gt_out_x(sc, x, y)));
        }
        return(sc->T);
    }

// Assembly:
pushq %rbx
subq $0x40, %rsp
movq %rsi, %rax
movq %rdi, %rbx
movq 0x8(%rsi), %rsi
movq 0x10(%rax), %rax
movq 0x8(%rax), %rdx
movzbl (%rsi), %ecx
movzbl (%rdx), %eax
cmpb %al, %cl
jne 0xb95a5
cmpl $0xd, %ecx
je 0xb964b
cmpl $0xc, %ecx
je 0xb9609
cmpl $0xb, %ecx
jne 0xb95d0
movq 0x8(%rsi), %rax
xorl %ecx, %ecx
cmpq 0x8(%rdx), %rax
setle %cl
movq 0x118(%rbx,%rcx,8), %rax
jmp 0xb9662
cmpl $0xd, %ecx
je 0xb9668
cmpl $0xc, %ecx
je 0xb95df
cmpl $0xb, %ecx
jne 0xb95d0
cmpl $0xd, %eax
je 0xb96e2
cmpl $0xc, %eax
je 0xb95df
cmpl $0xb, %eax
je 0xb958b
jmp 0xb9690
movq %rbx, %rdi
callq 0xc128a
xorb $0x1, %al
movzbl %al, %eax
jmp 0xb965a
movq 0x708(%rbx), %rax
movq %rsi, 0x8(%rax)
movq 0x710(%rbx), %rax
movq %rdx, 0x8(%rax)
movq 0x708(%rbx), %rsi
movq %rbx, %rdi
addq $0x40, %rsp
popq %rbx
jmp 0x72d0b
movq 0x8(%rsi), %rax
movq 0x10(%rsi), %rcx
movq %rax, 0x10(%rsp)
fildll 0x10(%rsp)
movq %rcx, 0x8(%rsp)
fildll 0x8(%rsp)
fdivrp %st, %st(1)
movq 0x8(%rdx), %rax
movq 0x10(%rdx), %rcx
movq %rax, 0x20(%rsp)
fildll 0x20(%rsp)
movq %rcx, 0x18(%rsp)
fildll 0x18(%rsp)
fdivrp %st, %st(1)
xorl %eax, %eax
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jmp 0xb9657
movsd 0x8(%rsi), %xmm0
xorl %eax, %eax
ucomisd 0x8(%rdx), %xmm0
setbe %al
movq 0x118(%rbx,%rax,8), %rax
addq $0x40, %rsp
popq %rbx
retq
cmpl $0xd, %eax
je 0xb96d1
cmpl $0xc, %eax
je 0xb969d
cmpl $0xb, %eax
jne 0xb9690
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb96fe
cvtsi2sdq 0x8(%rdx), %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
jmp 0xb9657
movq %rbx, %rdi
callq 0xc118e
jmp 0xb95d8
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb96fe
movsd %xmm0, 0x28(%rsp)
fldl 0x28(%rsp)
movq 0x8(%rdx), %rax
movq 0x10(%rdx), %rcx
movq %rax, 0x38(%rsp)
fildll 0x38(%rsp)
movq %rcx, 0x30(%rsp)
fildll 0x30(%rsp)
jmp 0xb963f
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jnp 0xb9650
jmp 0xb96fe
movsd 0x8(%rdx), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb96fe
cvtsi2sdq 0x8(%rsi), %xmm1
xorl %eax, %eax
ucomisd %xmm0, %xmm1
jmp 0xb9657
movq 0x120(%rbx), %rax
jmp 0xb9662