// File: sus304[P]ForRocket/src/dynamics/dynamics_base.cpp
// Function: forrocket::DynamicsBase::QuaternionDiff(forrocket::Rocket*)
Eigen::Matrix4d forrocket::DynamicsBase::QuaternionDiff(Rocket* p_rocket) {
    double p = p_rocket->angular_velocity[0];
    double q = p_rocket->angular_velocity[1];
    double r = p_rocket->angular_velocity[2];
    Eigen::Matrix4d quat_dot;
    quat_dot << 0, r, -q, p,
                -r, 0, p, q,
                q, -p, 0, r,
                -p, -q, -r, 0;
    return quat_dot;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0xc8(%rbp)
movq %rdi, %rax
movq %rax, -0xd0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x18(%rbp), %rdi
addq $0x430, %rdi            # imm = 0x430
xorl %eax, %eax
movl %eax, %esi
callq 0x52b00
movsd (%rax), %xmm0
movsd %xmm0, -0x20(%rbp)
movq -0x18(%rbp), %rdi
addq $0x430, %rdi            # imm = 0x430
movl $0x1, %esi
callq 0x52b00
movsd (%rax), %xmm0
movsd %xmm0, -0x28(%rbp)
movq -0x18(%rbp), %rdi
addq $0x430, %rdi            # imm = 0x430
movl $0x2, %esi
callq 0x52b00
movq -0xc8(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x30(%rbp)
callq 0x560b0
movq -0xc8(%rbp), %rsi
movq $0x0, -0x58(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0xc0(%rbp)
leaq -0x58(%rbp), %rdx
callq 0x560d0
movq -0xc0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x56110
movq %rax, -0xb8(%rbp)
jmp 0x557d9
movq -0xb8(%rbp), %rdi
movaps 0x3fe89(%rip), %xmm1    # 0x95670
movsd -0x28(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x70(%rbp)
leaq -0x70(%rbp), %rsi
callq 0x56110
movq %rax, -0xd8(%rbp)
jmp 0x55807
movq -0xd8(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x56110
movq %rax, -0xe0(%rbp)
jmp 0x55820
movq -0xe0(%rbp), %rdi
movaps 0x3fe42(%rip), %xmm1    # 0x95670
movsd -0x30(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x78(%rbp)
leaq -0x78(%rbp), %rsi
callq 0x56110
movq %rax, -0xe8(%rbp)
jmp 0x5584e
movq -0xe8(%rbp), %rdi
movq $0x0, -0x80(%rbp)
leaq -0x80(%rbp), %rsi
callq 0x56110
movq %rax, -0xf0(%rbp)
jmp 0x5586f
movq -0xf0(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x56110
movq %rax, -0xf8(%rbp)
jmp 0x55888
movq -0xf8(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x56110
movq %rax, -0x100(%rbp)
jmp 0x558a1
movq -0x100(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x56110
movq %rax, -0x108(%rbp)
jmp 0x558ba
movq -0x108(%rbp), %rdi
movaps 0x3fda8(%rip), %xmm1    # 0x95670
movsd -0x20(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x88(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x56110
movq %rax, -0x110(%rbp)
jmp 0x558ee
movq -0x110(%rbp), %rdi
movq $0x0, -0x90(%rbp)
leaq -0x90(%rbp), %rsi
callq 0x56110
movq %rax, -0x118(%rbp)
jmp 0x55915
movq -0x118(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x56110
movq %rax, -0x120(%rbp)
jmp 0x5592e
movq -0x120(%rbp), %rdi
movaps 0x3fd34(%rip), %xmm1    # 0x95670
movsd -0x20(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0x98(%rbp)
leaq -0x98(%rbp), %rsi
callq 0x56110
movq %rax, -0x128(%rbp)
jmp 0x55962
movq -0x128(%rbp), %rdi
movaps 0x3fd00(%rip), %xmm1    # 0x95670
movsd -0x28(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0xa0(%rbp)
leaq -0xa0(%rbp), %rsi
callq 0x56110
movq %rax, -0x130(%rbp)
jmp 0x55996
movq -0x130(%rbp), %rdi
movaps 0x3fccc(%rip), %xmm1    # 0x95670
movsd -0x30(%rbp), %xmm0
pxor %xmm1, %xmm0
movlpd %xmm0, -0xa8(%rbp)
leaq -0xa8(%rbp), %rsi
callq 0x56110
movq %rax, -0x138(%rbp)
jmp 0x559ca
movq -0x138(%rbp), %rdi
movq $0x0, -0xb0(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x56110
jmp 0x559ea
leaq -0x50(%rbp), %rdi
callq 0x56280
movq -0xd0(%rbp), %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x56280
movq -0x60(%rbp), %rdi
callq 0x6760
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)