// File: /workspace/github_cpp_makefile_star2_O3/sus304[P]ForRocket/./lib/boost/numeric/odeint/integrate/detail/integrate_const.hpp
// Function: unsigned long boost::numeric::odeint::detail::integrate_const<boost::numeric::odeint::runge_kutta4<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>, forrocket::Dynamics3dofParachute, std::array<double, 14ul>, double, std::reference_wrapper<forrocket::FlightDataRecorder>>(boost::numeric::odeint::runge_kutta4<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>, forrocket::Dynamics3dofParachute, std::array<double, 14ul>&, double, double, double, std::reference_wrapper<forrocket::FlightDataRecorder>, boost::numeric::odeint::stepper_tag)
size_t integrate_const(
        Stepper stepper , System system , State &start_state ,
        Time start_time , Time end_time , Time dt ,
        Observer observer , stepper_tag
)
{

    typename odeint::unwrap_reference< Observer >::type &obs = observer;
    typename odeint::unwrap_reference< Stepper >::type &st = stepper;

    Time time = start_time;
    int step = 0;
    // cast time+dt explicitely in case of expression templates (e.g. multiprecision)
    while( less_eq_with_sign( static_cast<Time>(time+dt) , end_time , dt ) )
    {
        obs( start_state , time );
        st.do_step( system , start_state , time , dt );
        // direct computation of the time avoids error propagation happening when using time += dt
        // we need clumsy type analysis to get boost units working here
        ++step;
        time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * dt;
    }
    obs( start_state , time );

    return step;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rcx, %r12
movq %rdx, %r14
movapd %xmm2, %xmm3
movsd %xmm0, 0x8(%rsp)
addsd %xmm0, %xmm3
movapd %xmm1, %xmm0
subsd %xmm3, %xmm0
subsd %xmm1, %xmm3
movsd 0xbf85(%rip), %xmm4     # 0x3d2e8
xorl %eax, %eax
ucomisd %xmm3, %xmm4
setae %al
xorl %ecx, %ecx
ucomisd %xmm0, %xmm4
setae %cl
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm2
cmoval %eax, %ecx
cmpb $0x1, %cl
jne 0x3145d
movq %rsi, %r15
addq $0x8, %r15
xorl %r13d, %r13d
leaq 0x175b6(%rip), %rbx     # 0x48950
addq $0x10, %rbx
movsd 0x8(%rsp), %xmm0
movq %rdi, %rbp
movsd %xmm2, 0x10(%rsp)
movsd %xmm1, 0x18(%rsp)
movsd %xmm0, 0x20(%rsp)
movq %r12, %rdi
movq %r14, %rsi
callq 0x1b9dc
movq 0x10(%r15), %rax
leaq 0x30(%rsp), %rcx
movq %rax, 0x10(%rcx)
movups (%r15), %xmm0
movups %xmm0, (%rcx)
movq %rbx, 0x28(%rsp)
movq %rbp, %rdi
leaq 0x28(%rsp), %rsi
movq %r14, %rdx
movsd 0x20(%rsp), %xmm0
movsd 0x10(%rsp), %xmm1
callq 0x31484
movsd 0xbee7(%rip), %xmm4     # 0x3d2e8
movsd 0x18(%rsp), %xmm1
movsd 0x10(%rsp), %xmm2
incq %r13
xorps %xmm0, %xmm0
cvtsi2sd %r13d, %xmm0
mulsd %xmm2, %xmm0
addsd 0x8(%rsp), %xmm0
movapd %xmm0, %xmm5
addsd %xmm2, %xmm5
movapd %xmm1, %xmm3
subsd %xmm5, %xmm3
subsd %xmm1, %xmm5
xorl %eax, %eax
ucomisd %xmm5, %xmm4
xorpd %xmm5, %xmm5
setae %al
xorl %ecx, %ecx
ucomisd %xmm3, %xmm4
setae %cl
ucomisd %xmm5, %xmm2
cmoval %eax, %ecx
testb %cl, %cl
jne 0x313b3
jmp 0x31466
xorl %r13d, %r13d
movsd 0x8(%rsp), %xmm0
movq %r12, %rdi
movq %r14, %rsi
callq 0x1b9dc
movq %r13, %rax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop