// File: /workspace/github_c_makefile_star2_O0/AlexCharlton[P]Hyperscene/hypermath/src/hypermath.c
// Function: hpmQuatCross
void hpmQuatCross(const float *quatA, const float *quatB, float *result){
    HPMquat *a = (HPMquat *) quatA;
    HPMquat *b = (HPMquat *) quatB;
    HPMquat *r = (HPMquat *) result;
    r->x = a->w*b->x + a->x*b->w + a->y*b->z - a->z*b->y;
    r->y = a->w*b->y + a->y*b->w + a->z*b->x - a->x*b->z;
    r->z = a->w*b->z + a->z*b->w + a->x*b->y - a->y*b->x;
    r->w = a->w*b->w - a->x*b->x - a->y*b->y - a->z*b->z;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x20(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
movss (%rax), %xmm2
movq -0x20(%rbp), %rax
movss (%rax), %xmm1
movq -0x28(%rbp), %rax
mulss 0xc(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x20(%rbp), %rax
movss 0x8(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, (%rax)
movq -0x20(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x28(%rbp), %rax
mulss 0xc(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x28(%rbp), %rax
movss (%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x20(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0x4(%rax)
movq -0x20(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x20(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x28(%rbp), %rax
mulss 0xc(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss (%rax), %xmm1
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
movss (%rax), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0x8(%rax)
movq -0x20(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0xc(%rax), %xmm2
movq -0x20(%rbp), %rax
movss (%rax), %xmm1
movq -0x28(%rbp), %rax
mulss (%rax), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm2
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x20(%rbp), %rax
movss 0x8(%rax), %xmm0
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm2
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, 0xc(%rax)
popq %rbp
retq
nopw %cs:(%rax,%rax)