// File: /workspace/github_cpp_makefile_star2_O2/dannye[P]jed/src/decoder.cpp
// Function: inverseDCTBlockComponent(int*)
void inverseDCTBlockComponent(int* const component) {

    float intermediate[64];

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

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

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

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

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

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

        intermediate[0 * 8 + i] = b0 + b7;
        intermediate[1 * 8 + i] = b1 + b6;
        intermediate[2 * 8 + i] = b2 + b5;
        intermediate[3 * 8 + i] = b3 + b4;
        intermediate[4 * 8 + i] = b3 - b4;
        intermediate[5 * 8 + i] = b2 - b5;
        intermediate[6 * 8 + i] = b1 - b6;
        intermediate[7 * 8 + i] = b0 - b7;
    }
    for (uint i = 0; i < 8; ++i) {
        const float g0 = intermediate[i * 8 + 0] * s0;
        const float g1 = intermediate[i * 8 + 4] * s4;
        const float g2 = intermediate[i * 8 + 2] * s2;
        const float g3 = intermediate[i * 8 + 6] * s6;
        const float g4 = intermediate[i * 8 + 5] * s5;
        const float g5 = intermediate[i * 8 + 1] * s1;
        const float g6 = intermediate[i * 8 + 7] * s7;
        const float g7 = intermediate[i * 8 + 3] * s3;

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

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

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

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

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

        component[i * 8 + 0] = b0 + b7 + 0.5f;
        component[i * 8 + 1] = b1 + b6 + 0.5f;
        component[i * 8 + 2] = b2 + b5 + 0.5f;
        component[i * 8 + 3] = b3 + b4 + 0.5f;
        component[i * 8 + 4] = b3 - b4 + 0.5f;
        component[i * 8 + 5] = b2 - b5 + 0.5f;
        component[i * 8 + 6] = b1 - b6 + 0.5f;
        component[i * 8 + 7] = b0 - b7 + 0.5f;
    }
}

// Assembly:
subq $0xb8, %rsp
movss 0x5a9b(%rip), %xmm0     # 0x9f60
movss 0x5aa3(%rip), %xmm1     # 0x9f70
movss %xmm1, -0x64(%rsp)
movss 0x5a8d(%rip), %xmm1     # 0x9f68
movss %xmm1, -0x68(%rsp)
movss 0x5a8f(%rip), %xmm1     # 0x9f78
movss %xmm1, -0x6c(%rsp)
movss 0x5a7d(%rip), %xmm1     # 0x9f74
movss %xmm1, -0x70(%rsp)
movss 0x5a5f(%rip), %xmm1     # 0x9f64
movss %xmm1, -0x74(%rsp)
movss 0x5a69(%rip), %xmm6     # 0x9f7c
movss 0x5a51(%rip), %xmm7     # 0x9f6c
movss 0x5a31(%rip), %xmm1     # 0x9f54
movaps %xmm1, -0x60(%rsp)
movss 0x5a4f(%rip), %xmm8     # 0x9f80
movss 0x5a1e(%rip), %xmm9     # 0x9f58
movss 0x5a41(%rip), %xmm10    # 0x9f84
movabsq $0x38, %rax
movss 0x5a06(%rip), %xmm11    # 0x9f5c
cmpq $0x40, %rax
je 0x46e5
cvtsi2ssl -0xe0(%rdi,%rax,4), %xmm4
mulss %xmm0, %xmm4
cvtsi2ssl -0x60(%rdi,%rax,4), %xmm3
mulss -0x64(%rsp), %xmm3
cvtsi2ssl -0xa0(%rdi,%rax,4), %xmm12
mulss -0x68(%rsp), %xmm12
cvtsi2ssl -0x20(%rdi,%rax,4), %xmm1
mulss -0x6c(%rsp), %xmm1
cvtsi2ssl -0x40(%rdi,%rax,4), %xmm5
mulss -0x70(%rsp), %xmm5
cvtsi2ssl -0xc0(%rdi,%rax,4), %xmm14
mulss -0x74(%rsp), %xmm14
cvtsi2ssl (%rdi,%rax,4), %xmm2
mulss %xmm6, %xmm2
cvtsi2ssl -0x80(%rdi,%rax,4), %xmm15
mulss %xmm7, %xmm15
movaps %xmm14, %xmm13
addss %xmm2, %xmm13
subss %xmm2, %xmm14
movaps %xmm5, %xmm2
subss %xmm15, %xmm2
addss %xmm5, %xmm15
movaps %xmm12, %xmm5
subss %xmm1, %xmm5
addss %xmm12, %xmm1
movaps %xmm13, %xmm12
subss %xmm15, %xmm12
addss %xmm13, %xmm15
movaps %xmm4, %xmm13
addss %xmm3, %xmm13
subss %xmm3, %xmm4
movaps %xmm14, %xmm3
addss %xmm2, %xmm3
mulss -0x60(%rsp), %xmm5
mulss %xmm8, %xmm2
mulss %xmm9, %xmm12
mulss %xmm10, %xmm14
mulss %xmm11, %xmm3
subss %xmm1, %xmm5
addss %xmm3, %xmm2
addss %xmm15, %xmm12
subss %xmm3, %xmm14
subss %xmm14, %xmm12
movaps %xmm4, %xmm3
addss %xmm5, %xmm3
subss %xmm5, %xmm4
movaps %xmm13, %xmm5
addss %xmm1, %xmm5
subss %xmm1, %xmm13
subss %xmm12, %xmm2
subss %xmm15, %xmm14
movaps %xmm5, %xmm1
addss %xmm15, %xmm1
movss %xmm1, -0x130(%rsp,%rax,4)
movaps %xmm3, %xmm1
addss %xmm14, %xmm1
movss %xmm1, -0x110(%rsp,%rax,4)
movaps %xmm4, %xmm1
addss %xmm12, %xmm1
movss %xmm1, -0xf0(%rsp,%rax,4)
movaps %xmm13, %xmm1
addss %xmm2, %xmm1
movss %xmm1, -0xd0(%rsp,%rax,4)
subss %xmm2, %xmm13
movss %xmm13, -0xb0(%rsp,%rax,4)
subss %xmm12, %xmm4
movss %xmm4, -0x90(%rsp,%rax,4)
subss %xmm14, %xmm3
movss %xmm3, -0x70(%rsp,%rax,4)
subss %xmm15, %xmm5
movss %xmm5, -0x50(%rsp,%rax,4)
incq %rax
jmp 0x4556
unpcklps -0x60(%rsp), %xmm0      # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
xorl %eax, %eax
cmpq $0x100, %rax            # imm = 0x100
je 0x4854
movss -0x40(%rsp,%rax), %xmm1
mulss -0x64(%rsp), %xmm1
movss -0x48(%rsp,%rax), %xmm2
mulss -0x68(%rsp), %xmm2
movss -0x38(%rsp,%rax), %xmm14
mulss -0x6c(%rsp), %xmm14
movss -0x3c(%rsp,%rax), %xmm4
mulss -0x70(%rsp), %xmm4
movss -0x4c(%rsp,%rax), %xmm13
mulss -0x74(%rsp), %xmm13
movss -0x34(%rsp,%rax), %xmm5
mulss %xmm6, %xmm5
movss -0x44(%rsp,%rax), %xmm15
mulss %xmm7, %xmm15
movaps %xmm13, %xmm3
addss %xmm5, %xmm3
subss %xmm5, %xmm13
movaps %xmm4, %xmm12
subss %xmm15, %xmm12
addss %xmm4, %xmm15
movaps %xmm13, %xmm4
addss %xmm12, %xmm4
mulss %xmm8, %xmm12
mulss %xmm10, %xmm13
mulss %xmm11, %xmm4
addss %xmm4, %xmm12
subss %xmm4, %xmm13
movaps %xmm2, %xmm4
subss %xmm14, %xmm4
addss %xmm2, %xmm14
movss -0x50(%rsp,%rax), %xmm2
unpcklps %xmm4, %xmm2            # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
mulps %xmm0, %xmm2
movaps %xmm2, %xmm4
addss %xmm1, %xmm4
unpcklps %xmm14, %xmm1           # xmm1 = xmm1[0],xmm14[0],xmm1[1],xmm14[1]
subps %xmm1, %xmm2
movaps %xmm3, %xmm1
subss %xmm15, %xmm1
mulss %xmm9, %xmm1
addss %xmm3, %xmm15
addss %xmm15, %xmm1
subss %xmm13, %xmm1
movlhps %xmm2, %xmm4            # xmm4 = xmm4[0],xmm2[0]
shufps $0xd4, %xmm2, %xmm14    # xmm14 = xmm14[0,1],xmm2[1,3]
movaps %xmm4, %xmm3
shufps $0x28, %xmm14, %xmm3    # xmm3 = xmm3[0,2],xmm14[2,0]
shufps $0x28, %xmm4, %xmm14    # xmm14 = xmm14[0,2],xmm4[2,0]
shufps $0xd8, %xmm2, %xmm4     # xmm4 = xmm4[0,2],xmm2[1,3]
subps %xmm14, %xmm4
addps %xmm3, %xmm14
movaps %xmm14, %xmm2
movsd %xmm4, %xmm2            # xmm2 = xmm4[0],xmm2[1]
subss %xmm1, %xmm12
subss %xmm15, %xmm13
movaps %xmm12, %xmm3
movlhps %xmm1, %xmm3            # xmm3 = xmm3[0],xmm1[0]
shufps $0x2b, %xmm3, %xmm14    # xmm14 = xmm14[3,2],xmm3[2,0]
movaps %xmm15, %xmm3
unpcklps %xmm13, %xmm3           # xmm3 = xmm3[0],xmm13[0],xmm3[1],xmm13[1]
shufps $0x14, %xmm4, %xmm3     # xmm3 = xmm3[0,1],xmm4[1,0]
addps %xmm14, %xmm3
movaps 0x17fc(%rip), %xmm4     # 0x6020
addps %xmm4, %xmm3
cvttps2dq %xmm3, %xmm3
movups %xmm3, (%rdi,%rax)
unpcklps %xmm1, %xmm12           # xmm12 = xmm12[0],xmm1[0],xmm12[1],xmm1[1]
unpcklps %xmm15, %xmm13          # xmm13 = xmm13[0],xmm15[0],xmm13[1],xmm15[1]
movlhps %xmm13, %xmm12          # xmm12 = xmm12[0],xmm13[0]
subps %xmm12, %xmm2
addps %xmm4, %xmm2
cvttps2dq %xmm2, %xmm1
movups %xmm1, 0x10(%rdi,%rax)
addq $0x20, %rax
jmp 0x46ec
addq $0xb8, %rsp
retq