// File: /workspace/github_c_makefile_star2_O1/AlexCharlton[P]Hyperscene/hypermath/src/hypermath.c
// Function: hpmLookAt
void hpmLookAt(float *eye, float *obj, float *up, float *mat){
    HPMmat4 *m = (HPMmat4 *) mat;
    HPMpoint f, r, u;
    initMat4(m);
    hpmSubVec(eye, obj, (float *) &f);
    hpmNormalize((float *) &f);
    hpmCross(up, (float *) &f, (float *) &r);
    hpmNormalize((float *) &r);
    hpmCross((float *) &f, (float *) &r, (float *) &u);

    m->_11 = r.x;
    m->_12 = r.y;
    m->_13 = r.z;
    m->_21 = u.x;
    m->_22 = u.y;
    m->_23 = u.z;
    m->_31 = f.x;
    m->_32 = f.y;
    m->_33 = f.z;
    m->_14 =-hpmDot((float *) &r, eye);
    m->_24 =-hpmDot((float *) &u, eye);
    m->_34 =-hpmDot((float *) &f, eye);
    m->_44 = 1.0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x30, %rsp
movq %rcx, %rbx
movq %rdi, %r14
xorps %xmm0, %xmm0
movups %xmm0, 0x30(%rcx)
movups %xmm0, 0x20(%rcx)
movups %xmm0, 0x10(%rcx)
movups %xmm0, (%rcx)
movss (%rdi), %xmm7
movss 0x4(%rdi), %xmm9
subss (%rsi), %xmm7
subss 0x4(%rsi), %xmm9
movss 0x8(%rdi), %xmm8
subss 0x8(%rsi), %xmm8
movq %rdx, %r15
movaps %xmm9, %xmm0
mulss %xmm9, %xmm0
movaps %xmm7, %xmm1
mulss %xmm7, %xmm1
addss %xmm0, %xmm1
movaps %xmm8, %xmm0
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jb 0x743d
sqrtss %xmm0, %xmm0
jmp 0x7469
movss %xmm7, 0x4(%rsp)
movaps %xmm8, 0x10(%rsp)
movss %xmm9, (%rsp)
callq 0x42a0
xorps %xmm2, %xmm2
movss (%rsp), %xmm9
movaps 0x10(%rsp), %xmm8
movss 0x4(%rsp), %xmm7
divss %xmm0, %xmm7
divss %xmm0, %xmm9
divss %xmm0, %xmm8
movss (%r15), %xmm10
movss 0x4(%r15), %xmm6
movss 0x8(%r15), %xmm5
movaps %xmm9, %xmm0
mulss %xmm5, %xmm0
movaps %xmm7, %xmm1
mulss %xmm6, %xmm1
mulss %xmm8, %xmm6
subss %xmm0, %xmm6
movaps %xmm8, %xmm0
mulss %xmm10, %xmm0
mulss %xmm7, %xmm5
subss %xmm0, %xmm5
mulss %xmm9, %xmm10
subss %xmm1, %xmm10
movaps %xmm5, %xmm0
mulss %xmm5, %xmm0
movaps %xmm6, %xmm1
mulss %xmm6, %xmm1
addss %xmm0, %xmm1
movaps %xmm10, %xmm0
mulss %xmm10, %xmm0
addss %xmm1, %xmm0
ucomiss %xmm2, %xmm0
jb 0x74e5
sqrtss %xmm0, %xmm0
jmp 0x7532
movss %xmm7, 0x4(%rsp)
movaps %xmm8, 0x10(%rsp)
movss %xmm9, (%rsp)
movaps %xmm10, 0x20(%rsp)
movss %xmm6, 0xc(%rsp)
movss %xmm5, 0x8(%rsp)
callq 0x42a0
movss 0x8(%rsp), %xmm5
movss 0xc(%rsp), %xmm6
movaps 0x20(%rsp), %xmm10
movss (%rsp), %xmm9
movaps 0x10(%rsp), %xmm8
movss 0x4(%rsp), %xmm7
divss %xmm0, %xmm6
divss %xmm0, %xmm5
divss %xmm0, %xmm10
movaps %xmm5, %xmm1
mulss %xmm8, %xmm1
movaps %xmm9, %xmm0
mulss %xmm10, %xmm0
subss %xmm1, %xmm0
movaps %xmm10, %xmm1
mulss %xmm7, %xmm1
movaps %xmm8, %xmm2
mulss %xmm6, %xmm2
subss %xmm1, %xmm2
movaps %xmm6, %xmm3
mulss %xmm9, %xmm3
movaps %xmm7, %xmm1
mulss %xmm5, %xmm1
subss %xmm3, %xmm1
movss %xmm6, (%rbx)
movss %xmm5, 0x10(%rbx)
movss %xmm10, 0x20(%rbx)
movss %xmm0, 0x4(%rbx)
movss %xmm2, 0x14(%rbx)
movss %xmm1, 0x24(%rbx)
movss %xmm7, 0x8(%rbx)
movss %xmm9, 0x18(%rbx)
movss %xmm8, 0x28(%rbx)
movss (%r14), %xmm3
movss 0x4(%r14), %xmm4
mulss %xmm4, %xmm5
mulss %xmm3, %xmm6
addss %xmm5, %xmm6
movss 0x8(%r14), %xmm5
mulss %xmm5, %xmm10
addss %xmm6, %xmm10
movaps 0x3a78(%rip), %xmm6     # 0xb050
xorps %xmm6, %xmm10
movss %xmm10, 0x30(%rbx)
mulss %xmm4, %xmm2
mulss %xmm3, %xmm0
addss %xmm2, %xmm0
mulss %xmm5, %xmm1
addss %xmm0, %xmm1
xorps %xmm6, %xmm1
movss %xmm1, 0x34(%rbx)
mulss %xmm4, %xmm9
mulss %xmm3, %xmm7
addss %xmm9, %xmm7
mulss %xmm5, %xmm8
addss %xmm7, %xmm8
xorps %xmm6, %xmm8
movss %xmm8, 0x38(%rbx)
movl $0x3f800000, 0x3c(%rbx) # imm = 0x3F800000
addq $0x30, %rsp
popq %rbx
popq %r14
popq %r15
retq