// File: /workspace/github_cpp_makefile_star2_O3/dannye[P]jed/src/encoder.cpp
// Function: forwardDCTBlockComponent(int*)
void forwardDCTBlockComponent(int* const component) {
    for (uint i = 0; i < 8; ++i) {
        const float a0 = component[0 * 8 + i];
        const float a1 = component[1 * 8 + i];
        const float a2 = component[2 * 8 + i];
        const float a3 = component[3 * 8 + i];
        const float a4 = component[4 * 8 + i];
        const float a5 = component[5 * 8 + i];
        const float a6 = component[6 * 8 + i];
        const float a7 = component[7 * 8 + i];

        const float b0 = a0 + a7;
        const float b1 = a1 + a6;
        const float b2 = a2 + a5;
        const float b3 = a3 + a4;
        const float b4 = a3 - a4;
        const float b5 = a2 - a5;
        const float b6 = a1 - a6;
        const float b7 = a0 - a7;

        const float c0 = b0 + b3;
        const float c1 = b1 + b2;
        const float c2 = b1 - b2;
        const float c3 = b0 - b3;
        const float c4 = b4;
        const float c5 = b5 - b4;
        const float c6 = b6 - c5;
        const float c7 = b7 - b6;

        const float d0 = c0 + c1;
        const float d1 = c0 - c1;
        const float d2 = c2;
        const float d3 = c3 - c2;
        const float d4 = c4;
        const float d5 = c5;
        const float d6 = c6;
        const float d7 = c5 + c7;
        const float d8 = c4 - c6;

        const float e0 = d0;
        const float e1 = d1;
        const float e2 = d2 * m1;
        const float e3 = d3;
        const float e4 = d4 * m2;
        const float e5 = d5 * m3;
        const float e6 = d6 * m4;
        const float e7 = d7;
        const float e8 = d8 * m5;

        const float f0 = e0;
        const float f1 = e1;
        const float f2 = e2 + e3;
        const float f3 = e3 - e2;
        const float f4 = e4 + e8;
        const float f5 = e5 + e7;
        const float f6 = e6 + e8;
        const float f7 = e7 - e5;

        const float g0 = f0;
        const float g1 = f1;
        const float g2 = f2;
        const float g3 = f3;
        const float g4 = f4 + f7;
        const float g5 = f5 + f6;
        const float g6 = f5 - f6;
        const float g7 = f7 - f4;

        component[0 * 8 + i] = g0 * s0;
        component[4 * 8 + i] = g1 * s4;
        component[2 * 8 + i] = g2 * s2;
        component[6 * 8 + i] = g3 * s6;
        component[5 * 8 + i] = g4 * s5;
        component[1 * 8 + i] = g5 * s1;
        component[7 * 8 + i] = g6 * s7;
        component[3 * 8 + i] = g7 * s3;
    }
    for (uint i = 0; i < 8; ++i) {
        const float a0 = component[i * 8 + 0];
        const float a1 = component[i * 8 + 1];
        const float a2 = component[i * 8 + 2];
        const float a3 = component[i * 8 + 3];
        const float a4 = component[i * 8 + 4];
        const float a5 = component[i * 8 + 5];
        const float a6 = component[i * 8 + 6];
        const float a7 = component[i * 8 + 7];

        const float b0 = a0 + a7;
        const float b1 = a1 + a6;
        const float b2 = a2 + a5;
        const float b3 = a3 + a4;
        const float b4 = a3 - a4;
        const float b5 = a2 - a5;
        const float b6 = a1 - a6;
        const float b7 = a0 - a7;

        const float c0 = b0 + b3;
        const float c1 = b1 + b2;
        const float c2 = b1 - b2;
        const float c3 = b0 - b3;
        const float c4 = b4;
        const float c5 = b5 - b4;
        const float c6 = b6 - c5;
        const float c7 = b7 - b6;

        const float d0 = c0 + c1;
        const float d1 = c0 - c1;
        const float d2 = c2;
        const float d3 = c3 - c2;
        const float d4 = c4;
        const float d5 = c5;
        const float d6 = c6;
        const float d7 = c5 + c7;
        const float d8 = c4 - c6;

        const float e0 = d0;
        const float e1 = d1;
        const float e2 = d2 * m1;
        const float e3 = d3;
        const float e4 = d4 * m2;
        const float e5 = d5 * m3;
        const float e6 = d6 * m4;
        const float e7 = d7;
        const float e8 = d8 * m5;

        const float f0 = e0;
        const float f1 = e1;
        const float f2 = e2 + e3;
        const float f3 = e3 - e2;
        const float f4 = e4 + e8;
        const float f5 = e5 + e7;
        const float f6 = e6 + e8;
        const float f7 = e7 - e5;

        const float g0 = f0;
        const float g1 = f1;
        const float g2 = f2;
        const float g3 = f3;
        const float g4 = f4 + f7;
        const float g5 = f5 + f6;
        const float g6 = f5 - f6;
        const float g7 = f7 - f4;

        component[i * 8 + 0] = g0 * s0;
        component[i * 8 + 4] = g1 * s4;
        component[i * 8 + 2] = g2 * s2;
        component[i * 8 + 6] = g3 * s6;
        component[i * 8 + 5] = g4 * s5;
        component[i * 8 + 1] = g5 * s1;
        component[i * 8 + 7] = g6 * s7;
        component[i * 8 + 3] = g7 * s3;
    }
}

