// File: /workspace/github_c_makefile_star2_O3/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 0xb2376
cmpl $0xd, %ecx
je 0xb241c
cmpl $0xc, %ecx
je 0xb23da
cmpl $0xb, %ecx
jne 0xb23a1
movq 0x8(%rsi), %rax
xorl %ecx, %ecx
cmpq 0x8(%rdx), %rax
setle %cl
movq 0x118(%rbx,%rcx,8), %rax
jmp 0xb2433
cmpl $0xd, %ecx
je 0xb2439
cmpl $0xc, %ecx
je 0xb23b0
cmpl $0xb, %ecx
jne 0xb23a1
cmpl $0xd, %eax
je 0xb24b3
cmpl $0xc, %eax
je 0xb23b0
cmpl $0xb, %eax
je 0xb235c
jmp 0xb2461
movq %rbx, %rdi
callq 0xb95c6
xorb $0x1, %al
movzbl %al, %eax
jmp 0xb242b
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 0x6d59d
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 0xb2428
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 0xb24a2
cmpl $0xc, %eax
je 0xb246e
cmpl $0xb, %eax
jne 0xb2461
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb24cf
cvtsi2sdq 0x8(%rdx), %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
jmp 0xb2428
movq %rbx, %rdi
callq 0xb94ca
jmp 0xb23a9
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb24cf
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 0xb2410
movsd 0x8(%rsi), %xmm0
ucomisd %xmm0, %xmm0
jnp 0xb2421
jmp 0xb24cf
movsd 0x8(%rdx), %xmm0
ucomisd %xmm0, %xmm0
jp 0xb24cf
cvtsi2sdq 0x8(%rsi), %xmm1
xorl %eax, %eax
ucomisd %xmm0, %xmm1
jmp 0xb2428
movq 0x120(%rbx), %rax
jmp 0xb2433