// File: mouda[P]LTE_random_access-simulate/alglibinternal.cpp
// Function: alglib_impl::saferdiv(double, double, double*, alglib_impl::ae_state*)
ae_int_t saferdiv(double x, double y, double* r, ae_state *_state)
{
    ae_int_t result;

    *r = 0;

    
    /*
     * Two special cases:
     * * Y=0
     * * X=0 and Y<>0
     */
    if( ae_fp_eq(y,0) )
    {
        result = 1;
        if( ae_fp_eq(x,0) )
        {
            *r = _state->v_nan;
        }
        if( ae_fp_greater(x,0) )
        {
            *r = _state->v_posinf;
        }
        if( ae_fp_less(x,0) )
        {
            *r = _state->v_neginf;
        }
        return result;
    }
    if( ae_fp_eq(x,0) )
    {
        *r = 0;
        result = 0;
        return result;
    }
    
    /*
     * make Y>0
     */
    if( ae_fp_less(y,0) )
    {
        x = -x;
        y = -y;
    }
    
    /*
     *
     */
    if( ae_fp_greater_eq(y,1) )
    {
        *r = x/y;
        if( ae_fp_less_eq(ae_fabs(*r, _state),ae_minrealnumber) )
        {
            result = -1;
            *r = 0;
        }
        else
        {
            result = 0;
        }
    }
    else
    {
        if( ae_fp_greater_eq(ae_fabs(x, _state),ae_maxrealnumber*y) )
        {
            if( ae_fp_greater(x,0) )
            {
                *r = _state->v_posinf;
            }
            else
            {
                *r = _state->v_neginf;
            }
            result = 1;
        }
        else
        {
            *r = x/y;
            result = 0;
        }
    }
    return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movq %rdi, -0x20(%rbp)
movq %rsi, -0x28(%rbp)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movsd -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c3d0
testb $0x1, %al
jne 0x1ef0b
jmp 0x1ef8c
movq $0x1, -0x30(%rbp)
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c3d0
testb $0x1, %al
jne 0x1ef26
jmp 0x1ef37
movq -0x28(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x1ef4a
jmp 0x1ef5b
movq -0x28(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x1ef6e
jmp 0x1ef7f
movq -0x28(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1f10f
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c3d0
testb $0x1, %al
jne 0x1ef9f
jmp 0x1efbf
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x1f10f
movsd -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c440
testb $0x1, %al
jne 0x1efd2
jmp 0x1f014
movsd -0x10(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x10(%rbp)
movsd -0x18(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x18(%rbp), %xmm0
movsd 0x35fe7(%rip), %xmm1    # 0x55008
callq 0x3c500
testb $0x1, %al
jne 0x1f02c
jmp 0x1f084
movsd -0x10(%rbp), %xmm0
divsd -0x18(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq -0x20(%rbp), %rax
movsd (%rax), %xmm0
movq -0x28(%rbp), %rdi
callq 0x3c820
movsd 0x373d1(%rip), %xmm1    # 0x56428
callq 0x3c480
testb $0x1, %al
jne 0x1f062
jmp 0x1f077
movq $-0x1, -0x30(%rbp)
movq -0x20(%rbp), %rax
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
jmp 0x1f07f
movq $0x0, -0x30(%rbp)
jmp 0x1f107
movsd -0x10(%rbp), %xmm0
movq -0x28(%rbp), %rdi
callq 0x3c820
movsd 0x3670e(%rip), %xmm1    # 0x557a8
mulsd -0x18(%rbp), %xmm1
callq 0x3c500
testb $0x1, %al
jne 0x1f0aa
jmp 0x1f0eb
movsd -0x10(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c4c0
testb $0x1, %al
jne 0x1f0bd
jmp 0x1f0d0
movq -0x28(%rbp), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
jmp 0x1f0e1
movq -0x28(%rbp), %rax
movsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq $0x1, -0x30(%rbp)
jmp 0x1f105
movsd -0x10(%rbp), %xmm0
divsd -0x18(%rbp), %xmm0
movq -0x20(%rbp), %rax
movsd %xmm0, (%rax)
movq $0x0, -0x30(%rbp)
jmp 0x1f107
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)