// File: /workspace/github_cpp_makefile_star2_O2/sus304[P]ForRocket/src/environment/coordinate.cpp
// Function: forrocket::Coordinate::setNED2Body(Eigen::Matrix<double, 4, 1, 0, 4, 1>)
void forrocket::Coordinate::setNED2Body(const Eigen::Vector4d quat) {
    double q0 = quat(0);
    double q1 = quat(1);
    double q2 = quat(2);
    double q3 = quat(3);
    dcm.NED2body << q0*q0 - q1*q1 - q2*q2 + q3*q3, 2.0 * (q0 * q1 + q2 * q3)    , 2.0 * (q0 * q2 - q1 * q3),
                    2.0 * (q0 * q1 - q2 * q3)    , q1*q1 - q0*q0 - q2*q2 + q3*q3, 2.0 * (q1 * q2 + q0 * q3),
                    2.0 * (q0 * q2 + q1 * q3)    , 2.0 * (q1 * q2 - q0 * q3)    , q2*q2 - q0*q0 - q1*q1 + q3*q3;
    dcm.body2NED = dcm.NED2body.transpose();
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x100, %rsp            # imm = 0x100
movq %rdi, %rbx
movsd (%rsi), %xmm2
movsd 0x8(%rsi), %xmm4
movsd 0x10(%rsi), %xmm3
movsd 0x18(%rsi), %xmm5
leaq 0xd0(%rdi), %r15
movapd %xmm4, %xmm1
mulsd %xmm4, %xmm1
movapd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movapd %xmm1, 0x80(%rsp)
subsd %xmm1, %xmm0
movapd %xmm3, %xmm1
mulsd %xmm3, %xmm1
movapd %xmm1, 0x50(%rsp)
subsd %xmm1, %xmm0
movapd %xmm5, %xmm1
mulsd %xmm5, %xmm1
movsd %xmm1, 0x20(%rsp)
addsd %xmm1, %xmm0
leaq 0xe0(%rsp), %rdi
movq %r15, (%rdi)
andq $0x0, 0x8(%rdi)
pushq $0x1
popq %rax
movq %rax, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movsd %xmm0, 0xd0(%rbx)
movapd %xmm3, 0x10(%rsp)
movsd %xmm5, 0x28(%rsp)
mulsd %xmm5, %xmm3
movapd %xmm2, (%rsp)
movapd %xmm2, %xmm0
movapd %xmm4, 0x40(%rsp)
mulsd %xmm4, %xmm0
movapd %xmm0, 0x30(%rsp)
movapd %xmm3, 0x90(%rsp)
addsd %xmm3, %xmm0
addsd %xmm0, %xmm0
leaq 0xd8(%rsp), %rsi
movsd %xmm0, (%rsi)
callq 0x12584
movapd 0x40(%rsp), %xmm1
mulsd 0x28(%rsp), %xmm1
movapd (%rsp), %xmm0
mulsd 0x10(%rsp), %xmm0
movapd %xmm0, 0x70(%rsp)
movapd %xmm1, 0x60(%rsp)
subsd %xmm1, %xmm0
addsd %xmm0, %xmm0
leaq 0xd0(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd 0x30(%rsp), %xmm0
subsd 0x90(%rsp), %xmm0
addsd %xmm0, %xmm0
leaq 0xc8(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd 0x10(%rsp), %xmm3
movapd %xmm3, %xmm0
xorpd 0x20224(%rip), %xmm0    # 0x31930
movapd 0x2021c(%rip), %xmm2    # 0x31930
movapd (%rsp), %xmm1
xorpd %xmm1, %xmm2
mulsd %xmm1, %xmm2
movapd 0x80(%rsp), %xmm1
movapd %xmm2, 0x30(%rsp)
addsd %xmm2, %xmm1
mulsd %xmm3, %xmm0
addsd %xmm1, %xmm0
addsd 0x20(%rsp), %xmm0
leaq 0xc0(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd (%rsp), %xmm1
mulsd 0x28(%rsp), %xmm1
movapd 0x10(%rsp), %xmm0
mulsd 0x40(%rsp), %xmm0
movapd %xmm0, 0x10(%rsp)
movapd %xmm1, (%rsp)
addsd %xmm1, %xmm0
addsd %xmm0, %xmm0
leaq 0xb8(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd 0x70(%rsp), %xmm0
addsd 0x60(%rsp), %xmm0
addsd %xmm0, %xmm0
leaq 0xb0(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd 0x10(%rsp), %xmm0
subsd (%rsp), %xmm0
addsd %xmm0, %xmm0
leaq 0xa8(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
movapd 0x40(%rsp), %xmm0
movapd 0x20147(%rip), %xmm2    # 0x31930
xorpd %xmm0, %xmm2
movapd 0x50(%rsp), %xmm1
addsd 0x30(%rsp), %xmm1
mulsd %xmm0, %xmm2
addsd %xmm1, %xmm2
movsd 0x20(%rsp), %xmm0
addsd %xmm2, %xmm0
leaq 0xa0(%rsp), %rsi
movsd %xmm0, (%rsi)
movq %rax, %rdi
callq 0x12584
leaq 0xe0(%rsp), %r14
movq %r14, %rdi
callq 0x1262c
movq %r15, (%r14)
addq $0x160, %rbx            # imm = 0x160
leaq 0xe0(%rsp), %rsi
movq %rbx, %rdi
callq 0x128ab
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %r15
retq
jmp 0x11864
jmp 0x11864
jmp 0x11864
jmp 0x11864
jmp 0x11864
jmp 0x11864
jmp 0x11864
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x1262c
movq %rbx, %rdi
callq 0x55b0