// Assembly:
subq $0x48, %rsp
movss 0x5492(%rip), %xmm8     # 0x7f4c
movss 0x54b5(%rip), %xmm9     # 0x7f78
movss 0x5484(%rip), %xmm10    # 0x7f50
movss 0x54a7(%rip), %xmm11    # 0x7f7c
movss 0x5477(%rip), %xmm0     # 0x7f54
movss 0x5473(%rip), %xmm1     # 0x7f58
movss 0x547b(%rip), %xmm2     # 0x7f68
movss 0x546b(%rip), %xmm3     # 0x7f60
movss 0x5473(%rip), %xmm4     # 0x7f70
movss 0x5466(%rip), %xmm15    # 0x7f6c
movss 0x544e(%rip), %xmm5     # 0x7f5c
movss 0x545e(%rip), %xmm6     # 0x7f74
movss 0x5446(%rip), %xmm7     # 0x7f64
shufps $0x0, %xmm8, %xmm8      # xmm8 = xmm8[0,0,0,0]
shufps $0x0, %xmm9, %xmm9      # xmm9 = xmm9[0,0,0,0]
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
shufps $0x0, %xmm11, %xmm11    # xmm11 = xmm11[0,0,0,0]
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x10(%rsp)
shufps $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movaps %xmm1, -0x20(%rsp)
shufps $0x0, %xmm2, %xmm2      # xmm2 = xmm2[0,0,0,0]
movaps %xmm2, -0x30(%rsp)
shufps $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
movaps %xmm3, -0x40(%rsp)
shufps $0x0, %xmm4, %xmm4      # xmm4 = xmm4[0,0,0,0]
movaps %xmm4, -0x50(%rsp)
shufps $0x0, %xmm15, %xmm15    # xmm15 = xmm15[0,0,0,0]
shufps $0x0, %xmm5, %xmm5      # xmm5 = xmm5[0,0,0,0]
movaps %xmm5, -0x60(%rsp)
shufps $0x0, %xmm6, %xmm6      # xmm6 = xmm6[0,0,0,0]
movaps %xmm6, -0x70(%rsp)
shufps $0x0, %xmm7, %xmm7      # xmm7 = xmm7[0,0,0,0]
movaps %xmm7, -0x80(%rsp)
movq $-0x8, %rax
movups 0x20(%rdi,%rax,4), %xmm0
movups 0x40(%rdi,%rax,4), %xmm1
movups 0x60(%rdi,%rax,4), %xmm2
movups 0x80(%rdi,%rax,4), %xmm3
cvtdq2ps %xmm0, %xmm13
cvtdq2ps %xmm1, %xmm1
cvtdq2ps %xmm2, %xmm14
cvtdq2ps %xmm3, %xmm0
movups 0xa0(%rdi,%rax,4), %xmm2
cvtdq2ps %xmm2, %xmm2
movups 0xc0(%rdi,%rax,4), %xmm3
cvtdq2ps %xmm3, %xmm3
movups 0xe0(%rdi,%rax,4), %xmm4
cvtdq2ps %xmm4, %xmm5
movups 0x100(%rdi,%rax,4), %xmm4
cvtdq2ps %xmm4, %xmm6
movaps %xmm0, %xmm7
addps %xmm2, %xmm7
subps %xmm2, %xmm0
movaps %xmm14, %xmm2
addps %xmm3, %xmm2
subps %xmm3, %xmm14
movaps %xmm1, %xmm4
addps %xmm5, %xmm4
subps %xmm5, %xmm1
movaps %xmm15, %xmm12
movaps %xmm13, %xmm15
addps %xmm6, %xmm15
subps %xmm6, %xmm13
movaps %xmm2, %xmm5
addps %xmm4, %xmm5
subps %xmm2, %xmm4
movaps %xmm7, %xmm2
addps %xmm15, %xmm2
subps %xmm7, %xmm15
subps %xmm0, %xmm14
subps %xmm1, %xmm13
subps %xmm14, %xmm1
movaps %xmm5, %xmm3
addps %xmm2, %xmm3
subps %xmm5, %xmm2
subps %xmm4, %xmm15
addps %xmm14, %xmm13
mulps %xmm8, %xmm4
movaps %xmm4, %xmm5
addps %xmm15, %xmm5
subps %xmm4, %xmm15
movaps %xmm0, %xmm4
subps %xmm1, %xmm4
mulps %xmm9, %xmm0
mulps %xmm10, %xmm14
mulps %xmm11, %xmm1
mulps -0x10(%rsp), %xmm4
addps %xmm4, %xmm0
addps %xmm1, %xmm4
movaps %xmm14, %xmm1
addps %xmm13, %xmm1
subps %xmm14, %xmm13
movaps %xmm1, %xmm6
addps %xmm4, %xmm6
subps %xmm4, %xmm1
movaps %xmm13, %xmm4
addps %xmm0, %xmm4
subps %xmm0, %xmm13
mulps -0x20(%rsp), %xmm3
cvttps2dq %xmm3, %xmm0
movups %xmm0, 0x20(%rdi,%rax,4)
mulps -0x30(%rsp), %xmm2
cvttps2dq %xmm2, %xmm0
movups %xmm0, 0xa0(%rdi,%rax,4)
mulps -0x40(%rsp), %xmm5
cvttps2dq %xmm5, %xmm0
movups %xmm0, 0x60(%rdi,%rax,4)
mulps -0x50(%rsp), %xmm15
cvttps2dq %xmm15, %xmm0
movaps %xmm12, %xmm15
movups %xmm0, 0xe0(%rdi,%rax,4)
mulps %xmm12, %xmm4
cvttps2dq %xmm4, %xmm0
movups %xmm0, 0xc0(%rdi,%rax,4)
mulps -0x60(%rsp), %xmm6
cvttps2dq %xmm6, %xmm0
movups %xmm0, 0x40(%rdi,%rax,4)
mulps -0x70(%rsp), %xmm1
cvttps2dq %xmm1, %xmm0
movups %xmm0, 0x100(%rdi,%rax,4)
mulps -0x80(%rsp), %xmm13
cvttps2dq %xmm13, %xmm0
movups %xmm0, 0x80(%rdi,%rax,4)
addq $0x4, %rax
jne 0x2b86
xorl %eax, %eax
movaps %xmm8, 0x30(%rsp)
movaps %xmm9, 0x20(%rsp)
movaps %xmm10, 0x10(%rsp)
movaps %xmm11, (%rsp)
movups 0x70(%rdi,%rax), %xmm3
movups 0x50(%rdi,%rax), %xmm2
movups (%rdi,%rax), %xmm1
movups 0x10(%rdi,%rax), %xmm0
movups 0x20(%rdi,%rax), %xmm4
movups 0x30(%rdi,%rax), %xmm5
movups 0x60(%rdi,%rax), %xmm6
movups 0x40(%rdi,%rax), %xmm7
movaps %xmm7, %xmm8
unpcklps %xmm6, %xmm8            # xmm8 = xmm8[0],xmm6[0],xmm8[1],xmm6[1]
movaps %xmm1, %xmm9
unpcklps %xmm4, %xmm9            # xmm9 = xmm9[0],xmm4[0],xmm9[1],xmm4[1]
movaps %xmm9, %xmm10
movlhps %xmm8, %xmm10           # xmm10 = xmm10[0],xmm8[0]
unpckhpd %xmm8, %xmm9            # xmm9 = xmm9[1],xmm8[1]
unpckhps %xmm6, %xmm7            # xmm7 = xmm7[2],xmm6[2],xmm7[3],xmm6[3]
unpckhps %xmm4, %xmm1            # xmm1 = xmm1[2],xmm4[2],xmm1[3],xmm4[3]
movaps %xmm1, %xmm4
movlhps %xmm7, %xmm4            # xmm4 = xmm4[0],xmm7[0]
unpckhpd %xmm7, %xmm1            # xmm1 = xmm1[1],xmm7[1]
movaps %xmm2, %xmm6
unpcklps %xmm3, %xmm6            # xmm6 = xmm6[0],xmm3[0],xmm6[1],xmm3[1]
movaps %xmm0, %xmm7
unpcklps %xmm5, %xmm7            # xmm7 = xmm7[0],xmm5[0],xmm7[1],xmm5[1]
movaps %xmm7, %xmm8
movlhps %xmm6, %xmm8            # xmm8 = xmm8[0],xmm6[0]
unpckhpd %xmm6, %xmm7            # xmm7 = xmm7[1],xmm6[1]
unpckhps %xmm3, %xmm2            # xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
unpckhps %xmm5, %xmm0            # xmm0 = xmm0[2],xmm5[2],xmm0[3],xmm5[3]
movaps %xmm0, %xmm3
movlhps %xmm2, %xmm3            # xmm3 = xmm3[0],xmm2[0]
unpckhpd %xmm2, %xmm0            # xmm0 = xmm0[1],xmm2[1]
cvtdq2ps %xmm10, %xmm14
cvtdq2ps %xmm9, %xmm5
cvtdq2ps %xmm4, %xmm4
cvtdq2ps %xmm1, %xmm2
cvtdq2ps %xmm8, %xmm6
cvtdq2ps %xmm7, %xmm7
cvtdq2ps %xmm3, %xmm3
cvtdq2ps %xmm0, %xmm0
movaps %xmm14, %xmm11
addps %xmm0, %xmm11
movaps %xmm5, %xmm1
addps %xmm3, %xmm1
movaps %xmm4, %xmm8
addps %xmm7, %xmm8
movaps %xmm2, %xmm9
addps %xmm6, %xmm9
subps %xmm6, %xmm2
subps %xmm7, %xmm4
subps %xmm3, %xmm5
subps %xmm0, %xmm14
movaps %xmm9, %xmm13
addps %xmm11, %xmm13
movaps %xmm8, %xmm3
addps %xmm1, %xmm3
subps %xmm8, %xmm1
subps %xmm9, %xmm11
subps %xmm2, %xmm4
subps %xmm5, %xmm14
subps %xmm4, %xmm5
movaps %xmm3, %xmm0
addps %xmm13, %xmm0
subps %xmm3, %xmm13
subps %xmm1, %xmm11
addps %xmm4, %xmm14
movaps %xmm2, %xmm7
subps %xmm5, %xmm7
mulps 0x30(%rsp), %xmm1
mulps 0x20(%rsp), %xmm2
mulps 0x10(%rsp), %xmm4
mulps (%rsp), %xmm5
mulps -0x10(%rsp), %xmm7
movaps %xmm1, %xmm3
addps %xmm11, %xmm3
subps %xmm1, %xmm11
addps %xmm7, %xmm2
movaps %xmm4, %xmm1
addps %xmm14, %xmm1
addps %xmm5, %xmm7
subps %xmm4, %xmm14
movaps %xmm14, %xmm6
addps %xmm2, %xmm6
movaps %xmm1, %xmm5
addps %xmm7, %xmm5
subps %xmm7, %xmm1
subps %xmm2, %xmm14
mulps -0x20(%rsp), %xmm0
mulps -0x30(%rsp), %xmm13
mulps -0x40(%rsp), %xmm3
mulps -0x50(%rsp), %xmm11
mulps %xmm15, %xmm6
mulps -0x60(%rsp), %xmm5
mulps -0x70(%rsp), %xmm1
mulps -0x80(%rsp), %xmm14
movaps %xmm3, %xmm4
unpckhps %xmm14, %xmm4           # xmm4 = xmm4[2],xmm14[2],xmm4[3],xmm14[3]
movaps %xmm5, %xmm2
shufps $0x33, %xmm0, %xmm2     # xmm2 = xmm2[3,0],xmm0[3,0]
shufps $0xe2, %xmm4, %xmm2     # xmm2 = xmm2[2,0],xmm4[2,3]
movaps %xmm11, %xmm4
unpckhps %xmm1, %xmm4            # xmm4 = xmm4[2],xmm1[2],xmm4[3],xmm1[3]
movaps %xmm6, %xmm10
shufps $0x33, %xmm13, %xmm10   # xmm10 = xmm10[3,0],xmm13[3,0]
shufps $0xe2, %xmm4, %xmm10    # xmm10 = xmm10[2,0],xmm4[2,3]
movaps %xmm14, %xmm4
unpckhpd %xmm3, %xmm4            # xmm4 = xmm4[1],xmm3[1]
movaps %xmm0, %xmm7
unpckhps %xmm5, %xmm7            # xmm7 = xmm7[2],xmm5[2],xmm7[3],xmm5[3]
shufps $0x24, %xmm4, %xmm7     # xmm7 = xmm7[0,1],xmm4[2,0]
movaps %xmm1, %xmm4
unpckhpd %xmm11, %xmm4           # xmm4 = xmm4[1],xmm11[1]
movaps %xmm13, %xmm8
unpckhps %xmm6, %xmm8            # xmm8 = xmm8[2],xmm6[2],xmm8[3],xmm6[3]
shufps $0x24, %xmm4, %xmm8     # xmm8 = xmm8[0,1],xmm4[2,0]
movaps %xmm3, %xmm4
unpcklps %xmm14, %xmm4           # xmm4 = xmm4[0],xmm14[0],xmm4[1],xmm14[1]
movaps %xmm5, %xmm9
shufps $0x11, %xmm0, %xmm9     # xmm9 = xmm9[1,0],xmm0[1,0]
shufps $0xe2, %xmm4, %xmm9     # xmm9 = xmm9[2,0],xmm4[2,3]
movaps %xmm11, %xmm15
unpcklps %xmm1, %xmm15           # xmm15 = xmm15[0],xmm1[0],xmm15[1],xmm1[1]
movaps %xmm6, %xmm4
shufps $0x11, %xmm13, %xmm4    # xmm4 = xmm4[1,0],xmm13[1,0]
shufps $0xe2, %xmm15, %xmm4    # xmm4 = xmm4[2,0],xmm15[2,3]
movaps %xmm12, %xmm15
movlhps %xmm3, %xmm14           # xmm14 = xmm14[0],xmm3[0]
unpcklps %xmm5, %xmm0            # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
shufps $0x24, %xmm14, %xmm0    # xmm0 = xmm0[0,1],xmm14[2,0]
movlhps %xmm11, %xmm1           # xmm1 = xmm1[0],xmm11[0]
unpcklps %xmm6, %xmm13           # xmm13 = xmm13[0],xmm6[0],xmm13[1],xmm6[1]
shufps $0x24, %xmm1, %xmm13    # xmm13 = xmm13[0,1],xmm1[2,0]
cvttps2dq %xmm2, %xmm1
movups %xmm1, 0x60(%rdi,%rax)
cvttps2dq %xmm10, %xmm1
movups %xmm1, 0x70(%rdi,%rax)
cvttps2dq %xmm7, %xmm1
movups %xmm1, 0x40(%rdi,%rax)
cvttps2dq %xmm8, %xmm1
movups %xmm1, 0x50(%rdi,%rax)
cvttps2dq %xmm9, %xmm1
movups %xmm1, 0x20(%rdi,%rax)
cvttps2dq %xmm4, %xmm1
movups %xmm1, 0x30(%rdi,%rax)
cvttps2dq %xmm0, %xmm0
movups %xmm0, (%rdi,%rax)
cvttps2dq %xmm13, %xmm0
movups %xmm0, 0x10(%rdi,%rax)
subq $-0x80, %rax
cmpq $0x100, %rax            # imm = 0x100
jne 0x2d2a
addq $0x48, %rsp
retq