// File: /workspace/github_c_makefile_star2_O3/adelciotto[P]plasma/src/cube_plasma.c
// Function: DrawFrame
void DrawFrame(double elapsedTimeSecs) {
    float camX = 0.0f;
    float camY = 0.0f;
    float camZ = 1.5f + Min(sinf(elapsedTimeSecs * PI / 4.0) +
                                cosf(elapsedTimeSecs * 0.5f * PI / 4.0) +
                                sinf(elapsedTimeSecs * 0.2f * PI / 6.0),
                            0.5);

    Mat4LookAt((Vec3){camX, camY, camZ}, (Vec3){0.0f, 0.0f, 0.0f},
               (Vec3){0.0f, 1.0f, 0.0f}, gView);

    Mat4 identity = MAT4_IDENTITY_INIT;
    Mat4 transform = MAT4_IDENTITY_INIT;
    float t = elapsedTimeSecs * 0.5;
    Mat4RotateZ(identity, transform, sinf(t * PI / 2.0) + sinf(t * PI / 6.0));

    Mat4 out;
    Mat4RotateX(transform, out, cosf(t * PI / 2.0));

    Mat4 outA;
    Mat4RotateY(out, outA, sinf(t * PI / 4.0) + cosf(t * PI / 2.0));

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(gProgramId);

    glUniformMatrix4fv(gUniformModelLocation, 1, GL_FALSE, outA);
    glUniformMatrix4fv(gUniformViewLocation, 1, GL_FALSE, gView);
    glUniformMatrix4fv(gUniformProjectionLocation, 1, GL_FALSE, gProj);
    glUniform3f(gUniformViewPositionLocation, camX, camY, camZ);
    glUniform1f(gUniformScaleLocation, 20.0f);
    glUniform1f(gUniformTimeLocation, elapsedTimeSecs);

    glDrawArrays(GL_TRIANGLES, 0, 36);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x130, %rsp            # imm = 0x130
movsd %xmm0, 0x38(%rsp)
movapd %xmm0, %xmm1
mulsd 0x134a(%rip), %xmm1     # 0x4058
mulsd 0x134a(%rip), %xmm1     # 0x4060
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
callq 0x2030
movss %xmm0, 0x10(%rsp)
movsd 0x38(%rsp), %xmm1
mulsd 0x1332(%rip), %xmm1     # 0x4068
movsd %xmm1, 0x20(%rsp)
movapd %xmm1, %xmm0
mulsd 0x1310(%rip), %xmm0     # 0x4058
mulsd 0x1310(%rip), %xmm0     # 0x4060
cvtsd2ss %xmm0, %xmm0
callq 0x21a0
addss 0x10(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
movsd 0x1303(%rip), %xmm0     # 0x4070
mulsd 0x38(%rsp), %xmm0
mulsd 0x12dd(%rip), %xmm0     # 0x4058
divsd 0x12f5(%rip), %xmm0     # 0x4078
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss 0x10(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x12c9(%rip), %xmm12    # 0x4068
maxsd %xmm12, %xmm0
addsd 0x12d4(%rip), %xmm0     # 0x4080
xorps %xmm1, %xmm1
cvtsd2ss %xmm0, %xmm1
xorps %xmm7, %xmm7
xorps %xmm0, %xmm0
subss %xmm1, %xmm0
movaps %xmm1, %xmm10
movaps %xmm0, %xmm1
mulss %xmm0, %xmm1
addss %xmm7, %xmm1
sqrtss %xmm1, %xmm1
xorps %xmm5, %xmm5
divss %xmm1, %xmm5
divss %xmm1, %xmm0
movaps %xmm5, %xmm1
mulss %xmm7, %xmm1
movaps %xmm1, %xmm2
subss %xmm0, %xmm2
movaps %xmm5, %xmm6
movss 0x12a0(%rip), %xmm4     # 0x4094
movaps %xmm5, %xmm3
mulss %xmm4, %xmm3
movaps %xmm0, %xmm4
mulss %xmm7, %xmm4
addss %xmm3, %xmm4
addss %xmm5, %xmm3
movaps %xmm4, %xmm7
mulss %xmm4, %xmm7
movaps %xmm2, %xmm8
mulss %xmm2, %xmm8
addss %xmm7, %xmm8
movaps %xmm3, %xmm7
mulss %xmm3, %xmm7
addss %xmm8, %xmm7
sqrtss %xmm7, %xmm7
divss %xmm7, %xmm2
divss %xmm7, %xmm4
divss %xmm7, %xmm3
movaps %xmm4, %xmm7
mulss %xmm0, %xmm7
movaps %xmm3, %xmm9
mulss %xmm5, %xmm9
subss %xmm9, %xmm7
movaps %xmm0, %xmm8
mulss %xmm2, %xmm8
subss %xmm8, %xmm9
movaps %xmm2, %xmm8
mulss %xmm5, %xmm8
mulss %xmm4, %xmm5
subss %xmm5, %xmm8
movaps 0x11c8(%rip), %xmm11    # 0x4040
xorps %xmm11, %xmm6
movss %xmm2, 0x330c(%rip)     # 0x6190
movss %xmm7, 0x3308(%rip)     # 0x6194
movss %xmm6, 0x3304(%rip)     # 0x6198
movss %xmm4, 0x3304(%rip)     # 0x61a0
movss %xmm9, 0x32ff(%rip)     # 0x61a4
movss %xmm6, 0x32fb(%rip)     # 0x61a8
movaps %xmm0, %xmm5
xorps %xmm11, %xmm5
movss %xmm3, 0x32f4(%rip)     # 0x61b0
movss %xmm8, 0x32ef(%rip)     # 0x61b4
movss %xmm5, 0x32eb(%rip)     # 0x61b8
unpcklps %xmm9, %xmm4            # xmm4 = xmm4[0],xmm9[0],xmm4[1],xmm9[1]
unpcklps %xmm7, %xmm2            # xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
xorps %xmm5, %xmm5
mulps %xmm5, %xmm4
mulps %xmm5, %xmm2
addps %xmm4, %xmm2
unpcklps %xmm8, %xmm3            # xmm3 = xmm3[0],xmm8[0],xmm3[1],xmm8[1]
movaps %xmm10, 0xe0(%rsp)
movaps %xmm10, %xmm4
unpcklps %xmm10, %xmm4           # xmm4 = xmm4[0],xmm10[0],xmm4[1],xmm10[1]
mulps %xmm3, %xmm4
addps %xmm2, %xmm4
xorps %xmm11, %xmm4
movlps %xmm4, 0x32ba(%rip)     # 0x61c0
addss %xmm1, %xmm1
mulss %xmm10, %xmm0
addss %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtsd2ss 0x20(%rsp), %xmm1
movss %xmm0, 0x32a4(%rip)     # 0x61c8
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
mulsd 0x1125(%rip), %xmm0     # 0x4058
movsd %xmm0, 0x30(%rsp)
leaq 0x3250(%rip), %rbx      # 0x6190
xorl %eax, %eax
movl %eax, 0x3274(%rip)      # 0x61bc
movl %eax, 0x325e(%rip)      # 0x61ac
movl %eax, 0x3248(%rip)      # 0x619c
movl $0x3f800000, 0x326e(%rip) # imm = 0x3F800000
movapd %xmm12, %xmm1
mulsd %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
movss %xmm0, 0x40(%rsp)
callq 0x2030
movss %xmm0, 0x20(%rsp)
movsd 0x30(%rsp), %xmm0
divsd 0x10eb(%rip), %xmm0     # 0x4078
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss 0x20(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
callq 0x21a0
movaps %xmm0, 0x20(%rsp)
movss 0x10(%rsp), %xmm0
callq 0x2030
movaps %xmm0, %xmm2
movss 0x10d2(%rip), %xmm1     # 0x4094
mulss %xmm1, %xmm2
movaps 0x20(%rsp), %xmm5
movaps %xmm5, %xmm3
addss %xmm2, %xmm3
movaps %xmm2, %xmm4
xorps %xmm1, %xmm1
addss %xmm1, %xmm3
movss %xmm3, 0x4(%rsp)
movaps %xmm5, %xmm2
mulss %xmm1, %xmm2
movaps %xmm0, %xmm3
addss %xmm2, %xmm3
addss %xmm1, %xmm3
movaps %xmm3, 0x60(%rsp)
movaps %xmm2, %xmm3
subss %xmm0, %xmm3
addss %xmm1, %xmm3
movss %xmm3, 0x8(%rsp)
mulss %xmm1, %xmm0
movaps %xmm5, %xmm3
addss %xmm0, %xmm3
addss %xmm1, %xmm3
movaps %xmm3, 0x20(%rsp)
addss %xmm2, %xmm4
addss %xmm1, %xmm4
movss %xmm4, 0xc(%rsp)
addss %xmm2, %xmm0
addss %xmm1, %xmm0
movaps %xmm0, 0x10(%rsp)
movss 0x40(%rsp), %xmm0
callq 0x21a0
movss %xmm0, 0x50(%rsp)
callq 0x21a0
movaps %xmm0, 0x70(%rsp)
movss 0x50(%rsp), %xmm0
callq 0x2030
movaps 0x60(%rsp), %xmm5
movaps %xmm5, %xmm1
xorps %xmm6, %xmm6
mulss %xmm6, %xmm1
movss 0x4(%rsp), %xmm2
movaps %xmm2, %xmm3
addss %xmm1, %xmm3
movaps %xmm3, 0xa0(%rsp)
movaps %xmm5, %xmm4
movaps %xmm5, %xmm14
movaps 0x70(%rsp), %xmm15
mulss %xmm15, %xmm4
mulss %xmm6, %xmm2
addss %xmm2, %xmm4
movaps %xmm2, %xmm3
movss 0xfec(%rip), %xmm2      # 0x4094
mulss %xmm0, %xmm2
addss %xmm2, %xmm4
movaps %xmm4, %xmm13
movaps %xmm2, %xmm5
mulss %xmm0, %xmm14
addss %xmm3, %xmm14
addss %xmm1, %xmm3
movaps %xmm3, %xmm11
movaps 0x20(%rsp), %xmm12
movaps %xmm12, %xmm1
xorps %xmm2, %xmm2
mulss %xmm2, %xmm1
movss 0x8(%rsp), %xmm3
movaps %xmm3, %xmm4
addss %xmm1, %xmm4
movaps %xmm4, 0xc0(%rsp)
movaps %xmm12, %xmm4
mulss %xmm15, %xmm4
mulss %xmm2, %xmm3
addss %xmm3, %xmm4
addss %xmm5, %xmm4
movaps %xmm4, %xmm10
mulss %xmm0, %xmm12
addss %xmm3, %xmm12
addss %xmm1, %xmm3
movaps %xmm3, %xmm9
movaps 0x10(%rsp), %xmm3
movaps %xmm3, %xmm1
movss 0xc(%rsp), %xmm4
movaps %xmm4, %xmm8
movaps %xmm3, %xmm7
movaps %xmm3, %xmm6
mulss %xmm15, %xmm7
mulss %xmm2, %xmm4
addss %xmm4, %xmm7
addss %xmm7, %xmm5
subss %xmm0, %xmm7
mulss %xmm0, %xmm6
addss %xmm2, %xmm13
movaps %xmm13, 0x80(%rsp)
mulss %xmm2, %xmm1
addss %xmm1, %xmm8
movaps %xmm8, 0xd0(%rsp)
addss %xmm4, %xmm6
addss %xmm1, %xmm4
movaps %xmm15, %xmm1
movaps %xmm15, %xmm0
mulss %xmm2, %xmm0
movaps %xmm14, %xmm3
addss %xmm0, %xmm3
addss %xmm2, %xmm3
movaps %xmm3, 0x60(%rsp)
addss %xmm2, %xmm11
movss %xmm11, 0x4(%rsp)
addss %xmm2, %xmm10
movaps %xmm10, 0x90(%rsp)
movaps %xmm12, %xmm3
addss %xmm0, %xmm3
addss %xmm2, %xmm3
movaps %xmm3, 0x20(%rsp)
addss %xmm2, %xmm9
movss %xmm9, 0x8(%rsp)
addss %xmm2, %xmm7
movaps %xmm7, 0xb0(%rsp)
addss %xmm6, %xmm1
addss %xmm2, %xmm1
movaps %xmm1, 0x70(%rsp)
addss %xmm2, %xmm4
movss %xmm4, 0xc(%rsp)
addss %xmm2, %xmm5
movaps %xmm5, 0x50(%rsp)
addss %xmm0, %xmm6
addss %xmm2, %xmm6
movaps %xmm6, 0x10(%rsp)
movsd 0x30(%rsp), %xmm1
mulsd 0xe52(%rip), %xmm1      # 0x4060
movaps %xmm4, %xmm0
addss 0xe7f(%rip), %xmm0      # 0x4098
movss %xmm0, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
callq 0x2030
movss %xmm0, (%rsp)
movss 0x40(%rsp), %xmm0
callq 0x21a0
addss (%rsp), %xmm0
movss %xmm0, (%rsp)
callq 0x21a0
movaps %xmm0, 0x40(%rsp)
movss (%rsp), %xmm0
callq 0x2030
movaps 0x80(%rsp), %xmm3
movaps %xmm3, %xmm2
mulss 0xe34(%rip), %xmm2      # 0x40a0
movaps %xmm2, %xmm1
unpcklps %xmm3, %xmm1            # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movaps 0xa0(%rsp), %xmm5
movaps %xmm5, %xmm4
unpcklps %xmm5, %xmm4            # xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
xorps %xmm6, %xmm6
movaps 0x40(%rsp), %xmm9
movss %xmm9, %xmm6            # xmm6 = xmm9[0],xmm6[1,2,3]
mulps %xmm6, %xmm4
addps %xmm1, %xmm4
xorps %xmm1, %xmm1
movss %xmm0, %xmm1            # xmm1 = xmm0[0],xmm1[1,2,3]
movaps 0x60(%rsp), %xmm7
movaps %xmm7, %xmm3
unpcklps %xmm7, %xmm3            # xmm3 = xmm3[0],xmm7[0],xmm3[1],xmm7[1]
mulps %xmm1, %xmm3
addps %xmm4, %xmm3
movaps %xmm5, %xmm4
xorps %xmm10, %xmm10
mulss %xmm10, %xmm5
addss %xmm2, %xmm5
mulss %xmm0, %xmm4
subss %xmm4, %xmm2
movaps %xmm7, %xmm4
movaps %xmm7, %xmm8
mulss %xmm9, %xmm4
addss %xmm2, %xmm4
movss 0x4(%rsp), %xmm7
movaps %xmm7, %xmm2
mulss %xmm10, %xmm2
addss %xmm2, %xmm4
unpcklps %xmm2, %xmm2            # xmm2 = xmm2[0,0,1,1]
addps %xmm3, %xmm2
leaq 0xf0(%rsp), %r14
movlps %xmm2, (%r14)
movss %xmm4, 0x8(%r14)
movaps %xmm8, %xmm2
xorps %xmm3, %xmm3
mulss %xmm3, %xmm2
addss %xmm5, %xmm2
addss %xmm7, %xmm2
movss %xmm2, 0xc(%r14)
movaps 0x90(%rsp), %xmm4
movaps %xmm4, %xmm2
mulss %xmm3, %xmm2
xorps %xmm11, %xmm11
movaps %xmm2, %xmm3
unpcklps %xmm4, %xmm3            # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
movaps 0xc0(%rsp), %xmm7
movaps %xmm7, %xmm4
unpcklps %xmm7, %xmm4            # xmm4 = xmm4[0],xmm7[0],xmm4[1],xmm7[1]
mulps %xmm6, %xmm4
addps %xmm3, %xmm4
movaps 0x20(%rsp), %xmm8
movaps %xmm8, %xmm3
unpcklps %xmm8, %xmm3            # xmm3 = xmm3[0],xmm8[0],xmm3[1],xmm8[1]
mulps %xmm1, %xmm3
addps %xmm4, %xmm3
movaps 0xce1(%rip), %xmm5      # 0x4040
xorps %xmm0, %xmm5
movaps %xmm7, %xmm4
mulss %xmm7, %xmm0
mulss %xmm11, %xmm4
addss %xmm2, %xmm4
subss %xmm0, %xmm2
movaps %xmm8, %xmm0
mulss %xmm9, %xmm0
addss %xmm2, %xmm0
movss 0x8(%rsp), %xmm7
movaps %xmm7, %xmm2
mulss %xmm11, %xmm2
addss %xmm2, %xmm0
unpcklps %xmm2, %xmm2            # xmm2 = xmm2[0,0,1,1]
addps %xmm3, %xmm2
movlps %xmm2, 0x10(%r14)
movss %xmm0, 0x18(%r14)
movaps %xmm8, %xmm0
mulss %xmm11, %xmm0
addss %xmm4, %xmm0
addss %xmm7, %xmm0
movss %xmm0, 0x1c(%r14)
movaps 0xb0(%rsp), %xmm4
movaps %xmm4, %xmm2
mulss %xmm11, %xmm2
movaps 0xd0(%rsp), %xmm7
movaps %xmm7, %xmm0
shufps $0x0, %xmm7, %xmm0      # xmm0 = xmm0[0,0],xmm7[0,0]
movaps %xmm2, %xmm3
unpcklps %xmm4, %xmm3            # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
mulps %xmm6, %xmm0
addps %xmm0, %xmm3
movaps 0x70(%rsp), %xmm8
movaps %xmm8, %xmm4
unpcklps %xmm8, %xmm4            # xmm4 = xmm4[0],xmm8[0],xmm4[1],xmm8[1]
mulps %xmm1, %xmm4
addps %xmm3, %xmm4
mulss %xmm7, %xmm5
movaps %xmm5, %xmm3
movaps %xmm5, %xmm6
addss %xmm2, %xmm3
movaps %xmm8, %xmm5
mulss %xmm9, %xmm5
addss %xmm3, %xmm5
movss 0xc(%rsp), %xmm10
movaps %xmm10, %xmm3
mulss %xmm11, %xmm3
addss %xmm3, %xmm5
unpcklps %xmm3, %xmm3            # xmm3 = xmm3[0,0,1,1]
addps %xmm4, %xmm3
movlps %xmm3, 0x20(%r14)
movss %xmm5, 0x28(%r14)
movaps %xmm7, %xmm5
xorps %xmm4, %xmm4
mulss %xmm4, %xmm5
addss %xmm5, %xmm2
movaps %xmm8, %xmm3
mulss %xmm4, %xmm3
xorps %xmm7, %xmm7
addss %xmm2, %xmm3
addss %xmm10, %xmm3
movss %xmm3, 0x2c(%r14)
movaps 0x50(%rsp), %xmm4
movaps %xmm4, %xmm2
mulss %xmm7, %xmm2
movaps %xmm2, %xmm3
unpcklps %xmm4, %xmm3            # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
addps %xmm0, %xmm3
movaps 0x10(%rsp), %xmm4
movaps %xmm4, %xmm0
unpcklps %xmm4, %xmm0            # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
mulps %xmm1, %xmm0
addps %xmm3, %xmm0
movaps %xmm6, %xmm1
addss %xmm2, %xmm1
movaps %xmm9, %xmm3
mulss %xmm4, %xmm3
addss %xmm1, %xmm3
movaps %xmm3, %xmm6
movss 0x30(%rsp), %xmm3
movaps %xmm3, %xmm1
mulss %xmm7, %xmm1
addss %xmm1, %xmm6
unpcklps %xmm1, %xmm1            # xmm1 = xmm1[0,0,1,1]
addps %xmm0, %xmm1
movlps %xmm1, 0x30(%r14)
movss %xmm6, 0x38(%r14)
addss %xmm5, %xmm2
movaps %xmm4, %xmm0
mulss %xmm7, %xmm0
addss %xmm2, %xmm0
addss %xmm3, %xmm0
movss %xmm0, 0x3c(%r14)
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
xorps %xmm2, %xmm2
movss 0xbac(%rip), %xmm3      # 0x4098
callq 0x2070
movl $0x4100, %edi           # imm = 0x4100
callq 0x2180
movq 0x2aee(%rip), %rax      # 0x5ff0
movl 0x2cf8(%rip), %edi      # 0x6200
callq *(%rax)
movq 0x2a0f(%rip), %r15      # 0x5f20
movl 0x2c61(%rip), %edi      # 0x6178
movl $0x1, %esi
xorl %edx, %edx
movq %r14, %rcx
callq *(%r15)
movl 0x2c52(%rip), %edi      # 0x617c
movl $0x1, %esi
xorl %edx, %edx
movq %rbx, %rcx
callq *(%r15)
movl 0x2c43(%rip), %edi      # 0x6180
leaq 0x2ccc(%rip), %rcx      # 0x6210
movl $0x1, %esi
xorl %edx, %edx
callq *(%r15)
movq 0x2a33(%rip), %rax      # 0x5f88
movl 0x2c29(%rip), %edi      # 0x6184
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
movaps 0xe0(%rsp), %xmm2
callq *(%rax)
movq 0x2a06(%rip), %rbx      # 0x5f78
movl 0x2bfc(%rip), %edi      # 0x6174
movss 0xb1c(%rip), %xmm0      # 0x409c
callq *(%rbx)
movl 0x2be8(%rip), %edi      # 0x6170
xorps %xmm0, %xmm0
cvtsd2ss 0x38(%rsp), %xmm0
callq *(%rbx)
movl $0x4, %edi
xorl %esi, %esi
movl $0x24, %edx
callq 0x2240
addq $0x130, %rsp            # imm = 0x130
popq %rbx
popq %r14
popq %r15
retq