// File: /workspace/github_cpp_makefile_star2_O1/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 $0x158, %rsp            # imm = 0x158
movss 0x584e(%rip), %xmm0     # 0xaf60
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x20(%rsp)
movss 0x584d(%rip), %xmm0     # 0xaf70
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x30(%rsp)
movss 0x5834(%rip), %xmm0     # 0xaf68
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x40(%rsp)
movss 0x5833(%rip), %xmm0     # 0xaf78
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x50(%rsp)
movss 0x581e(%rip), %xmm0     # 0xaf74
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x60(%rsp)
movss 0x57fd(%rip), %xmm0     # 0xaf64
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x70(%rsp)
movss 0x5804(%rip), %xmm0     # 0xaf7c
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x80(%rsp)
movss 0x57e3(%rip), %xmm7     # 0xaf6c
shufps $0x0, %xmm7, %xmm7      # xmm7 = xmm7[0,0,0,0]
movss 0x57be(%rip), %xmm8     # 0xaf54
shufps $0x0, %xmm8, %xmm8      # xmm8 = xmm8[0,0,0,0]
movss 0x57dc(%rip), %xmm9     # 0xaf80
shufps $0x0, %xmm9, %xmm9      # xmm9 = xmm9[0,0,0,0]
movss 0x57a6(%rip), %xmm10    # 0xaf58
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
movss 0x57c4(%rip), %xmm11    # 0xaf84
shufps $0x0, %xmm11, %xmm11    # xmm11 = xmm11[0,0,0,0]
movss 0x578e(%rip), %xmm12    # 0xaf5c
shufps $0x0, %xmm12, %xmm12    # xmm12 = xmm12[0,0,0,0]
movl $0x38, %eax
movups -0xe0(%rdi,%rax,4), %xmm0
movups -0xc0(%rdi,%rax,4), %xmm1
movups -0xa0(%rdi,%rax,4), %xmm2
movups -0x80(%rdi,%rax,4), %xmm5
cvtdq2ps %xmm0, %xmm4
mulps -0x20(%rsp), %xmm4
movups -0x60(%rdi,%rax,4), %xmm0
cvtdq2ps %xmm0, %xmm3
mulps -0x30(%rsp), %xmm3
cvtdq2ps %xmm2, %xmm2
mulps -0x40(%rsp), %xmm2
movups -0x20(%rdi,%rax,4), %xmm0
cvtdq2ps %xmm0, %xmm0
mulps -0x50(%rsp), %xmm0
movups -0x40(%rdi,%rax,4), %xmm13
cvtdq2ps %xmm13, %xmm13
mulps -0x60(%rsp), %xmm13
cvtdq2ps %xmm1, %xmm14
mulps -0x70(%rsp), %xmm14
movups (%rdi,%rax,4), %xmm1
cvtdq2ps %xmm1, %xmm1
mulps -0x80(%rsp), %xmm1
cvtdq2ps %xmm5, %xmm15
mulps %xmm7, %xmm15
movaps %xmm14, %xmm6
addps %xmm1, %xmm6
subps %xmm1, %xmm14
movaps %xmm13, %xmm1
subps %xmm15, %xmm1
addps %xmm13, %xmm15
movaps %xmm2, %xmm5
subps %xmm0, %xmm5
mulps %xmm8, %xmm5
addps %xmm2, %xmm0
movaps %xmm6, %xmm2
subps %xmm15, %xmm2
mulps %xmm10, %xmm2
addps %xmm6, %xmm15
movaps %xmm4, %xmm13
addps %xmm3, %xmm13
subps %xmm3, %xmm4
movaps %xmm14, %xmm3
addps %xmm1, %xmm3
mulps %xmm12, %xmm3
mulps %xmm9, %xmm1
mulps %xmm11, %xmm14
subps %xmm0, %xmm5
addps %xmm3, %xmm1
addps %xmm15, %xmm2
subps %xmm3, %xmm14
subps %xmm14, %xmm2
movaps %xmm4, %xmm3
addps %xmm5, %xmm3
subps %xmm5, %xmm4
movaps %xmm13, %xmm5
addps %xmm0, %xmm5
subps %xmm0, %xmm13
subps %xmm2, %xmm1
subps %xmm15, %xmm14
movaps %xmm5, %xmm0
addps %xmm15, %xmm0
movaps %xmm0, -0x90(%rsp,%rax,4)
movaps %xmm3, %xmm0
addps %xmm14, %xmm0
movaps %xmm0, -0x70(%rsp,%rax,4)
movaps %xmm4, %xmm0
addps %xmm2, %xmm0
movaps %xmm0, -0x50(%rsp,%rax,4)
movaps %xmm13, %xmm0
addps %xmm1, %xmm0
movaps %xmm0, -0x30(%rsp,%rax,4)
subps %xmm1, %xmm13
movaps %xmm13, -0x10(%rsp,%rax,4)
subps %xmm2, %xmm4
movaps %xmm4, 0x10(%rsp,%rax,4)
subps %xmm14, %xmm3
movaps %xmm3, 0x30(%rsp,%rax,4)
subps %xmm15, %xmm5
movaps %xmm5, 0x50(%rsp,%rax,4)
addq $0x4, %rax
cmpq $0x40, %rax
jne 0x57d8
movss 0x5629(%rip), %xmm0     # 0xaf60
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x20(%rsp)
movss 0x5628(%rip), %xmm0     # 0xaf70
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x30(%rsp)
movss 0x560f(%rip), %xmm0     # 0xaf68
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x40(%rsp)
movss 0x560e(%rip), %xmm0     # 0xaf78
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x50(%rsp)
movss 0x55f9(%rip), %xmm0     # 0xaf74
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x60(%rsp)
movss 0x55d8(%rip), %xmm0     # 0xaf64
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x70(%rsp)
movss 0x55df(%rip), %xmm0     # 0xaf7c
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x80(%rsp)
movss 0x55be(%rip), %xmm0     # 0xaf6c
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, 0x40(%rsp)
movss 0x5595(%rip), %xmm0     # 0xaf54
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, 0x30(%rsp)
movss 0x55b0(%rip), %xmm0     # 0xaf80
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, 0x20(%rsp)
movss 0x5577(%rip), %xmm0     # 0xaf58
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, 0x10(%rsp)
movss 0x5592(%rip), %xmm0     # 0xaf84
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, (%rsp)
movss 0x555a(%rip), %xmm0     # 0xaf5c
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x10(%rsp)
xorl %eax, %eax
movaps 0x16ab(%rip), %xmm13    # 0x70c0
movaps 0xa0(%rsp,%rax), %xmm3
movaps 0xc0(%rsp,%rax), %xmm5
movaps 0x50(%rsp,%rax), %xmm1
movaps 0x60(%rsp,%rax), %xmm14
movaps 0x70(%rsp,%rax), %xmm0
movaps 0x80(%rsp,%rax), %xmm2
movaps 0x90(%rsp,%rax), %xmm4
movaps 0xb0(%rsp,%rax), %xmm6
movaps %xmm6, %xmm7
movlhps %xmm4, %xmm7            # xmm7 = xmm7[0],xmm4[0]
movaps %xmm1, %xmm12
unpcklps %xmm0, %xmm12           # xmm12 = xmm12[0],xmm0[0],xmm12[1],xmm0[1]
shufps $0x24, %xmm7, %xmm12    # xmm12 = xmm12[0,1],xmm7[2,0]
mulps -0x20(%rsp), %xmm12
movaps %xmm4, %xmm7
unpcklps %xmm6, %xmm7            # xmm7 = xmm7[0],xmm6[0],xmm7[1],xmm6[1]
movaps %xmm0, %xmm15
shufps $0x11, %xmm1, %xmm15    # xmm15 = xmm15[1,0],xmm1[1,0]
shufps $0xe2, %xmm7, %xmm15    # xmm15 = xmm15[2,0],xmm7[2,3]
mulps -0x70(%rsp), %xmm15
movaps %xmm6, %xmm8
unpckhpd %xmm4, %xmm8            # xmm8 = xmm8[1],xmm4[1]
movaps %xmm1, %xmm7
unpckhps %xmm0, %xmm7            # xmm7 = xmm7[2],xmm0[2],xmm7[3],xmm0[3]
shufps $0x24, %xmm8, %xmm7     # xmm7 = xmm7[0,1],xmm8[2,0]
mulps -0x40(%rsp), %xmm7
unpckhps %xmm6, %xmm4            # xmm4 = xmm4[2],xmm6[2],xmm4[3],xmm6[3]
shufps $0x33, %xmm1, %xmm0     # xmm0 = xmm0[3,0],xmm1[3,0]
shufps $0xe2, %xmm4, %xmm0     # xmm0 = xmm0[2,0],xmm4[2,3]
mulps 0x40(%rsp), %xmm0
movaps %xmm5, %xmm1
movlhps %xmm3, %xmm1            # xmm1 = xmm1[0],xmm3[0]
movaps %xmm14, %xmm4
unpcklps %xmm2, %xmm4            # xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]
shufps $0x24, %xmm1, %xmm4     # xmm4 = xmm4[0,1],xmm1[2,0]
mulps -0x30(%rsp), %xmm4
movaps %xmm3, %xmm6
unpcklps %xmm5, %xmm6            # xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
movaps %xmm2, %xmm1
shufps $0x11, %xmm14, %xmm1    # xmm1 = xmm1[1,0],xmm14[1,0]
shufps $0xe2, %xmm6, %xmm1     # xmm1 = xmm1[2,0],xmm6[2,3]
mulps -0x60(%rsp), %xmm1
movaps %xmm5, %xmm8
unpckhpd %xmm3, %xmm8            # xmm8 = xmm8[1],xmm3[1]
movaps %xmm14, %xmm6
unpckhps %xmm2, %xmm6            # xmm6 = xmm6[2],xmm2[2],xmm6[3],xmm2[3]
shufps $0x24, %xmm8, %xmm6     # xmm6 = xmm6[0,1],xmm8[2,0]
mulps -0x50(%rsp), %xmm6
unpckhps %xmm5, %xmm3            # xmm3 = xmm3[2],xmm5[2],xmm3[3],xmm5[3]
shufps $0x33, %xmm14, %xmm2    # xmm2 = xmm2[3,0],xmm14[3,0]
shufps $0xe2, %xmm3, %xmm2     # xmm2 = xmm2[2,0],xmm3[2,3]
mulps -0x80(%rsp), %xmm2
movaps %xmm1, %xmm5
subps %xmm0, %xmm5
movaps %xmm15, %xmm9
addps %xmm2, %xmm9
subps %xmm2, %xmm15
addps %xmm0, %xmm1
movaps %xmm7, %xmm3
subps %xmm6, %xmm3
mulps 0x30(%rsp), %xmm3
addps %xmm7, %xmm6
movaps %xmm9, %xmm8
subps %xmm1, %xmm8
mulps 0x10(%rsp), %xmm8
addps %xmm9, %xmm1
movaps %xmm15, %xmm0
addps %xmm5, %xmm0
mulps -0x10(%rsp), %xmm0
mulps 0x20(%rsp), %xmm5
mulps (%rsp), %xmm15
movaps %xmm12, %xmm7
addps %xmm4, %xmm7
subps %xmm4, %xmm12
subps %xmm6, %xmm3
addps %xmm0, %xmm5
addps %xmm1, %xmm8
subps %xmm0, %xmm15
subps %xmm15, %xmm8
movaps %xmm7, %xmm2
addps %xmm6, %xmm2
movaps %xmm12, %xmm11
addps %xmm3, %xmm11
subps %xmm3, %xmm12
subps %xmm6, %xmm7
subps %xmm8, %xmm5
subps %xmm1, %xmm15
movaps %xmm2, %xmm3
addps %xmm1, %xmm3
addps %xmm13, %xmm3
movaps %xmm11, %xmm6
addps %xmm15, %xmm6
addps %xmm13, %xmm6
movaps %xmm12, %xmm4
addps %xmm8, %xmm4
addps %xmm13, %xmm4
movaps %xmm7, %xmm14
addps %xmm5, %xmm14
addps %xmm13, %xmm14
subps %xmm5, %xmm7
addps %xmm13, %xmm7
subps %xmm8, %xmm12
addps %xmm13, %xmm12
subps %xmm15, %xmm11
addps %xmm13, %xmm11
subps %xmm1, %xmm2
addps %xmm13, %xmm2
movaps %xmm6, %xmm1
shufps $0x33, %xmm3, %xmm1     # xmm1 = xmm1[3,0],xmm3[3,0]
movaps %xmm4, %xmm5
unpckhps %xmm14, %xmm5           # xmm5 = xmm5[2],xmm14[2],xmm5[3],xmm14[3]
shufps $0xe2, %xmm5, %xmm1     # xmm1 = xmm1[2,0],xmm5[2,3]
movaps %xmm11, %xmm8
unpckhps %xmm2, %xmm8            # xmm8 = xmm8[2],xmm2[2],xmm8[3],xmm2[3]
movaps %xmm12, %xmm5
shufps $0x33, %xmm7, %xmm5     # xmm5 = xmm5[3,0],xmm7[3,0]
shufps $0xe2, %xmm8, %xmm5     # xmm5 = xmm5[2,0],xmm8[2,3]
movaps %xmm3, %xmm8
unpckhps %xmm6, %xmm8            # xmm8 = xmm8[2],xmm6[2],xmm8[3],xmm6[3]
movaps %xmm14, %xmm9
unpckhpd %xmm4, %xmm9            # xmm9 = xmm9[1],xmm4[1]
shufps $0x24, %xmm9, %xmm8     # xmm8 = xmm8[0,1],xmm9[2,0]
movaps %xmm2, %xmm9
unpckhpd %xmm11, %xmm9           # xmm9 = xmm9[1],xmm11[1]
movaps %xmm7, %xmm15
unpckhps %xmm12, %xmm15          # xmm15 = xmm15[2],xmm12[2],xmm15[3],xmm12[3]
shufps $0x24, %xmm9, %xmm15    # xmm15 = xmm15[0,1],xmm9[2,0]
movaps %xmm6, %xmm10
shufps $0x11, %xmm3, %xmm10    # xmm10 = xmm10[1,0],xmm3[1,0]
movaps %xmm4, %xmm9
unpcklps %xmm14, %xmm9           # xmm9 = xmm9[0],xmm14[0],xmm9[1],xmm14[1]
shufps $0xe2, %xmm9, %xmm10    # xmm10 = xmm10[2,0],xmm9[2,3]
movaps %xmm11, %xmm0
unpcklps %xmm2, %xmm0            # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
movaps %xmm12, %xmm9
shufps $0x11, %xmm7, %xmm9     # xmm9 = xmm9[1,0],xmm7[1,0]
shufps $0xe2, %xmm0, %xmm9     # xmm9 = xmm9[2,0],xmm0[2,3]
unpcklps %xmm6, %xmm3            # xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
movlhps %xmm4, %xmm14           # xmm14 = xmm14[0],xmm4[0]
shufps $0x24, %xmm14, %xmm3    # xmm3 = xmm3[0,1],xmm14[2,0]
movlhps %xmm11, %xmm2           # xmm2 = xmm2[0],xmm11[0]
unpcklps %xmm12, %xmm7           # xmm7 = xmm7[0],xmm12[0],xmm7[1],xmm12[1]
shufps $0x24, %xmm2, %xmm7     # xmm7 = xmm7[0,1],xmm2[2,0]
cvttps2dq %xmm1, %xmm0
movups %xmm0, 0x60(%rdi,%rax)
cvttps2dq %xmm5, %xmm0
movups %xmm0, 0x70(%rdi,%rax)
cvttps2dq %xmm8, %xmm0
movups %xmm0, 0x40(%rdi,%rax)
cvttps2dq %xmm15, %xmm0
movups %xmm0, 0x50(%rdi,%rax)
cvttps2dq %xmm10, %xmm0
movups %xmm0, 0x20(%rdi,%rax)
cvttps2dq %xmm9, %xmm0
movups %xmm0, 0x30(%rdi,%rax)
cvttps2dq %xmm3, %xmm0
movups %xmm0, (%rdi,%rax)
cvttps2dq %xmm7, %xmm0
movups %xmm0, 0x10(%rdi,%rax)
subq $-0x80, %rax
cmpq $0x100, %rax            # imm = 0x100
jne 0x5a15
addq $0x158, %rsp            # imm = 0x158
retq