// File: /workspace/github_cpp_makefile_star2_O1/redpony[P]libpopt/./lbfgs.h
// Function: scitbx::lbfgs::detail::mcsrch<double, unsigned long>::mcstep(double&, double&, double&, double&, double&, double&, double&, double, double, bool&, double, double)
int mcsrch<FloatType, SizeType>::mcstep(
      FloatType& stx,
      FloatType& fx,
      FloatType& dx,
      FloatType& sty,
      FloatType& fy,
      FloatType& dy,
      FloatType& stp,
      FloatType fp,
      FloatType dp,
      bool& brackt,
      FloatType stpmin,
      FloatType stpmax)
    {
      bool bound;
      FloatType gamma, p, q, r, s, sgnd, stpc, stpf, stpq, theta;
      int info = 0;
      if (   (   brackt && (stp <= std::min(stx, sty)
              || stp >= std::max(stx, sty)))
          || dx * (stp - stx) >= FloatType(0) || stpmax < stpmin) {
        return 0;
      }
      // Determine if the derivatives have opposite sign.
      sgnd = dp * (dx / abs(dx));
      if (fp > fx) {
        // First case. A higher function value.
        // The minimum is bracketed. If the cubic step is closer
        // to stx than the quadratic step, the cubic step is taken,
        // else the average of the cubic and quadratic steps is taken.
        info = 1;
        bound = true;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(pow2(theta / s) - (dx / s) * (dp / s));
        if (stp < stx) gamma = - gamma;
        p = (gamma - dx) + theta;
        q = ((gamma - dx) + gamma) + dp;
        r = p/q;
        stpc = stx + r * (stp - stx);
        stpq = stx
          + ((dx / ((fx - fp) / (stp - stx) + dx)) / FloatType(2))
            * (stp - stx);
        if (abs(stpc - stx) < abs(stpq - stx)) {
          stpf = stpc;
        }
        else {
          stpf = stpc + (stpq - stpc) / FloatType(2);
        }
        brackt = true;
      }
      else if (sgnd < FloatType(0)) {
        // Second case. A lower function value and derivatives of
        // opposite sign. The minimum is bracketed. If the cubic
        // step is closer to stx than the quadratic (secant) step,
        // the cubic step is taken, else the quadratic step is taken.
        info = 2;
        bound = false;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(pow2(theta / s) - (dx / s) * (dp / s));
        if (stp > stx) gamma = - gamma;
        p = (gamma - dp) + theta;
        q = ((gamma - dp) + gamma) + dx;
        r = p/q;
        stpc = stp + r * (stx - stp);
        stpq = stp + (dp / (dp - dx)) * (stx - stp);
        if (abs(stpc - stp) > abs(stpq - stp)) {
          stpf = stpc;
        }
        else {
          stpf = stpq;
        }
        brackt = true;
      }
      else if (abs(dp) < abs(dx)) {
        // Third case. A lower function value, derivatives of the
        // same sign, and the magnitude of the derivative decreases.
        // The cubic step is only used if the cubic tends to infinity
        // in the direction of the step or if the minimum of the cubic
        // is beyond stp. Otherwise the cubic step is defined to be
        // either stpmin or stpmax. The quadratic (secant) step is also
        // computed and if the minimum is bracketed then the the step
        // closest to stx is taken, else the step farthest away is taken.
        info = 3;
        bound = true;
        theta = FloatType(3) * (fx - fp) / (stp - stx) + dx + dp;
        s = max3(abs(theta), abs(dx), abs(dp));
        gamma = s * std::sqrt(
          std::max(FloatType(0), pow2(theta / s) - (dx / s) * (dp / s)));
        if (stp > stx) gamma = -gamma;
        p = (gamma - dp) + theta;
        q = (gamma + (dx - dp)) + gamma;
        r = p/q;
        if (r < FloatType(0) && gamma != FloatType(0)) {
          stpc = stp + r * (stx - stp);
        }
        else if (stp > stx) {
          stpc = stpmax;
        }
        else {
          stpc = stpmin;
        }
        stpq = stp + (dp / (dp - dx)) * (stx - stp);
        if (brackt) {
          if (abs(stp - stpc) < abs(stp - stpq)) {
            stpf = stpc;
          }
          else {
            stpf = stpq;
          }
        }
        else {
          if (abs(stp - stpc) > abs(stp - stpq)) {
            stpf = stpc;
          }
          else {
            stpf = stpq;
          }
        }
      }
      else {
        // Fourth case. A lower function value, derivatives of the
        // same sign, and the magnitude of the derivative does
        // not decrease. If the minimum is not bracketed, the step
        // is either stpmin or stpmax, else the cubic step is taken.
        info = 4;
        bound = false;
        if (brackt) {
          theta = FloatType(3) * (fp - fy) / (sty - stp) + dy + dp;
          s = max3(abs(theta), abs(dy), abs(dp));
          gamma = s * std::sqrt(pow2(theta / s) - (dy / s) * (dp / s));
          if (stp > sty) gamma = -gamma;
          p = (gamma - dp) + theta;
          q = ((gamma - dp) + gamma) + dy;
          r = p/q;
          stpc = stp + r * (sty - stp);
          stpf = stpc;
        }
        else if (stp > stx) {
          stpf = stpmax;
        }
        else {
          stpf = stpmin;
        }
      }
      // Update the interval of uncertainty. This update does not
      // depend on the new step or the case analysis above.
      if (fp > fx) {
        sty = stp;
        fy = fp;
        dy = dp;
      }
      else {
        if (sgnd < FloatType(0)) {
          sty = stx;
          fy = fx;
          dy = dx;
        }
        stx = stp;
        fx = fp;
        dx = dp;
      }
      // Compute the new step and safeguard it.
      stpf = std::min(stpmax, stpf);
      stpf = std::max(stpmin, stpf);
      stp = stpf;
      if (brackt && bound) {
        if (sty > stx) {
          stp = std::min(stx + FloatType(0.66) * (sty - stx), stp);
        }
        else {
          stp = std::max(stx + FloatType(0.66) * (sty - stx), stp);
        }
      }
      return info;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movapd %xmm3, %xmm8
movapd %xmm2, %xmm7
movapd %xmm1, %xmm9
movapd %xmm0, %xmm10
movq %rcx, %rbx
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %r14
movq 0xc8(%rsp), %rsi
movq 0xc0(%rsp), %rdi
movb (%rsi), %cl
cmpb $0x1, %cl
jne 0x7bbf
movsd (%rdi), %xmm0
movsd (%rbx), %xmm1
movsd (%r14), %xmm2
movapd %xmm1, %xmm3
minsd %xmm2, %xmm3
xorl %eax, %eax
ucomisd %xmm0, %xmm3
jae 0x841f
ucomisd %xmm2, %xmm1
movq %r14, %rdx
cmovaq %rbx, %rdx
ucomisd (%rdx), %xmm0
jae 0x841f
xorl %eax, %eax
ucomisd %xmm8, %xmm7
ja 0x841f
movsd (%r15), %xmm12
movsd (%rdi), %xmm4
movsd (%r14), %xmm1
movapd %xmm4, %xmm3
subsd %xmm1, %xmm3
movapd %xmm12, %xmm0
mulsd %xmm3, %xmm0
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm0
jae 0x841f
movapd 0x142f(%rip), %xmm0     # 0x9030
xorpd %xmm12, %xmm0
movapd %xmm0, %xmm2
maxsd %xmm12, %xmm2
movapd %xmm12, %xmm11
divsd %xmm2, %xmm11
mulsd %xmm9, %xmm11
movsd (%r12), %xmm5
ucomisd %xmm5, %xmm10
jbe 0x7ca5
subsd %xmm10, %xmm5
mulsd 0x17e8(%rip), %xmm5     # 0x9420
divsd %xmm3, %xmm5
addsd %xmm5, %xmm12
addsd %xmm9, %xmm12
movapd %xmm12, %xmm1
unpcklpd %xmm9, %xmm1            # xmm1 = xmm1[0],xmm9[0]
movapd 0x13d8(%rip), %xmm5     # 0x9030
xorpd %xmm1, %xmm5
maxpd %xmm1, %xmm5
maxsd %xmm5, %xmm2
unpckhpd %xmm5, %xmm5            # xmm5 = xmm5[1,1]
maxsd %xmm2, %xmm5
movapd %xmm12, %xmm1
divsd %xmm5, %xmm1
mulsd %xmm1, %xmm1
movapd %xmm9, %xmm2
divsd %xmm5, %xmm2
divsd %xmm5, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x7d2f
sqrtsd %xmm0, %xmm0
jmp 0x7dae
xorpd %xmm6, %xmm6
ucomisd %xmm11, %xmm6
jbe 0x7e89
subsd %xmm10, %xmm5
mulsd 0x175f(%rip), %xmm5     # 0x9420
divsd %xmm3, %xmm5
addsd %xmm5, %xmm12
addsd %xmm9, %xmm12
unpcklpd %xmm9, %xmm13           # xmm13 = xmm13[0],xmm9[0]
movapd %xmm12, %xmm1
unpcklpd %xmm9, %xmm1            # xmm1 = xmm1[0],xmm9[0]
movapd 0x134a(%rip), %xmm5     # 0x9030
xorpd %xmm1, %xmm5
maxpd %xmm1, %xmm5
maxsd %xmm5, %xmm2
unpckhpd %xmm5, %xmm5            # xmm5 = xmm5[1,1]
maxsd %xmm2, %xmm5
movapd %xmm12, %xmm1
divsd %xmm5, %xmm1
mulsd %xmm1, %xmm1
movapd %xmm9, %xmm2
divsd %xmm5, %xmm2
divsd %xmm5, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
ucomisd %xmm6, %xmm0
jb 0x7f17
sqrtsd %xmm0, %xmm0
jmp 0x7fa4
movapd %xmm7, 0x60(%rsp)
movapd %xmm8, 0x50(%rsp)
movapd %xmm9, 0x40(%rsp)
movsd %xmm10, 0x8(%rsp)
movq %r9, %rbp
movq %r8, %r13
movapd %xmm11, 0x30(%rsp)
movapd %xmm12, 0x20(%rsp)
movapd %xmm5, 0x10(%rsp)
callq 0x3170
movapd 0x10(%rsp), %xmm5
movapd 0x20(%rsp), %xmm12
movapd 0x30(%rsp), %xmm11
movq %r13, %r8
movq 0xc0(%rsp), %rdi
movq %rbp, %r9
movsd 0x8(%rsp), %xmm10
movq 0xc8(%rsp), %rsi
movapd 0x40(%rsp), %xmm9
movapd 0x50(%rsp), %xmm8
movapd 0x60(%rsp), %xmm7
mulsd %xmm0, %xmm5
movsd (%rdi), %xmm0
movsd (%r14), %xmm2
movapd 0x126d(%rip), %xmm1     # 0x9030
movapd %xmm5, %xmm3
xorpd %xmm1, %xmm3
movapd %xmm0, %xmm4
cmpltsd %xmm2, %xmm4
andpd %xmm4, %xmm3
andnpd %xmm5, %xmm4
orpd %xmm3, %xmm4
movsd (%r15), %xmm3
movapd %xmm4, %xmm5
subsd %xmm3, %xmm5
addsd %xmm5, %xmm12
addsd %xmm4, %xmm5
addsd %xmm9, %xmm5
divsd %xmm5, %xmm12
subsd %xmm2, %xmm0
movsd (%r12), %xmm4
subsd %xmm10, %xmm4
divsd %xmm0, %xmm4
addsd %xmm3, %xmm4
divsd %xmm4, %xmm3
movsd 0x1275(%rip), %xmm4     # 0x9098
mulsd %xmm4, %xmm3
unpcklpd %xmm3, %xmm12           # xmm12 = xmm12[0],xmm3[0]
unpcklpd %xmm0, %xmm0            # xmm0 = xmm0[0,0]
mulpd %xmm12, %xmm0
unpcklpd %xmm2, %xmm2            # xmm2 = xmm2[0,0]
addpd %xmm2, %xmm0
movapd %xmm0, %xmm3
subpd %xmm2, %xmm3
xorpd %xmm3, %xmm1
maxpd %xmm3, %xmm1
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
movapd %xmm0, %xmm3
unpckhpd %xmm0, %xmm3            # xmm3 = xmm3[1],xmm0[1]
subsd %xmm0, %xmm3
mulsd %xmm4, %xmm3
addsd %xmm0, %xmm3
cmpltsd %xmm2, %xmm1
andpd %xmm1, %xmm0
andnpd %xmm3, %xmm1
orpd %xmm0, %xmm1
movb $0x1, (%rsi)
movl $0x1, %eax
movb $0x1, %cl
jmp 0x8377
movapd 0x119f(%rip), %xmm6     # 0x9030
xorpd %xmm9, %xmm6
maxsd %xmm9, %xmm6
ucomisd %xmm6, %xmm2
jbe 0x805b
subsd %xmm10, %xmm5
mulsd 0x156e(%rip), %xmm5     # 0x9420
divsd %xmm3, %xmm5
addsd %xmm5, %xmm12
addsd %xmm9, %xmm12
movapd 0x1168(%rip), %xmm1     # 0x9030
xorpd %xmm12, %xmm1
maxsd %xmm12, %xmm1
maxsd %xmm1, %xmm2
maxsd %xmm2, %xmm6
movapd %xmm12, %xmm1
divsd %xmm6, %xmm1
mulsd %xmm1, %xmm1
movapd %xmm9, %xmm2
divsd %xmm6, %xmm2
divsd %xmm6, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
maxsd %xmm1, %xmm0
ucomisd %xmm1, %xmm0
jb 0x80eb
sqrtsd %xmm0, %xmm0
jmp 0x816a
movapd %xmm7, 0x60(%rsp)
movapd %xmm8, 0x50(%rsp)
movapd %xmm9, 0x40(%rsp)
movsd %xmm10, 0x8(%rsp)
movq %r9, %rbp
movq %r8, %r13
movapd %xmm11, 0x30(%rsp)
movapd %xmm12, 0x20(%rsp)
movapd %xmm13, 0x10(%rsp)
movapd %xmm5, 0x70(%rsp)
callq 0x3170
movapd 0x70(%rsp), %xmm5
movapd 0x10(%rsp), %xmm13
movapd 0x20(%rsp), %xmm12
movapd 0x30(%rsp), %xmm11
movq %r13, %r8
movq 0xc0(%rsp), %rdi
movq %rbp, %r9
movsd 0x8(%rsp), %xmm10
movq 0xc8(%rsp), %rsi
movapd 0x40(%rsp), %xmm9
movapd 0x50(%rsp), %xmm8
movapd 0x60(%rsp), %xmm7
mulsd %xmm0, %xmm5
movsd (%rdi), %xmm1
movsd (%r14), %xmm0
movapd 0x1077(%rip), %xmm2     # 0x9030
movapd %xmm5, %xmm3
xorpd %xmm2, %xmm3
movapd %xmm0, %xmm4
cmpltsd %xmm1, %xmm4
andpd %xmm4, %xmm3
andnpd %xmm5, %xmm4
orpd %xmm3, %xmm4
movapd %xmm4, %xmm3
subsd %xmm9, %xmm3
addsd %xmm3, %xmm12
movsd %xmm12, %xmm13          # xmm13 = xmm12[0],xmm13[1]
addsd %xmm4, %xmm3
movsd (%r15), %xmm4
addsd %xmm4, %xmm3
subsd %xmm1, %xmm0
movapd %xmm9, %xmm5
subsd %xmm4, %xmm5
unpcklpd %xmm5, %xmm3            # xmm3 = xmm3[0],xmm5[0]
divpd %xmm3, %xmm13
unpcklpd %xmm0, %xmm0            # xmm0 = xmm0[0,0]
mulpd %xmm13, %xmm0
unpcklpd %xmm1, %xmm1            # xmm1 = xmm1[0,0]
addpd %xmm1, %xmm0
movapd %xmm0, %xmm3
subpd %xmm1, %xmm3
xorpd %xmm3, %xmm2
maxpd %xmm3, %xmm2
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
cmpltsd %xmm2, %xmm1
movapd %xmm1, %xmm2
andpd %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
andnpd %xmm0, %xmm1
orpd %xmm2, %xmm1
movb $0x1, (%rsi)
movl $0x2, %eax
jmp 0x8375
testb %cl, %cl
je 0x8264
movapd %xmm10, %xmm5
subsd (%r8), %xmm5
mulsd 0x13ab(%rip), %xmm5     # 0x9420
movsd (%rbx), %xmm0
subsd %xmm4, %xmm0
divsd %xmm0, %xmm5
movsd (%r9), %xmm1
addsd %xmm1, %xmm5
addsd %xmm9, %xmm5
movapd 0xf99(%rip), %xmm0      # 0x9030
movapd %xmm5, %xmm2
xorpd %xmm0, %xmm2
maxsd %xmm5, %xmm2
xorpd %xmm1, %xmm0
maxsd %xmm1, %xmm0
maxsd %xmm2, %xmm0
maxsd %xmm0, %xmm6
movapd %xmm5, %xmm0
divsd %xmm6, %xmm0
mulsd %xmm0, %xmm0
movapd %xmm9, %xmm2
divsd %xmm6, %xmm2
divsd %xmm6, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x82a0
sqrtsd %xmm0, %xmm0
jmp 0x831d
movapd %xmm7, 0x60(%rsp)
movapd %xmm8, 0x50(%rsp)
movapd %xmm9, 0x40(%rsp)
movsd %xmm10, 0x8(%rsp)
movq %r9, %rbp
movq %r8, %r13
movapd %xmm11, 0x30(%rsp)
movapd %xmm12, 0x20(%rsp)
movapd %xmm6, 0x10(%rsp)
callq 0x3170
movapd 0x10(%rsp), %xmm6
movapd 0x20(%rsp), %xmm12
movapd 0x30(%rsp), %xmm11
movq %r13, %r8
movq 0xc0(%rsp), %rdi
movq %rbp, %r9
movsd 0x8(%rsp), %xmm10
movq 0xc8(%rsp), %rsi
movapd 0x40(%rsp), %xmm9
movapd 0x50(%rsp), %xmm8
movapd 0x60(%rsp), %xmm7
mulsd %xmm0, %xmm6
movsd (%rdi), %xmm3
movsd (%r14), %xmm0
movapd 0xeb1(%rip), %xmm4      # 0x9030
xorpd %xmm6, %xmm4
movapd %xmm0, %xmm2
cmpltsd %xmm3, %xmm2
movsd (%r15), %xmm1
ucomisd %xmm4, %xmm6
jne 0x8199
jnp 0x81ed
andpd %xmm2, %xmm4
movapd %xmm2, %xmm5
andnpd %xmm6, %xmm5
orpd %xmm4, %xmm5
movapd %xmm1, %xmm4
subsd %xmm9, %xmm4
addsd %xmm5, %xmm4
addsd %xmm5, %xmm4
subsd %xmm9, %xmm5
addsd %xmm5, %xmm12
divsd %xmm4, %xmm12
xorpd %xmm4, %xmm4
ucomisd %xmm12, %xmm4
jbe 0x81ed
movapd %xmm0, %xmm2
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm12
addsd %xmm3, %xmm12
movapd %xmm12, %xmm2
jmp 0x81fe
movapd %xmm2, %xmm4
andpd %xmm8, %xmm4
andnpd %xmm7, %xmm2
orpd %xmm4, %xmm2
movapd %xmm9, %xmm4
subsd %xmm1, %xmm4
movapd %xmm9, %xmm1
divsd %xmm4, %xmm1
subsd %xmm3, %xmm0
mulsd %xmm1, %xmm0
addsd %xmm3, %xmm0
movapd %xmm3, %xmm5
subsd %xmm2, %xmm5
movapd 0xe04(%rip), %xmm4      # 0x9030
movapd %xmm5, %xmm1
xorpd %xmm4, %xmm1
maxsd %xmm5, %xmm1
subsd %xmm0, %xmm3
xorpd %xmm3, %xmm4
maxsd %xmm3, %xmm4
cmpb $0x1, (%rsi)
jne 0x827f
cmpltsd %xmm4, %xmm1
andpd %xmm1, %xmm2
andnpd %xmm0, %xmm1
orpd %xmm2, %xmm1
movl $0x3, %eax
jmp 0x7e82
cmpltsd %xmm4, %xmm1
movapd %xmm1, %xmm0
andpd %xmm8, %xmm0
andnpd %xmm7, %xmm1
orpd %xmm0, %xmm1
jmp 0x8370
cmpltsd %xmm1, %xmm4
andpd %xmm4, %xmm2
andnpd %xmm0, %xmm4
orpd %xmm2, %xmm4
movl $0x3, %eax
movb $0x1, %cl
movapd %xmm4, %xmm1
jmp 0x8377
movapd %xmm7, 0x60(%rsp)
movapd %xmm8, 0x50(%rsp)
movapd %xmm9, 0x40(%rsp)
movsd %xmm10, 0x8(%rsp)
movq %r9, %rbp
movq %r8, %r13
movapd %xmm11, 0x30(%rsp)
movapd %xmm6, 0x10(%rsp)
movapd %xmm5, 0x20(%rsp)
callq 0x3170
movapd 0x20(%rsp), %xmm5
movapd 0x10(%rsp), %xmm6
movapd 0x30(%rsp), %xmm11
movq %r13, %r8
movq 0xc0(%rsp), %rdi
movq %rbp, %r9
movsd 0x8(%rsp), %xmm10
movq 0xc8(%rsp), %rsi
movapd 0x40(%rsp), %xmm9
movapd 0x50(%rsp), %xmm8
movapd 0x60(%rsp), %xmm7
mulsd %xmm0, %xmm6
movsd (%rdi), %xmm0
movsd (%rbx), %xmm1
movapd 0xcff(%rip), %xmm2      # 0x9030
xorpd %xmm6, %xmm2
movapd %xmm1, %xmm3
cmpltsd %xmm0, %xmm3
andpd %xmm3, %xmm2
andnpd %xmm6, %xmm3
orpd %xmm2, %xmm3
movapd %xmm3, %xmm2
subsd %xmm9, %xmm2
addsd %xmm2, %xmm5
addsd %xmm3, %xmm2
addsd (%r9), %xmm2
divsd %xmm2, %xmm5
subsd %xmm0, %xmm1
mulsd %xmm5, %xmm1
addsd %xmm0, %xmm1
movl $0x4, %eax
xorl %ecx, %ecx
ucomisd (%r12), %xmm10
jbe 0x838a
movq %rbx, %rdx
movq %r8, %r12
movq %r9, %r15
jmp 0x83b6
xorpd %xmm0, %xmm0
ucomisd %xmm11, %xmm0
jbe 0x83b3
movsd (%r14), %xmm0
movsd %xmm0, (%rbx)
movsd (%r12), %xmm0
movsd %xmm0, (%r8)
movsd (%r15), %xmm0
movsd %xmm0, (%r9)
movq %r14, %rdx
movsd (%rdi), %xmm0
movsd %xmm0, (%rdx)
movsd %xmm10, (%r12)
movsd %xmm9, (%r15)
minsd %xmm8, %xmm1
maxsd %xmm7, %xmm1
movsd %xmm1, (%rdi)
andb (%rsi), %cl
cmpb $0x1, %cl
jne 0x841f
movsd (%rbx), %xmm2
movsd (%r14), %xmm3
movapd %xmm2, %xmm0
subsd %xmm3, %xmm0
mulsd 0x1022(%rip), %xmm0     # 0x9418
addsd %xmm3, %xmm0
xorl %ecx, %ecx
ucomisd %xmm0, %xmm1
seta %cl
xorl %edx, %edx
ucomisd %xmm1, %xmm0
seta %dl
ucomisd %xmm3, %xmm2
cmoval %edx, %ecx
testb %cl, %cl
jne 0x841b
movapd %xmm0, %xmm1
movsd %xmm1, (%rdi)
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop