// File: /workspace/github_c_makefile_star2_O2/debbiemarkslab[P]plmc/src/lib/lbfgs.c
// Function: update_trial_interval
static int update_trial_interval(
    lbfgsfloatval_t *x,
    lbfgsfloatval_t *fx,
    lbfgsfloatval_t *dx,
    lbfgsfloatval_t *y,
    lbfgsfloatval_t *fy,
    lbfgsfloatval_t *dy,
    lbfgsfloatval_t *t,
    lbfgsfloatval_t *ft,
    lbfgsfloatval_t *dt,
    const lbfgsfloatval_t tmin,
    const lbfgsfloatval_t tmax,
    int *brackt
    )
{
    int bound;
    int dsign = fsigndiff(dt, dx);
    lbfgsfloatval_t mc; /* minimizer of an interpolated cubic. */
    lbfgsfloatval_t mq; /* minimizer of an interpolated quadratic. */
    lbfgsfloatval_t newt;   /* new trial value. */
    USES_MINIMIZER;     /* for CUBIC_MINIMIZER and QUARD_MINIMIZER. */

    /* Check the input parameters for errors. */
    if (*brackt) {
        if (*t <= min2(*x, *y) || max2(*x, *y) <= *t) {
            /* The trival value t is out of the interval. */
            return LBFGSERR_OUTOFINTERVAL;
        }
        if (0. <= *dx * (*t - *x)) {
            /* The function must decrease from x. */
            return LBFGSERR_INCREASEGRADIENT;
        }
        if (tmax < tmin) {
            /* Incorrect tmin and tmax specified. */
            return LBFGSERR_INCORRECT_TMINMAX;
        }
    }

    /*
        Trial value selection.
     */
    if (*fx < *ft) {
        /*
            Case 1: a higher function value.
            The minimum is brackt. If the cubic minimizer is closer
            to x than the quadratic one, the cubic one is taken, else
            the average of the minimizers is taken.
         */
        *brackt = 1;
        bound = 1;
        CUBIC_MINIMIZER(mc, *x, *fx, *dx, *t, *ft, *dt);
        QUARD_MINIMIZER(mq, *x, *fx, *dx, *t, *ft);
        if (fabs(mc - *x) < fabs(mq - *x)) {
            newt = mc;
        } else {
            newt = mc + 0.5 * (mq - mc);
        }
    } else if (dsign) {
        /*
            Case 2: a lower function value and derivatives of
            opposite sign. The minimum is brackt. If the cubic
            minimizer is closer to x than the quadratic (secant) one,
            the cubic one is taken, else the quadratic one is taken.
         */
        *brackt = 1;
        bound = 0;
        CUBIC_MINIMIZER(mc, *x, *fx, *dx, *t, *ft, *dt);
        QUARD_MINIMIZER2(mq, *x, *dx, *t, *dt);
        if (fabs(mc - *t) > fabs(mq - *t)) {
            newt = mc;
        } else {
            newt = mq;
        }
    } else if (fabs(*dt) < fabs(*dx)) {
        /*
            Case 3: a lower function value, derivatives of the
            same sign, and the magnitude of the derivative decreases.
            The cubic minimizer is only used if the cubic tends to
            infinity in the direction of the minimizer or if the minimum
            of the cubic is beyond t. Otherwise the cubic minimizer is
            defined to be either tmin or tmax. The quadratic (secant)
            minimizer is also computed and if the minimum is brackt
            then the the minimizer closest to x is taken, else the one
            farthest away is taken.
         */
        bound = 1;
        CUBIC_MINIMIZER2(mc, *x, *fx, *dx, *t, *ft, *dt, tmin, tmax);
        QUARD_MINIMIZER2(mq, *x, *dx, *t, *dt);
        if (*brackt) {
            if (fabs(*t - mc) < fabs(*t - mq)) {
                newt = mc;
            } else {
                newt = mq;
            }
        } else {
            if (fabs(*t - mc) > fabs(*t - mq)) {
                newt = mc;
            } else {
                newt = mq;
            }
        }
    } else {
        /*
            Case 4: a lower function value, derivatives of the
            same sign, and the magnitude of the derivative does
            not decrease. If the minimum is not brackt, the step
            is either tmin or tmax, else the cubic minimizer is taken.
         */
        bound = 0;
        if (*brackt) {
            CUBIC_MINIMIZER(newt, *t, *ft, *dt, *y, *fy, *dy);
        } else if (*x < *t) {
            newt = tmax;
        } else {
            newt = tmin;
        }
    }

    /*
        Update the interval of uncertainty. This update does not
        depend on the new step or the case analysis above.

        - Case a: if f(x) < f(t),
            x <- x, y <- t.
        - Case b: if f(t) <= f(x) && f'(t)*f'(x) > 0,
            x <- t, y <- y.
        - Case c: if f(t) <= f(x) && f'(t)*f'(x) < 0, 
            x <- t, y <- x.
     */
    if (*fx < *ft) {
        /* Case a */
        *y = *t;
        *fy = *ft;
        *dy = *dt;
    } else {
        /* Case c */
        if (dsign) {
            *y = *x;
            *fy = *fx;
            *dy = *dx;
        }
        /* Cases b and c */
        *x = *t;
        *fx = *ft;
        *dx = *dt;
    }

    /* Clip the new trial value in [tmin, tmax]. */
    if (tmax < newt) newt = tmax;
    if (newt < tmin) newt = tmin;

    /*
        Redefine the new trial value if it is close to the upper bound
        of the interval.
     */
    if (*brackt && bound) {
        mq = *x + 0.66 * (*y - *x);
        if (*x < *y) {
            if (mq < newt) newt = mq;
        } else {
            if (newt < mq) newt = mq;
        }
    }

    /* Return the new trial value. */
    *t = newt;
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x68, %rsp
movapd %xmm1, %xmm12
movapd %xmm0, %xmm11
movq 0xb8(%rsp), %rbx
movq 0xb0(%rsp), %r10
movq 0xa0(%rsp), %r14
movsd (%r10), %xmm2
movsd (%rdx), %xmm3
movl (%rbx), %r11d
testl %r11d, %r11d
je 0x2ee8
movsd (%r14), %xmm0
movsd (%rdi), %xmm1
movsd (%rcx), %xmm4
movapd %xmm1, %xmm5
cmplesd %xmm4, %xmm5
movapd %xmm5, %xmm6
andpd %xmm1, %xmm6
andnpd %xmm4, %xmm5
orpd %xmm6, %xmm5
movl $0xfffffc15, %eax       # imm = 0xFFFFFC15
ucomisd %xmm0, %xmm5
jae 0x37aa
movapd %xmm4, %xmm5
cmplesd %xmm1, %xmm5
movapd %xmm5, %xmm6
andpd %xmm1, %xmm6
andnpd %xmm4, %xmm5
orpd %xmm6, %xmm5
ucomisd %xmm5, %xmm0
jae 0x37aa
subsd %xmm1, %xmm0
mulsd %xmm3, %xmm0
movl $0xfffffc1e, %eax       # imm = 0xFFFFFC1E
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jae 0x37aa
movl $0xfffffc16, %eax       # imm = 0xFFFFFC16
ucomisd %xmm12, %xmm11
ja 0x37aa
movq 0xa8(%rsp), %r15
movapd 0x91b8(%rip), %xmm4     # 0xc0b0
andpd %xmm3, %xmm4
movapd %xmm3, %xmm13
divsd %xmm4, %xmm13
mulsd %xmm2, %xmm13
movsd (%rsi), %xmm14
movsd (%r15), %xmm7
ucomisd %xmm14, %xmm7
jbe 0x2fdc
movl $0x1, (%rbx)
movsd (%r14), %xmm8
subsd (%rdi), %xmm8
subsd %xmm7, %xmm14
mulsd 0x9152(%rip), %xmm14    # 0xc090
divsd %xmm8, %xmm14
addsd %xmm3, %xmm14
addsd %xmm2, %xmm14
movapd 0x915b(%rip), %xmm6     # 0xc0b0
movapd %xmm14, %xmm0
andpd %xmm6, %xmm0
movapd %xmm2, %xmm1
andpd %xmm6, %xmm1
movapd %xmm4, %xmm5
cmplesd %xmm0, %xmm5
andpd %xmm5, %xmm0
andnpd %xmm4, %xmm5
orpd %xmm0, %xmm5
movapd %xmm1, %xmm4
cmplesd %xmm5, %xmm4
movapd %xmm4, %xmm0
andpd %xmm5, %xmm0
andnpd %xmm1, %xmm4
orpd %xmm0, %xmm4
movapd %xmm14, %xmm0
xorpd 0x90ff(%rip), %xmm3     # 0xc0a0
divsd %xmm4, %xmm0
unpcklpd %xmm2, %xmm3            # xmm3 = xmm3[0],xmm2[0]
movddup %xmm4, %xmm1            # xmm1 = xmm4[0,0]
divpd %xmm1, %xmm3
movapd %xmm3, %xmm1
unpckhpd %xmm3, %xmm1            # xmm1 = xmm1[1],xmm3[1]
mulsd %xmm3, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x30a3
sqrtsd %xmm0, %xmm0
jmp 0x3144
xorpd %xmm1, %xmm1
ucomisd %xmm13, %xmm1
jbe 0x3204
movl $0x1, (%rbx)
movsd (%r14), %xmm8
subsd %xmm7, %xmm14
mulsd 0x908c(%rip), %xmm14    # 0xc090
movapd 0x90a4(%rip), %xmm0     # 0xc0b0
movapd %xmm2, %xmm6
andpd %xmm0, %xmm6
movapd 0x9084(%rip), %xmm5     # 0xc0a0
xorpd %xmm3, %xmm5
unpcklpd %xmm2, %xmm5            # xmm5 = xmm5[0],xmm2[0]
subsd (%rdi), %xmm8
divsd %xmm8, %xmm14
addsd %xmm3, %xmm14
addsd %xmm2, %xmm14
andpd %xmm14, %xmm0
movapd %xmm4, %xmm2
cmplesd %xmm0, %xmm2
andpd %xmm2, %xmm0
andnpd %xmm4, %xmm2
orpd %xmm0, %xmm2
movapd %xmm6, %xmm3
cmplesd %xmm2, %xmm3
movapd %xmm3, %xmm0
andpd %xmm2, %xmm0
andnpd %xmm6, %xmm3
orpd %xmm0, %xmm3
movapd %xmm14, %xmm0
divsd %xmm3, %xmm0
movddup %xmm3, %xmm2            # xmm2 = xmm3[0,0]
divpd %xmm2, %xmm5
movapd %xmm5, %xmm2
unpckhpd %xmm5, %xmm2            # xmm2 = xmm2[1],xmm5[1]
mulsd %xmm5, %xmm2
mulsd %xmm0, %xmm0
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x335d
sqrtsd %xmm0, %xmm0
jmp 0x33f6
movapd %xmm11, 0x50(%rsp)
movapd %xmm12, 0x40(%rsp)
movq %rcx, %r12
movq %rsi, %rbx
movq %rdi, %rbp
movq %r9, %r15
movq %rdx, %r14
movq %r8, %r13
movapd %xmm13, 0x30(%rsp)
movapd %xmm14, 0x20(%rsp)
movsd %xmm8, 0x10(%rsp)
movapd %xmm4, (%rsp)
callq 0x1210
movapd (%rsp), %xmm4
movsd 0x10(%rsp), %xmm8
movapd 0x8fba(%rip), %xmm6     # 0xc0b0
movapd 0x20(%rsp), %xmm14
movapd 0x30(%rsp), %xmm13
movq %r13, %r8
movq %r14, %rdx
movq %r15, %r9
movq 0xa8(%rsp), %r15
movq %rbp, %rdi
movq %rbx, %rsi
movq %r12, %rcx
movq 0xb0(%rsp), %r10
movq 0xb8(%rsp), %rbx
movapd 0x40(%rsp), %xmm12
movq 0xa0(%rsp), %r14
movapd 0x50(%rsp), %xmm11
mulsd %xmm4, %xmm0
movsd (%r14), %xmm1
movsd (%rdi), %xmm2
movapd 0x8f47(%rip), %xmm3     # 0xc0a0
xorpd %xmm0, %xmm3
movapd %xmm1, %xmm4
cmpltsd %xmm2, %xmm4
andpd %xmm4, %xmm3
andnpd %xmm0, %xmm4
orpd %xmm3, %xmm4
movsd (%rdx), %xmm0
movapd %xmm4, %xmm3
subsd %xmm0, %xmm3
addsd %xmm3, %xmm14
addsd %xmm4, %xmm3
addsd (%r10), %xmm3
divsd %xmm3, %xmm14
mulsd %xmm8, %xmm14
movapd %xmm1, %xmm3
subsd %xmm2, %xmm3
movsd (%rsi), %xmm4
subsd (%r15), %xmm4
divsd %xmm3, %xmm4
addsd %xmm0, %xmm4
divsd %xmm4, %xmm0
mulsd 0x8e95(%rip), %xmm0     # 0xc050
addsd %xmm2, %xmm14
mulsd %xmm3, %xmm0
addsd %xmm2, %xmm0
movapd %xmm14, %xmm3
subsd %xmm2, %xmm3
andpd %xmm6, %xmm3
movapd %xmm0, %xmm4
subsd %xmm2, %xmm4
andpd %xmm6, %xmm4
movb $0x1, %al
ucomisd %xmm3, %xmm4
ja 0x3701
subsd %xmm14, %xmm0
mulsd 0x8e56(%rip), %xmm0     # 0xc050
addsd %xmm0, %xmm14
jmp 0x3701
movapd 0x8ea4(%rip), %xmm6     # 0xc0b0
andpd %xmm2, %xmm6
ucomisd %xmm6, %xmm4
movsd (%r14), %xmm1
jbe 0x34ad
movsd (%rdi), %xmm0
movapd %xmm1, %xmm5
subsd %xmm7, %xmm14
mulsd 0x8e5b(%rip), %xmm14    # 0xc090
subsd %xmm0, %xmm5
divsd %xmm5, %xmm14
addsd %xmm3, %xmm14
addsd %xmm2, %xmm14
movapd 0x8e60(%rip), %xmm7     # 0xc0b0
andpd %xmm14, %xmm7
movapd %xmm4, %xmm9
cmplesd %xmm7, %xmm9
andpd %xmm9, %xmm7
andnpd %xmm4, %xmm9
orpd %xmm7, %xmm9
movapd %xmm6, %xmm8
cmplesd %xmm9, %xmm8
movapd %xmm8, %xmm4
andpd %xmm9, %xmm4
andnpd %xmm6, %xmm8
orpd %xmm4, %xmm8
movapd %xmm14, %xmm4
divsd %xmm8, %xmm4
movapd 0x8e00(%rip), %xmm7     # 0xc0a0
movapd %xmm3, %xmm6
xorpd %xmm7, %xmm6
unpcklpd %xmm2, %xmm6            # xmm6 = xmm6[0],xmm2[0]
movddup %xmm8, %xmm9            # xmm9 = xmm8[0,0]
divpd %xmm9, %xmm6
movapd %xmm6, %xmm9
unpckhpd %xmm6, %xmm9            # xmm9 = xmm9[1],xmm6[1]
mulsd %xmm6, %xmm9
movapd %xmm4, %xmm10
mulsd %xmm4, %xmm10
addsd %xmm9, %xmm10
xorpd %xmm6, %xmm6
movapd %xmm10, %xmm9
cmplesd %xmm6, %xmm9
andnpd %xmm10, %xmm9
sqrtsd %xmm9, %xmm9
mulsd %xmm8, %xmm9
xorpd %xmm9, %xmm7
ucomisd %xmm7, %xmm9
jne 0x3304
jnp 0x3565
movapd %xmm0, %xmm8
cmpltsd %xmm1, %xmm8
movapd %xmm8, %xmm10
andnpd %xmm9, %xmm10
andpd %xmm7, %xmm8
orpd %xmm10, %xmm8
movapd %xmm8, %xmm7
subsd %xmm2, %xmm7
addsd %xmm7, %xmm14
addsd %xmm8, %xmm7
addsd %xmm3, %xmm7
divsd %xmm7, %xmm14
ucomisd %xmm14, %xmm6
jbe 0x3565
mulsd %xmm5, %xmm14
movapd %xmm1, %xmm4
subsd %xmm14, %xmm4
jmp 0x357c
movapd %xmm11, 0x50(%rsp)
movapd %xmm12, 0x40(%rsp)
movq %rcx, %r12
movq %rsi, %r13
movq %rdi, %r14
movq %r9, %r15
movq %rdx, %rbx
movq %r8, %rbp
movapd %xmm13, 0x30(%rsp)
movapd %xmm14, 0x20(%rsp)
movapd %xmm8, 0x10(%rsp)
movapd %xmm3, (%rsp)
callq 0x1210
movapd (%rsp), %xmm3
movapd 0x10(%rsp), %xmm8
movapd 0x20(%rsp), %xmm14
movapd 0x30(%rsp), %xmm13
movq %rbp, %r8
movq %rbx, %rdx
movq %r15, %r9
movq 0xa8(%rsp), %r15
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rcx
movq 0xb0(%rsp), %r10
movq 0xb8(%rsp), %rbx
movapd 0x40(%rsp), %xmm12
movq 0xa0(%rsp), %r14
movapd 0x50(%rsp), %xmm11
mulsd %xmm3, %xmm0
movsd (%r14), %xmm1
movsd (%rdi), %xmm2
movapd 0x8c95(%rip), %xmm3     # 0xc0a0
xorpd %xmm0, %xmm3
movapd %xmm1, %xmm4
cmpltsd %xmm2, %xmm4
andpd %xmm4, %xmm3
andnpd %xmm0, %xmm4
orpd %xmm3, %xmm4
movsd (%rdx), %xmm0
movapd %xmm4, %xmm3
subsd %xmm0, %xmm3
addsd %xmm3, %xmm14
addsd %xmm4, %xmm3
movsd (%r10), %xmm4
addsd %xmm4, %xmm3
movapd %xmm2, %xmm5
subsd %xmm1, %xmm5
unpcklpd %xmm4, %xmm14           # xmm14 = xmm14[0],xmm4[0]
subsd %xmm0, %xmm4
unpcklpd %xmm4, %xmm3            # xmm3 = xmm3[0],xmm4[0]
divpd %xmm3, %xmm14
unpcklpd %xmm5, %xmm8            # xmm8 = xmm8[0],xmm5[0]
mulpd %xmm14, %xmm8
unpcklpd %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0]
addpd %xmm8, %xmm2
movddup %xmm1, %xmm0            # xmm0 = xmm1[0,0]
movapd %xmm2, %xmm3
subpd %xmm0, %xmm3
andpd 0x8c2d(%rip), %xmm3     # 0xc0b0
pshufd $0xee, %xmm3, %xmm14    # xmm14 = xmm3[2,3,2,3]
cmpltsd %xmm3, %xmm14
movapd %xmm14, %xmm0
andpd %xmm2, %xmm0
unpckhpd %xmm2, %xmm2            # xmm2 = xmm2[1,1]
andnpd %xmm2, %xmm14
orpd %xmm0, %xmm14
xorl %eax, %eax
jmp 0x3701
testl %r11d, %r11d
je 0x35d8
movsd (%rcx), %xmm5
subsd %xmm1, %xmm5
subsd (%r8), %xmm7
mulsd 0x8bc5(%rip), %xmm7     # 0xc090
divsd %xmm5, %xmm7
addsd %xmm2, %xmm7
movsd (%r9), %xmm1
addsd %xmm1, %xmm7
movapd 0x8bcc(%rip), %xmm0     # 0xc0b0
movapd %xmm7, %xmm3
andpd %xmm0, %xmm3
andpd %xmm1, %xmm0
movapd %xmm6, %xmm4
cmplesd %xmm3, %xmm4
andpd %xmm4, %xmm3
andnpd %xmm6, %xmm4
orpd %xmm3, %xmm4
movapd %xmm0, %xmm6
cmplesd %xmm4, %xmm6
movapd %xmm6, %xmm3
andpd %xmm4, %xmm3
andnpd %xmm0, %xmm6
orpd %xmm3, %xmm6
movapd %xmm7, %xmm0
xorpd 0x8b76(%rip), %xmm2     # 0xc0a0
divsd %xmm6, %xmm0
unpcklpd %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0]
movddup %xmm6, %xmm1            # xmm1 = xmm6[0,0]
divpd %xmm1, %xmm2
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
mulsd %xmm2, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x3615
sqrtsd %xmm0, %xmm0
jmp 0x36aa
cmpltsd %xmm6, %xmm4
movapd %xmm4, %xmm5
andpd %xmm12, %xmm5
andnpd %xmm11, %xmm4
orpd %xmm5, %xmm4
subsd %xmm1, %xmm0
movapd %xmm2, %xmm5
subsd %xmm3, %xmm5
divsd %xmm5, %xmm2
mulsd %xmm0, %xmm2
addsd %xmm1, %xmm2
movapd %xmm1, %xmm14
subsd %xmm4, %xmm14
movapd 0x8b0a(%rip), %xmm3     # 0xc0b0
andpd %xmm3, %xmm14
movapd %xmm1, %xmm0
subsd %xmm2, %xmm0
andpd %xmm3, %xmm0
testl %r11d, %r11d
je 0x35f7
cmpltsd %xmm0, %xmm14
andpd %xmm14, %xmm4
andnpd %xmm2, %xmm14
orpd %xmm4, %xmm14
movb $0x1, %al
jmp 0x3701
movsd (%rdi), %xmm14
cmpltsd %xmm1, %xmm14
movapd %xmm14, %xmm0
andpd %xmm12, %xmm0
andnpd %xmm11, %xmm14
jmp 0x34a1
cmpltsd %xmm14, %xmm0
andpd %xmm0, %xmm4
andnpd %xmm2, %xmm0
orpd %xmm4, %xmm0
movb $0x1, %al
movapd %xmm0, %xmm14
jmp 0x3701
movapd %xmm11, 0x50(%rsp)
movapd %xmm12, 0x40(%rsp)
movq %rcx, %r12
movq %rsi, %r13
movq %rdi, %r14
movq %r9, %r15
movq %rdx, %rbx
movq %r8, %rbp
movapd %xmm13, 0x30(%rsp)
movapd %xmm7, 0x20(%rsp)
movsd %xmm5, 0x10(%rsp)
movapd %xmm6, (%rsp)
callq 0x1210
movapd (%rsp), %xmm6
movsd 0x10(%rsp), %xmm5
movapd 0x20(%rsp), %xmm7
movapd 0x30(%rsp), %xmm13
movq %rbp, %r8
movq %rbx, %rdx
movq %r15, %r9
movq 0xa8(%rsp), %r15
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rcx
movq 0xb0(%rsp), %r10
movq 0xb8(%rsp), %rbx
movapd 0x40(%rsp), %xmm12
movq 0xa0(%rsp), %r14
movapd 0x50(%rsp), %xmm11
mulsd %xmm6, %xmm0
movsd (%rcx), %xmm2
movsd (%r14), %xmm1
movapd 0x89e1(%rip), %xmm3     # 0xc0a0
xorpd %xmm0, %xmm3
cmpltsd %xmm1, %xmm2
andpd %xmm2, %xmm3
andnpd %xmm0, %xmm2
orpd %xmm3, %xmm2
movsd (%r10), %xmm0
movapd %xmm2, %xmm3
subsd %xmm0, %xmm3
addsd %xmm3, %xmm7
addsd %xmm2, %xmm3
addsd (%r9), %xmm3
divsd %xmm3, %xmm7
mulsd %xmm5, %xmm7
addsd %xmm1, %xmm7
xorl %eax, %eax
movapd %xmm7, %xmm14
movsd (%r15), %xmm0
ucomisd (%rsi), %xmm0
jbe 0x3718
movsd %xmm1, (%rcx)
movq %r8, %rsi
movq %r9, %rdx
jmp 0x3746
xorpd %xmm0, %xmm0
ucomisd %xmm13, %xmm0
jbe 0x3742
movsd (%rdi), %xmm0
movsd %xmm0, (%rcx)
movsd (%rsi), %xmm0
movsd %xmm0, (%r8)
movsd (%rdx), %xmm0
movsd %xmm0, (%r9)
movsd (%r14), %xmm1
movsd %xmm1, (%rdi)
movsd (%r15), %xmm0
movsd %xmm0, (%rsi)
movsd (%r10), %xmm0
movsd %xmm0, (%rdx)
minsd %xmm14, %xmm12
cmpl $0x0, (%rbx)
maxsd %xmm12, %xmm11
sete %sil
xorb $0x1, %al
orb %sil, %al
jne 0x37a3
movsd (%rdi), %xmm1
movsd (%rcx), %xmm0
ucomisd %xmm1, %xmm0
subsd %xmm1, %xmm0
mulsd 0x88f8(%rip), %xmm0     # 0xc080
addsd %xmm1, %xmm0
jbe 0x3797
ucomisd %xmm0, %xmm11
ja 0x379e
jmp 0x37a3
ucomisd %xmm11, %xmm0
jbe 0x37a3
movapd %xmm0, %xmm11
movsd %xmm11, (%r14)
xorl %eax, %eax
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax)