// File: /workspace/github_cpp_makefile_star2_O2/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:
pushq %rbx
movss 0x5655(%rip), %xmm0     # 0x7f5c
movaps %xmm0, -0x30(%rsp)
movss 0x5673(%rip), %xmm14    # 0x7f88
movss 0x5642(%rip), %xmm15    # 0x7f60
movss 0x5666(%rip), %xmm0     # 0x7f8c
movss %xmm0, -0x64(%rsp)
movss 0x5630(%rip), %xmm0     # 0x7f64
movss %xmm0, -0x68(%rsp)
movss 0x5626(%rip), %xmm0     # 0x7f68
movaps %xmm0, -0x10(%rsp)
movss 0x5629(%rip), %xmm0     # 0x7f78
movaps %xmm0, -0x20(%rsp)
movss 0x5614(%rip), %xmm7     # 0x7f70
movss 0x561b(%rip), %xmm9     # 0x7f80
movss 0x560f(%rip), %xmm0     # 0x7f7c
movaps %xmm0, -0x50(%rsp)
movss 0x55f2(%rip), %xmm0     # 0x7f6c
movaps %xmm0, -0x40(%rsp)
movss 0x55fc(%rip), %xmm12    # 0x7f84
movabsq $-0x20, %rax
movss 0x55da(%rip), %xmm0     # 0x7f74
movaps %xmm0, -0x60(%rsp)
testq %rax, %rax
je 0x2b4e
cvtsi2ssl 0x20(%rdi,%rax), %xmm1
cvtsi2ssl 0x40(%rdi,%rax), %xmm2
cvtsi2ssl 0x60(%rdi,%rax), %xmm5
cvtsi2ssl 0x80(%rdi,%rax), %xmm4
cvtsi2ssl 0xa0(%rdi,%rax), %xmm0
cvtsi2ssl 0xc0(%rdi,%rax), %xmm3
cvtsi2ssl 0xe0(%rdi,%rax), %xmm6
cvtsi2ssl 0x100(%rdi,%rax), %xmm8
movaps %xmm14, %xmm10
movaps %xmm4, %xmm14
addss %xmm0, %xmm14
subss %xmm0, %xmm4
movaps %xmm15, %xmm11
movaps %xmm5, %xmm15
addss %xmm3, %xmm15
subss %xmm3, %xmm5
movaps %xmm2, %xmm0
addss %xmm6, %xmm0
subss %xmm6, %xmm2
movaps %xmm1, %xmm13
addss %xmm8, %xmm13
subss %xmm8, %xmm1
movaps %xmm15, %xmm8
addss %xmm0, %xmm8
subss %xmm15, %xmm0
movaps %xmm11, %xmm15
movaps %xmm14, %xmm3
addss %xmm13, %xmm3
subss %xmm14, %xmm13
movaps %xmm10, %xmm14
movaps %xmm8, %xmm6
addss %xmm3, %xmm6
subss %xmm8, %xmm3
subss %xmm0, %xmm13
mulss -0x30(%rsp), %xmm0
mulss -0x10(%rsp), %xmm6
cvttss2si %xmm6, %ecx
movaps %xmm0, %xmm6
addss %xmm13, %xmm6
subss %xmm0, %xmm13
mulss -0x20(%rsp), %xmm3
cvttss2si %xmm3, %edx
subss %xmm4, %xmm5
subss %xmm2, %xmm1
subss %xmm5, %xmm2
mulss %xmm7, %xmm6
cvttss2si %xmm6, %esi
movaps %xmm4, %xmm0
subss %xmm2, %xmm0
mulss %xmm10, %xmm4
mulss -0x64(%rsp), %xmm2
mulss -0x68(%rsp), %xmm0
addss %xmm0, %xmm4
addss %xmm2, %xmm0
addss %xmm5, %xmm1
mulss %xmm11, %xmm5
mulss %xmm9, %xmm13
cvttss2si %xmm13, %r8d
movaps %xmm5, %xmm2
addss %xmm1, %xmm2
subss %xmm5, %xmm1
movaps %xmm1, %xmm3
addss %xmm4, %xmm3
mulss -0x50(%rsp), %xmm3
cvttss2si %xmm3, %r9d
movaps %xmm2, %xmm3
addss %xmm0, %xmm3
subss %xmm0, %xmm2
mulss -0x40(%rsp), %xmm3
cvttss2si %xmm3, %r10d
subss %xmm4, %xmm1
mulss %xmm12, %xmm2
cvttss2si %xmm2, %r11d
mulss -0x60(%rsp), %xmm1
cvttss2si %xmm1, %ebx
movl %ecx, 0x20(%rdi,%rax)
movl %edx, 0xa0(%rdi,%rax)
movl %esi, 0x60(%rdi,%rax)
movl %r8d, 0xe0(%rdi,%rax)
movl %r9d, 0xc0(%rdi,%rax)
movl %r10d, 0x40(%rdi,%rax)
movl %r11d, 0x100(%rdi,%rax)
movl %ebx, 0x80(%rdi,%rax)
addq $0x4, %rax
jmp 0x299f
unpcklpd -0x30(%rsp), %xmm6      # xmm6 = xmm6[0],mem[0]
unpcklps %xmm12, %xmm9           # xmm9 = xmm9[0],xmm12[0],xmm9[1],xmm12[1]
movaps -0x20(%rsp), %xmm13
unpcklps -0x50(%rsp), %xmm13     # xmm13 = xmm13[0],mem[0],xmm13[1],mem[1]
movlhps %xmm9, %xmm13           # xmm13 = xmm13[0],xmm9[0]
unpcklps -0x60(%rsp), %xmm7      # xmm7 = xmm7[0],mem[0],xmm7[1],mem[1]
movaps -0x10(%rsp), %xmm5
unpcklps -0x40(%rsp), %xmm5      # xmm5 = xmm5[0],mem[0],xmm5[1],mem[1]
movlhps %xmm7, %xmm5            # xmm5 = xmm5[0],xmm7[0]
xorl %eax, %eax
cmpq $0x100, %rax            # imm = 0x100
je 0x2cfc
movsd 0x8(%rdi,%rax), %xmm0
cvtdq2ps %xmm0, %xmm8
movsd 0x10(%rdi,%rax), %xmm0
cvtdq2ps %xmm0, %xmm0
movsd (%rdi,%rax), %xmm1
cvtdq2ps %xmm1, %xmm7
movsd 0x18(%rdi,%rax), %xmm1
cvtdq2ps %xmm1, %xmm1
movaps %xmm0, %xmm2
shufps $0xd4, %xmm1, %xmm2     # xmm2 = xmm2[0,1],xmm1[1,3]
shufps $0xe2, %xmm1, %xmm2     # xmm2 = xmm2[2,0],xmm1[2,3]
movaps %xmm1, %xmm3
shufps $0xe1, %xmm1, %xmm3     # xmm3 = xmm3[1,0],xmm1[2,3]
movaps %xmm3, %xmm9
addps %xmm7, %xmm9
movaps %xmm8, %xmm1
shufps $0x1, %xmm7, %xmm1      # xmm1 = xmm1[1,0],xmm7[0,0]
shufps $0xe2, %xmm7, %xmm1     # xmm1 = xmm1[2,0],xmm7[2,3]
subps %xmm3, %xmm7
movaps %xmm7, %xmm10
shufps $0x55, %xmm7, %xmm10    # xmm10 = xmm10[1,1],xmm7[1,1]
subss %xmm10, %xmm7
shufps $0xd4, %xmm0, %xmm7     # xmm7 = xmm7[0,1],xmm0[1,3]
shufps $0xe2, %xmm0, %xmm7     # xmm7 = xmm7[2,0],xmm0[2,3]
shufps $0xe1, %xmm0, %xmm0     # xmm0 = xmm0[1,0,2,3]
movaps %xmm8, %xmm11
subps %xmm0, %xmm11
addps %xmm1, %xmm2
movaps %xmm2, %xmm0
movaps %xmm11, %xmm12
shufps $0x55, %xmm11, %xmm12   # xmm12 = xmm12[1,1],xmm11[1,1]
subss %xmm12, %xmm11
subss %xmm11, %xmm10
movaps %xmm12, %xmm1
subss %xmm10, %xmm1
mulss -0x64(%rsp), %xmm10
mulss -0x68(%rsp), %xmm1
shufps $0xd4, %xmm2, %xmm10    # xmm10 = xmm10[0,1],xmm2[1,3]
movaps %xmm1, %xmm3
shufps $0xd4, %xmm2, %xmm3     # xmm3 = xmm3[0,1],xmm2[1,3]
movlhps %xmm2, %xmm1            # xmm1 = xmm1[0],xmm2[0]
shufps $0x55, %xmm2, %xmm2     # xmm2 = xmm2[1,1,1,1]
subps %xmm2, %xmm0
movaps %xmm11, %xmm2
movlhps %xmm8, %xmm2            # xmm2 = xmm2[0],xmm8[0]
shufps $0xe2, %xmm8, %xmm2     # xmm2 = xmm2[2,0],xmm8[2,3]
addps %xmm2, %xmm7
shufps $0x22, %xmm3, %xmm10    # xmm10 = xmm10[2,0],xmm3[2,0]
shufps $0x55, %xmm9, %xmm9     # xmm9 = xmm9[1,1,1,1]
mulss %xmm15, %xmm11
movlhps %xmm9, %xmm11           # xmm11 = xmm11[0],xmm9[0]
subss %xmm7, %xmm9
mulss %xmm14, %xmm12
movlhps %xmm9, %xmm12           # xmm12 = xmm12[0],xmm9[0]
shufps $0x22, %xmm12, %xmm1    # xmm1 = xmm1[2,0],xmm12[2,0]
addps %xmm10, %xmm1
movaps %xmm7, %xmm2
shufps $0x1, %xmm0, %xmm2      # xmm2 = xmm2[1,0],xmm0[0,0]
shufps $0x24, %xmm2, %xmm0     # xmm0 = xmm0[0,1],xmm2[2,0]
movlhps %xmm9, %xmm2            # xmm2 = xmm2[0],xmm9[0]
mulps %xmm6, %xmm2
shufps $0x32, %xmm1, %xmm2     # xmm2 = xmm2[2,0],xmm1[3,0]
shufps $0x22, %xmm12, %xmm11   # xmm11 = xmm11[2,0],xmm12[2,0]
addps %xmm11, %xmm7
shufps $0x64, %xmm11, %xmm11   # xmm11 = xmm11[0,1,2,1]
subps %xmm11, %xmm0
movaps %xmm0, %xmm3
movsd %xmm7, %xmm3            # xmm3 = xmm7[0],xmm3[1]
movaps %xmm1, %xmm4
shufps $0xf4, %xmm0, %xmm4     # xmm4 = xmm4[0,1],xmm0[3,3]
subps %xmm1, %xmm0
shufps $0xf4, %xmm1, %xmm7     # xmm7 = xmm7[0,1],xmm1[3,3]
shufps $0x84, %xmm2, %xmm1     # xmm1 = xmm1[0,1],xmm2[0,2]
shufps $0x68, %xmm3, %xmm4     # xmm4 = xmm4[0,2],xmm3[2,1]
addps %xmm1, %xmm3
shufps $0x23, %xmm3, %xmm0     # xmm0 = xmm0[3,0],xmm3[2,0]
shufps $0x24, %xmm0, %xmm3     # xmm3 = xmm3[0,1],xmm0[2,0]
shufps $0x68, %xmm1, %xmm7     # xmm7 = xmm7[0,2],xmm1[2,1]
movaps %xmm4, %xmm0
subps %xmm7, %xmm0
addps %xmm4, %xmm7
shufps $0x1, %xmm0, %xmm7      # xmm7 = xmm7[1,0],xmm0[0,0]
shufps $0xe2, %xmm0, %xmm7     # xmm7 = xmm7[2,0],xmm0[2,3]
mulps %xmm13, %xmm7
cvttps2dq %xmm7, %xmm0
movups %xmm0, 0x10(%rdi,%rax)
mulps %xmm5, %xmm3
cvttps2dq %xmm3, %xmm0
movups %xmm0, (%rdi,%rax)
addq $0x20, %rax
jmp 0x2b7c
popq %rbx
retq