// File: /workspace/github_cpp_makefile_star2_O2/istellartech[P]OpenTsiolkovsky/./boost/numeric/odeint/stepper/controlled_runge_kutta.hpp
// Function: boost::numeric::odeint::controlled_step_result boost::numeric::odeint::controlled_runge_kutta<boost::numeric::odeint::runge_kutta_dopri5<std::array<double, 14ul>, double, std::array<double, 14ul>, double, boost::numeric::odeint::array_algebra, boost::numeric::odeint::default_operations, boost::numeric::odeint::initially_resizer>, boost::numeric::odeint::default_error_checker<double, boost::numeric::odeint::array_algebra, boost::numeric::odeint::default_operations>, boost::numeric::odeint::default_step_adjuster<double, double>, boost::numeric::odeint::initially_resizer, boost::numeric::odeint::explicit_error_stepper_fsal_tag>::try_step<RocketStage, std::array<double, 14ul>, std::array<double, 14ul>, std::array<double, 14ul>, std::array<double, 14ul>>(RocketStage, std::array<double, 14ul> const&, std::array<double, 14ul> const&, double&, std::array<double, 14ul>&, std::array<double, 14ul>&, double&)
controlled_step_result try_step( System system , const StateIn &in , const DerivIn &dxdt_in , time_type &t ,
            StateOut &out , DerivOut &dxdt_out , time_type &dt )
    {
        if( !m_step_adjuster.check_step_size_limit(dt) )
        {
            // given dt was above step size limit - adjust and return fail;
            dt = m_step_adjuster.get_max_dt();
            return fail;
        }

        m_xerr_resizer.adjust_size( in , detail::bind( &controlled_runge_kutta::template resize_m_xerr_impl< StateIn > , detail::ref( *this ) , detail::_1 ) );

        //fsal: m_stepper.get_dxdt( dxdt );
        //fsal: m_stepper.do_step( sys , x , dxdt , t , dt , m_x_err );
        m_stepper.do_step( system , in , dxdt_in , t , out , dxdt_out , dt , m_xerr.m_v );

        // this potentially overwrites m_x_err! (standard_error_checker does, at least)
        value_type max_rel_err = m_error_checker.error( m_stepper.algebra() , in , dxdt_in , m_xerr.m_v , dt );

        if( max_rel_err > 1.0 )
        {
            // error too big, decrease step size and reject this step
            dt = m_step_adjuster.decrease_step(dt, max_rel_err, m_stepper.error_order());
            return fail;
        }
        // otherwise, increase step size and accept
        t += dt;
        dt = m_step_adjuster.increase_step(dt, max_rel_err, m_stepper.stepper_order());
        return success;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf08, %rsp            # imm = 0xF08
movq %r9, 0x18(%rsp)
movq %r8, %r15
movq %rcx, 0x20(%rsp)
movq %rdx, %r12
movq %rsi, %r14
movq %rdi, %r13
movq 0xf48(%rsp), %rbp
leaq 0x3b0(%rdi), %rbx
movsd (%rbp), %xmm0
movq %rbx, %rdi
callq 0x1425c
testb %al, %al
je 0x1415b
leaq 0x3b9(%r13), %rdi
leaq 0x203(%rip), %rax       # 0x142b2
leaq 0x28(%rsp), %rdx
movq %rax, (%rdx)
andq $0x0, 0x8(%rdx)
movq %r13, 0x10(%rdx)
movq %r12, %rsi
callq 0x1429e
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x105ec
movq %r15, 0x10(%rsp)
movsd (%r15), %xmm0
movsd (%rbp), %xmm1
leaq 0x430(%r13), %r14
movq %r14, (%rsp)
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
movq %r12, %rdx
movq 0x20(%rsp), %r15
movq %r15, %rcx
movq 0x18(%rsp), %r8
movq 0xf40(%rsp), %r9
callq 0x142b6
leaq 0x40(%rsp), %rdi
callq 0x6e12
leaq 0x390(%r13), %rdi
movsd (%rbp), %xmm0
movq %r13, %rsi
movq %r12, %rdx
movq %r15, %rcx
movq %r14, %r8
callq 0x14354
movapd %xmm0, %xmm1
ucomisd 0xaf19(%rip), %xmm0     # 0x1f060
movsd (%rbp), %xmm0
jbe 0x14164
pushq $0x4
popq %rsi
movq %rbx, %rdi
callq 0x143b0
jmp 0x1415f
movsd (%rbx), %xmm0
pushq $0x1
popq %rax
jmp 0x14183
movq 0x10(%rsp), %rax
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movsd (%rbp), %xmm0
pushq $0x5
popq %rsi
movq %rbx, %rdi
callq 0x14432
xorl %eax, %eax
movsd %xmm0, (%rbp)
addq $0xf08, %rsp            # imm = 0xF08
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x6e12
movq %rbx, %rdi
callq 0x5640
nop