// File: /workspace/github_cpp_makefile_star2_O3/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 $0x148, %rsp            # imm = 0x148
movss 0x5ac0(%rip), %xmm10    # 0xaf60
movss 0x5ac7(%rip), %xmm11    # 0xaf70
movss 0x5ab6(%rip), %xmm13    # 0xaf68
movss 0x5abd(%rip), %xmm14    # 0xaf78
movss 0x5ab0(%rip), %xmm12    # 0xaf74
movss 0x5a97(%rip), %xmm15    # 0xaf64
movss 0x5aa7(%rip), %xmm0     # 0xaf7c
movss 0x5a8f(%rip), %xmm1     # 0xaf6c
movss 0x5a6f(%rip), %xmm2     # 0xaf54
movss 0x5a93(%rip), %xmm3     # 0xaf80
movss 0x5a63(%rip), %xmm4     # 0xaf58
movss 0x5a87(%rip), %xmm5     # 0xaf84
movss 0x5a57(%rip), %xmm6     # 0xaf5c
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
shufps $0x0, %xmm11, %xmm11    # xmm11 = xmm11[0,0,0,0]
shufps $0x0, %xmm13, %xmm13    # xmm13 = xmm13[0,0,0,0]
shufps $0x0, %xmm14, %xmm14    # xmm14 = xmm14[0,0,0,0]
shufps $0x0, %xmm12, %xmm12    # xmm12 = xmm12[0,0,0,0]
shufps $0x0, %xmm15, %xmm15    # xmm15 = xmm15[0,0,0,0]
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
movaps %xmm0, -0x20(%rsp)
shufps $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
movaps %xmm1, -0x30(%rsp)
shufps $0x0, %xmm2, %xmm2      # xmm2 = xmm2[0,0,0,0]
movaps %xmm2, -0x40(%rsp)
shufps $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
movaps %xmm3, -0x50(%rsp)
shufps $0x0, %xmm4, %xmm4      # xmm4 = xmm4[0,0,0,0]
movaps %xmm4, -0x60(%rsp)
shufps $0x0, %xmm5, %xmm5      # xmm5 = xmm5[0,0,0,0]
movaps %xmm5, -0x70(%rsp)
shufps $0x0, %xmm6, %xmm6      # xmm6 = xmm6[0,0,0,0]
movaps %xmm6, -0x80(%rsp)
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), %xmm4
cvtdq2ps %xmm0, %xmm0
mulps %xmm10, %xmm0
movups -0x60(%rdi,%rax,4), %xmm3
cvtdq2ps %xmm3, %xmm6
mulps %xmm11, %xmm6
cvtdq2ps %xmm2, %xmm5
mulps %xmm13, %xmm5
movups -0x20(%rdi,%rax,4), %xmm2
cvtdq2ps %xmm2, %xmm3
mulps %xmm14, %xmm3
movups -0x40(%rdi,%rax,4), %xmm2
cvtdq2ps %xmm2, %xmm7
mulps %xmm12, %xmm7
cvtdq2ps %xmm1, %xmm1
mulps %xmm15, %xmm1
movups (%rdi,%rax,4), %xmm2
cvtdq2ps %xmm2, %xmm8
mulps -0x20(%rsp), %xmm8
cvtdq2ps %xmm4, %xmm2
mulps -0x30(%rsp), %xmm2
movaps %xmm1, %xmm9
addps %xmm8, %xmm9
subps %xmm8, %xmm1
movaps %xmm7, %xmm4
subps %xmm2, %xmm4
addps %xmm7, %xmm2
movaps %xmm5, %xmm8
subps %xmm3, %xmm8
addps %xmm5, %xmm3
movaps %xmm9, %xmm5
subps %xmm2, %xmm5
addps %xmm9, %xmm2
movaps %xmm0, %xmm7
addps %xmm6, %xmm7
subps %xmm6, %xmm0
movaps %xmm1, %xmm6
addps %xmm4, %xmm6
mulps -0x40(%rsp), %xmm8
mulps -0x50(%rsp), %xmm4
mulps -0x60(%rsp), %xmm5
mulps -0x70(%rsp), %xmm1
mulps -0x80(%rsp), %xmm6
subps %xmm3, %xmm8
addps %xmm6, %xmm4
addps %xmm2, %xmm5
subps %xmm6, %xmm1
subps %xmm1, %xmm5
movaps %xmm0, %xmm6
addps %xmm8, %xmm6
subps %xmm8, %xmm0
movaps %xmm7, %xmm8
addps %xmm3, %xmm8
subps %xmm3, %xmm7
subps %xmm5, %xmm4
subps %xmm2, %xmm1
movaps %xmm8, %xmm3
addps %xmm2, %xmm3
movaps %xmm3, -0xa0(%rsp,%rax,4)
movaps %xmm6, %xmm3
addps %xmm1, %xmm3
movaps %xmm3, -0x80(%rsp,%rax,4)
movaps %xmm0, %xmm3
addps %xmm5, %xmm3
movaps %xmm3, -0x60(%rsp,%rax,4)
movaps %xmm7, %xmm3
addps %xmm4, %xmm3
movaps %xmm3, -0x40(%rsp,%rax,4)
subps %xmm4, %xmm7
movaps %xmm7, -0x20(%rsp,%rax,4)
subps %xmm5, %xmm0
movaps %xmm0, (%rsp,%rax,4)
subps %xmm1, %xmm6
movaps %xmm6, 0x20(%rsp,%rax,4)
subps %xmm2, %xmm8
movaps %xmm8, 0x40(%rsp,%rax,4)
addq $0x4, %rax
cmpq $0x40, %rax
jne 0x5567
xorl %eax, %eax
movaps %xmm12, (%rsp)
movaps %xmm15, -0x10(%rsp)
movaps %xmm11, 0x30(%rsp)
movaps %xmm13, 0x20(%rsp)
movaps %xmm14, 0x10(%rsp)
movaps 0x90(%rsp,%rax), %xmm5
movaps 0xb0(%rsp,%rax), %xmm6
movaps 0x40(%rsp,%rax), %xmm2
movaps 0x50(%rsp,%rax), %xmm7
movaps 0x60(%rsp,%rax), %xmm0
movaps 0x70(%rsp,%rax), %xmm1
movaps 0x80(%rsp,%rax), %xmm3
movaps 0xa0(%rsp,%rax), %xmm8
movaps %xmm8, %xmm4
movlhps %xmm3, %xmm4            # xmm4 = xmm4[0],xmm3[0]
movaps %xmm2, %xmm12
unpcklps %xmm0, %xmm12           # xmm12 = xmm12[0],xmm0[0],xmm12[1],xmm0[1]
shufps $0x24, %xmm4, %xmm12    # xmm12 = xmm12[0,1],xmm4[2,0]
movaps %xmm3, %xmm4
unpcklps %xmm8, %xmm4            # xmm4 = xmm4[0],xmm8[0],xmm4[1],xmm8[1]
movaps %xmm0, %xmm15
shufps $0x11, %xmm2, %xmm15    # xmm15 = xmm15[1,0],xmm2[1,0]
shufps $0xe2, %xmm4, %xmm15    # xmm15 = xmm15[2,0],xmm4[2,3]
movaps %xmm8, %xmm9
unpckhpd %xmm3, %xmm9            # xmm9 = xmm9[1],xmm3[1]
movaps %xmm2, %xmm4
unpckhps %xmm0, %xmm4            # xmm4 = xmm4[2],xmm0[2],xmm4[3],xmm0[3]
shufps $0x24, %xmm9, %xmm4     # xmm4 = xmm4[0,1],xmm9[2,0]
unpckhps %xmm8, %xmm3            # xmm3 = xmm3[2],xmm8[2],xmm3[3],xmm8[3]
shufps $0x33, %xmm2, %xmm0     # xmm0 = xmm0[3,0],xmm2[3,0]
shufps $0xe2, %xmm3, %xmm0     # xmm0 = xmm0[2,0],xmm3[2,3]
movaps %xmm6, %xmm3
movlhps %xmm5, %xmm3            # xmm3 = xmm3[0],xmm5[0]
movaps %xmm7, %xmm2
unpcklps %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
shufps $0x24, %xmm3, %xmm2     # xmm2 = xmm2[0,1],xmm3[2,0]
movaps %xmm5, %xmm3
unpcklps %xmm6, %xmm3            # xmm3 = xmm3[0],xmm6[0],xmm3[1],xmm6[1]
movaps %xmm1, %xmm8
shufps $0x11, %xmm7, %xmm8     # xmm8 = xmm8[1,0],xmm7[1,0]
shufps $0xe2, %xmm3, %xmm8     # xmm8 = xmm8[2,0],xmm3[2,3]
movaps %xmm6, %xmm9
unpckhpd %xmm5, %xmm9            # xmm9 = xmm9[1],xmm5[1]
movaps %xmm7, %xmm3
unpckhps %xmm1, %xmm3            # xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
shufps $0x24, %xmm9, %xmm3     # xmm3 = xmm3[0,1],xmm9[2,0]
unpckhps %xmm6, %xmm5            # xmm5 = xmm5[2],xmm6[2],xmm5[3],xmm6[3]
shufps $0x33, %xmm7, %xmm1     # xmm1 = xmm1[3,0],xmm7[3,0]
shufps $0xe2, %xmm5, %xmm1     # xmm1 = xmm1[2,0],xmm5[2,3]
mulps %xmm10, %xmm12
mulps %xmm11, %xmm2
mulps %xmm13, %xmm4
mulps %xmm14, %xmm3
mulps (%rsp), %xmm8
mulps -0x10(%rsp), %xmm15
mulps -0x20(%rsp), %xmm1
mulps -0x30(%rsp), %xmm0
movaps %xmm8, %xmm5
subps %xmm0, %xmm5
movaps %xmm15, %xmm9
addps %xmm1, %xmm9
subps %xmm1, %xmm15
addps %xmm8, %xmm0
movaps %xmm4, %xmm6
subps %xmm3, %xmm6
addps %xmm4, %xmm3
movaps %xmm9, %xmm7
subps %xmm0, %xmm7
addps %xmm9, %xmm0
movaps %xmm15, %xmm1
addps %xmm5, %xmm1
mulps -0x40(%rsp), %xmm6
mulps -0x50(%rsp), %xmm5
mulps -0x60(%rsp), %xmm7
mulps -0x70(%rsp), %xmm15
mulps -0x80(%rsp), %xmm1
movaps %xmm12, %xmm8
addps %xmm2, %xmm8
subps %xmm2, %xmm12
subps %xmm3, %xmm6
addps %xmm1, %xmm5
addps %xmm0, %xmm7
subps %xmm1, %xmm15
subps %xmm15, %xmm7
movaps %xmm8, %xmm2
addps %xmm3, %xmm2
movaps %xmm12, %xmm11
addps %xmm6, %xmm11
subps %xmm6, %xmm12
subps %xmm3, %xmm8
subps %xmm7, %xmm5
subps %xmm0, %xmm15
movaps %xmm2, %xmm3
addps %xmm0, %xmm3
movaps 0x1875(%rip), %xmm1     # 0x70c0
addps %xmm1, %xmm3
movaps %xmm11, %xmm6
addps %xmm15, %xmm6
addps %xmm1, %xmm6
movaps %xmm12, %xmm4
addps %xmm7, %xmm4
addps %xmm1, %xmm4
movaps %xmm8, %xmm14
addps %xmm5, %xmm14
addps %xmm1, %xmm14
subps %xmm5, %xmm8
addps %xmm1, %xmm8
subps %xmm7, %xmm12
addps %xmm1, %xmm12
subps %xmm15, %xmm11
addps %xmm1, %xmm11
subps %xmm0, %xmm2
addps %xmm1, %xmm2
movaps %xmm6, %xmm0
shufps $0x33, %xmm3, %xmm0     # xmm0 = xmm0[3,0],xmm3[3,0]
movaps %xmm4, %xmm5
unpckhps %xmm14, %xmm5           # xmm5 = xmm5[2],xmm14[2],xmm5[3],xmm14[3]
shufps $0xe2, %xmm5, %xmm0     # xmm0 = xmm0[2,0],xmm5[2,3]
movaps %xmm11, %xmm7
unpckhps %xmm2, %xmm7            # xmm7 = xmm7[2],xmm2[2],xmm7[3],xmm2[3]
movaps %xmm12, %xmm5
shufps $0x33, %xmm8, %xmm5     # xmm5 = xmm5[3,0],xmm8[3,0]
shufps $0xe2, %xmm7, %xmm5     # xmm5 = xmm5[2,0],xmm7[2,3]
movaps %xmm3, %xmm7
unpckhps %xmm6, %xmm7            # xmm7 = xmm7[2],xmm6[2],xmm7[3],xmm6[3]
movaps %xmm14, %xmm9
unpckhpd %xmm4, %xmm9            # xmm9 = xmm9[1],xmm4[1]
shufps $0x24, %xmm9, %xmm7     # xmm7 = xmm7[0,1],xmm9[2,0]
movaps %xmm2, %xmm9
unpckhpd %xmm11, %xmm9           # xmm9 = xmm9[1],xmm11[1]
movaps %xmm8, %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 %xmm10, %xmm13
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, %xmm1
unpcklps %xmm2, %xmm1            # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movaps %xmm12, %xmm9
shufps $0x11, %xmm8, %xmm9     # xmm9 = xmm9[1,0],xmm8[1,0]
shufps $0xe2, %xmm1, %xmm9     # xmm9 = xmm9[2,0],xmm1[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]
movaps 0x10(%rsp), %xmm14
movlhps %xmm11, %xmm2           # xmm2 = xmm2[0],xmm11[0]
movaps 0x30(%rsp), %xmm11
unpcklps %xmm12, %xmm8           # xmm8 = xmm8[0],xmm12[0],xmm8[1],xmm12[1]
shufps $0x24, %xmm2, %xmm8     # xmm8 = xmm8[0,1],xmm2[2,0]
cvttps2dq %xmm0, %xmm0
movups %xmm0, 0x60(%rdi,%rax)
cvttps2dq %xmm5, %xmm0
movups %xmm0, 0x70(%rdi,%rax)
cvttps2dq %xmm7, %xmm0
movups %xmm0, 0x40(%rdi,%rax)
cvttps2dq %xmm15, %xmm0
movups %xmm0, 0x50(%rdi,%rax)
cvttps2dq %xmm10, %xmm0
movaps %xmm13, %xmm10
movaps 0x20(%rsp), %xmm13
movups %xmm0, 0x20(%rdi,%rax)
cvttps2dq %xmm9, %xmm0
movups %xmm0, 0x30(%rdi,%rax)
cvttps2dq %xmm3, %xmm0
movups %xmm0, (%rdi,%rax)
cvttps2dq %xmm8, %xmm0
movups %xmm0, 0x10(%rdi,%rax)
subq $-0x80, %rax
cmpq $0x100, %rax            # imm = 0x100
jne 0x56d1
addq $0x148, %rsp            # imm = 0x148
retq