// File: /workspace/github_cpp_makefile_star2_O1/dannye[P]jed/src/encoder.cpp
// Function: RGBToYCbCrBlock(Block&)
void RGBToYCbCrBlock(Block& block) {
    for (uint y = 0; y < 8; ++y) {
        for (uint x = 0; x < 8; ++x) {
            const uint pixel = y * 8 + x;
            int y  =  0.2990 * block.r[pixel] + 0.5870 * block.g[pixel] + 0.1140 * block.b[pixel] - 128;
            int cb = -0.1687 * block.r[pixel] - 0.3313 * block.g[pixel] + 0.5000 * block.b[pixel];
            int cr =  0.5000 * block.r[pixel] - 0.4187 * block.g[pixel] - 0.0813 * block.b[pixel];
            if (y  < -128) y  = -128;
            if (y  >  127) y  =  127;
            if (cb < -128) cb = -128;
            if (cb >  127) cb =  127;
            if (cr < -128) cr = -128;
            if (cr >  127) cr =  127;
            block.y[pixel]  = y;
            block.cb[pixel] = cb;
            block.cr[pixel] = cr;
        }
    }
}

// Assembly:
addq $0x200, %rdi            # imm = 0x200
xorl %eax, %eax
movapd 0x2825(%rip), %xmm3     # 0x5010
movapd 0x282d(%rip), %xmm7     # 0x5020
movapd 0x2834(%rip), %xmm8     # 0x5030
movapd 0x284b(%rip), %xmm9     # 0x5050
movapd 0x2852(%rip), %xmm10    # 0x5060
movapd 0x2859(%rip), %xmm12    # 0x5070
xorl %ecx, %ecx
movdqu -0x200(%rdi,%rcx,4), %xmm0
movdqu -0x100(%rdi,%rcx,4), %xmm1
cvtdq2pd %xmm0, %xmm5
pshufd $0xee, %xmm0, %xmm0     # xmm0 = xmm0[2,3,2,3]
cvtdq2pd %xmm0, %xmm4
pshufd $0xee, %xmm1, %xmm0     # xmm0 = xmm1[2,3,2,3]
cvtdq2pd %xmm0, %xmm13
cvtdq2pd %xmm1, %xmm14
movdqu (%rdi,%rcx,4), %xmm0
movapd %xmm14, %xmm1
mulpd %xmm3, %xmm1
movapd %xmm13, %xmm2
mulpd %xmm3, %xmm2
movapd %xmm12, %xmm6
movapd %xmm4, %xmm12
mulpd %xmm7, %xmm12
addpd %xmm2, %xmm12
movapd %xmm5, %xmm2
mulpd %xmm7, %xmm2
addpd %xmm1, %xmm2
pshufd $0xee, %xmm0, %xmm1     # xmm1 = xmm0[2,3,2,3]
cvtdq2pd %xmm1, %xmm7
cvtdq2pd %xmm0, %xmm0
movapd %xmm0, %xmm1
mulpd %xmm8, %xmm1
addpd %xmm2, %xmm1
movapd %xmm7, %xmm15
mulpd %xmm8, %xmm15
addpd %xmm12, %xmm15
movapd %xmm13, %xmm2
mulpd %xmm9, %xmm2
movapd %xmm14, %xmm12
mulpd %xmm9, %xmm12
movapd %xmm5, %xmm11
mulpd %xmm10, %xmm11
addpd %xmm12, %xmm11
movapd %xmm4, %xmm12
mulpd %xmm10, %xmm12
addpd %xmm2, %xmm12
movapd %xmm9, %xmm10
movapd %xmm8, %xmm9
movapd %xmm3, %xmm8
movapd %xmm7, %xmm3
mulpd %xmm6, %xmm3
addpd %xmm12, %xmm3
movapd %xmm0, %xmm12
mulpd %xmm6, %xmm12
addpd %xmm11, %xmm12
movapd 0x2734(%rip), %xmm2     # 0x5040
addpd %xmm2, %xmm15
addpd %xmm2, %xmm1
cvttpd2dq %xmm1, %xmm2
cvttpd2dq %xmm15, %xmm11
cvttpd2dq %xmm12, %xmm1
movapd %xmm6, %xmm12
movapd 0x2750(%rip), %xmm6     # 0x5080
cvttpd2dq %xmm3, %xmm3
unpcklpd %xmm11, %xmm2           # xmm2 = xmm2[0],xmm11[0]
unpcklpd %xmm3, %xmm1            # xmm1 = xmm1[0],xmm3[0]
mulpd %xmm6, %xmm14
mulpd %xmm12, %xmm5
addpd %xmm14, %xmm5
mulpd %xmm6, %xmm13
movapd 0x2737(%rip), %xmm3     # 0x5090
mulpd %xmm12, %xmm4
addpd %xmm13, %xmm4
mulpd %xmm3, %xmm7
addpd %xmm4, %xmm7
movdqa 0x272d(%rip), %xmm4     # 0x50a0
mulpd %xmm3, %xmm0
addpd %xmm5, %xmm0
movdqa 0x272d(%rip), %xmm5     # 0x50b0
cvttpd2dq %xmm0, %xmm0
cvttpd2dq %xmm7, %xmm3
movapd 0x268d(%rip), %xmm7     # 0x5020
unpcklpd %xmm3, %xmm0            # xmm0 = xmm0[0],xmm3[0]
movapd %xmm2, %xmm3
pcmpgtd %xmm4, %xmm3
andpd %xmm3, %xmm2
pandn %xmm4, %xmm3
por %xmm2, %xmm3
movdqa %xmm5, %xmm11
pcmpgtd %xmm3, %xmm11
pand %xmm11, %xmm3
pandn %xmm5, %xmm11
por %xmm3, %xmm11
movapd %xmm8, %xmm3
movapd %xmm9, %xmm8
movapd %xmm10, %xmm9
movapd 0x2684(%rip), %xmm10    # 0x5060
movapd %xmm1, %xmm2
pcmpgtd %xmm4, %xmm2
andpd %xmm2, %xmm1
pandn %xmm4, %xmm2
por %xmm1, %xmm2
movdqa %xmm5, %xmm1
pcmpgtd %xmm2, %xmm1
pand %xmm1, %xmm2
pandn %xmm5, %xmm1
por %xmm2, %xmm1
movapd %xmm0, %xmm2
pcmpgtd %xmm4, %xmm2
andpd %xmm2, %xmm0
pandn %xmm4, %xmm2
por %xmm0, %xmm2
movdqa %xmm5, %xmm0
pcmpgtd %xmm2, %xmm0
pand %xmm0, %xmm2
pandn %xmm5, %xmm0
por %xmm2, %xmm0
movdqu %xmm11, -0x200(%rdi,%rcx,4)
movdqu %xmm1, -0x100(%rdi,%rcx,4)
movdqu %xmm0, (%rdi,%rcx,4)
addq $0x4, %rcx
cmpq $0x8, %rcx
jne 0x2819
incq %rax
addq $0x20, %rdi
cmpq $0x8, %rax
jne 0x2817
retq