// File: /workspace/github_c_makefile_star2_O0/AlexCharlton[P]Hyperscene/hypermath/src/hypermath.c
// Function: hpmAxisAngleRotation
void hpmAxisAngleRotation(float *axis, float angle, float *mat){
    HPMmat4 *m = (HPMmat4 *) mat;
    HPMpoint *a = (HPMpoint *) axis;
    initMat4(m);
    float c = cos(angle);
    float s = sin(angle);
    float C = 1 - c;
    float xx, xy, xz, yy, yz, zz, xs, ys, zs;
    hpmNormalize(axis);
    xx = a->x * a->x;
    xy = a->x * a->y;
    xz = a->x * a->z;
    yy = a->y * a->y;
    yz = a->y * a->z;
    zz = a->z * a->z;
    xs = a->x * s;
    ys = a->y * s;
    zs = a->z * s;
    
    m->_11 = xx*C + c;
    m->_12 = xy*C - zs;
    m->_13 = xz*C + ys;

    m->_21 = xy*C + zs;
    m->_22 = yy*C + c;
    m->_23 = yz*C - xs;

    m->_31 = xz*C - ys;
    m->_32 = yz*C + xs;
    m->_33 = zz*C + c;
    
    m->_44 = 1.0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movss %xmm0, -0xc(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x6360
movss -0xc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x4400
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x2c(%rbp)
movss -0xc(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x4290
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x30(%rbp)
movss 0x896c(%rip), %xmm0     # 0xf030
subss -0x2c(%rbp), %xmm0
movss %xmm0, -0x34(%rbp)
movq -0x8(%rbp), %rdi
callq 0x4460
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
mulss (%rax), %xmm0
movss %xmm0, -0x38(%rbp)
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x4(%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x8(%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x4(%rax), %xmm0
movss %xmm0, -0x44(%rbp)
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x8(%rax), %xmm0
movss %xmm0, -0x48(%rbp)
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm0
movq -0x28(%rbp), %rax
mulss 0x8(%rax), %xmm0
movss %xmm0, -0x4c(%rbp)
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
mulss -0x30(%rbp), %xmm0
movss %xmm0, -0x50(%rbp)
movq -0x28(%rbp), %rax
movss 0x4(%rax), %xmm0
mulss -0x30(%rbp), %xmm0
movss %xmm0, -0x54(%rbp)
movq -0x28(%rbp), %rax
movss 0x8(%rax), %xmm0
mulss -0x30(%rbp), %xmm0
movss %xmm0, -0x58(%rbp)
movss -0x38(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x2c(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x3c(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x58(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x10(%rax)
movss -0x40(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x54(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x20(%rax)
movss -0x3c(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x58(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x4(%rax)
movss -0x44(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x2c(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x14(%rax)
movss -0x48(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x50(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x24(%rax)
movss -0x40(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x54(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x8(%rax)
movss -0x48(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x50(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x18(%rax)
movss -0x4c(%rbp), %xmm0
movss -0x34(%rbp), %xmm2
movss -0x2c(%rbp), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, 0x28(%rax)
movq -0x20(%rbp), %rax
movss 0x8749(%rip), %xmm0     # 0xf030
movss %xmm0, 0x3c(%rax)
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)