// File: /workspace/github_cpp_makefile_star2_O3/lvandeve[P]lodepng/lodepng_util.cpp
// Function: lodepng::getChrm(float*, float*, unsigned int, lodepng::LodePNGICC const*, LodePNGInfo const*)
static unsigned getChrm(float m[9], float whitepoint[3], unsigned use_icc,
                        const LodePNGICC* icc, const LodePNGInfo* info) {
  size_t i;
  if(use_icc) {
    if(getICCChrm(m, whitepoint, icc)) return 1;  /* error in the matrix computations */
  } else if(info->chrm_defined && !info->srgb_defined) {
    float wx = info->chrm_white_x / 100000.0f, wy = info->chrm_white_y / 100000.0f;
    float rx = info->chrm_red_x / 100000.0f, ry = info->chrm_red_y / 100000.0f;
    float gx = info->chrm_green_x / 100000.0f, gy = info->chrm_green_y / 100000.0f;
    float bx = info->chrm_blue_x / 100000.0f, by = info->chrm_blue_y / 100000.0f;
    if(getChrmMatrixXY(m, wx, wy, rx, ry, gx, gy, bx, by)) return 1; /* returns if error */
    /* Output whitepoint, xyY to XYZ: */
    whitepoint[0] = wx / wy;
    whitepoint[1] = 1;
    whitepoint[2] = (1 - wx - wy) / wy;
  } else {
    /* the standard linear sRGB to XYZ matrix */
    static const float srgb[9] = {
        0.4124564f, 0.3575761f, 0.1804375f,
        0.2126729f, 0.7151522f, 0.0721750f,
        0.0193339f, 0.1191920f, 0.9503041f
    };
    for(i = 0; i < 9; i++) m[i] = srgb[i];
    /* sRGB's whitepoint xyY "0.3127,0.3290,1" in XYZ: */
    whitepoint[0] = 0.9504559270516716f;
    whitepoint[1] = 1;
    whitepoint[2] = 1.0890577507598784f;
  }
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x80, %rsp
movq %rsi, %rbx
movq %rdi, %r14
testl %edx, %edx
je 0x141ab
movq %rcx, %r15
cmpl $0x2, (%rcx)
jne 0x141fa
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movaps %xmm0, 0x60(%rsp)
movl $0x3f800000, %eax       # imm = 0x3F800000
movl %eax, 0x50(%rsp)
movl %eax, 0x60(%rsp)
movl %eax, 0x70(%rsp)
cmpl $0x0, 0x1c(%r15)
je 0x14228
movl 0x40(%r15), %eax
leaq 0x50(%rsp), %r12
movl %eax, 0x20(%r12)
movups 0x20(%r15), %xmm0
movups 0x30(%r15), %xmm1
movaps %xmm1, 0x10(%r12)
movaps %xmm0, (%r12)
movq %r12, %rdi
callq 0x14708
cvtss2sd 0x48(%r15), %xmm5
cvtss2sd 0x4c(%r15), %xmm2
cvtss2sd 0x50(%r15), %xmm6
movaps (%r12), %xmm0
movups 0x4(%r12), %xmm1
movups 0x8(%r12), %xmm3
movss 0xc(%r12), %xmm4
movlhps %xmm0, %xmm4            # xmm4 = xmm4[0],xmm0[0]
shufps $0xe2, %xmm0, %xmm4     # xmm4 = xmm4[2,0],xmm0[2,3]
cvtps2pd %xmm4, %xmm0
movss 0x10(%r12), %xmm4
movlhps %xmm1, %xmm4            # xmm4 = xmm4[0],xmm1[0]
shufps $0xe2, %xmm1, %xmm4     # xmm4 = xmm4[2,0],xmm1[2,3]
cvtps2pd %xmm4, %xmm1
movaps %xmm2, %xmm4
movlhps %xmm2, %xmm4            # xmm4 = xmm4[0],xmm2[0]
mulpd %xmm1, %xmm4
movaps %xmm5, %xmm7
movlhps %xmm5, %xmm7            # xmm7 = xmm7[0],xmm5[0]
mulpd %xmm0, %xmm7
addpd %xmm4, %xmm7
movss 0x14(%r12), %xmm4
movlhps %xmm3, %xmm4            # xmm4 = xmm4[0],xmm3[0]
shufps $0xe2, %xmm3, %xmm4     # xmm4 = xmm4[2,0],xmm3[2,3]
cvtps2pd %xmm4, %xmm9
movaps %xmm6, %xmm3
movlhps %xmm6, %xmm3            # xmm3 = xmm3[0],xmm6[0]
mulpd %xmm9, %xmm3
addpd %xmm7, %xmm3
cvtpd2ps %xmm3, %xmm3
movapd %xmm3, 0x30(%rsp)
cvtss2sd 0x18(%r12), %xmm15
xorps %xmm3, %xmm3
cvtss2sd 0x1c(%r12), %xmm3
mulsd %xmm3, %xmm2
mulsd %xmm15, %xmm5
addsd %xmm2, %xmm5
xorps %xmm4, %xmm4
cvtss2sd 0x20(%r12), %xmm4
mulsd %xmm4, %xmm6
addsd %xmm5, %xmm6
xorps %xmm2, %xmm2
cvtsd2ss %xmm6, %xmm2
movss %xmm2, 0x24(%rsp)
movapd %xmm0, %xmm8
movsd %xmm9, %xmm8            # xmm8 = xmm9[0],xmm8[1]
movapd %xmm1, %xmm5
unpckhpd %xmm9, %xmm5            # xmm5 = xmm5[1],xmm9[1]
jmp 0x1429f
cmpl $0x0, 0xd0(%r8)
je 0x141c3
cmpl $0x0, 0xf4(%r8)
je 0x144d4
movaps 0x61d56(%rip), %xmm0    # 0x75f20
movups %xmm0, 0x10(%r14)
movaps 0x61d3a(%rip), %xmm0    # 0x75f10
movups %xmm0, (%r14)
movl $0x3f734721, 0x20(%r14) # imm = 0x3F734721
movsd 0x61c26(%rip), %xmm0    # 0x75e10
movsd %xmm0, (%rbx)
movl $0x3f8b663f, 0x8(%rbx)  # imm = 0x3F8B663F
jmp 0x144c0
movl $0x3f800000, %eax       # imm = 0x3F800000
movl %eax, 0x20(%r14)
movss 0x61d89(%rip), %xmm0    # 0x75f94
movups %xmm0, 0x10(%r14)
movups %xmm0, (%r14)
movl %eax, 0x8(%rbx)
movsd 0x61b91(%rip), %xmm0    # 0x75db0
movsd %xmm0, (%rbx)
jmp 0x144c0
movss 0x10(%r15), %xmm0
movss 0x14(%r15), %xmm1
movss 0x18(%r15), %xmm2
movsd 0x48(%r15), %xmm3
movaps %xmm3, %xmm4
shufps $0x55, %xmm3, %xmm4     # xmm4 = xmm4[1,1],xmm3[1,1]
movss 0x50(%r15), %xmm5
leaq 0x50(%rsp), %r12
movq %r12, %rdi
movaps %xmm3, 0x30(%rsp)
movss %xmm5, 0x24(%rsp)
callq 0x148e9
xorps %xmm0, %xmm0
cvtss2sd (%r12), %xmm0
xorps %xmm1, %xmm1
cvtss2sd 0x4(%r12), %xmm1
cvtps2pd 0x10(%r12), %xmm5
cvtps2pd 0x8(%r12), %xmm8
cvtss2sd 0x18(%r12), %xmm15
xorps %xmm3, %xmm3
cvtss2sd 0x1c(%r12), %xmm3
xorps %xmm4, %xmm4
cvtss2sd 0x20(%r12), %xmm4
movsd %xmm4, 0x28(%rsp)
cvtss2sd 0x58(%r15), %xmm12
cvtss2sd 0x5c(%r15), %xmm13
xorps %xmm6, %xmm6
cvtss2sd 0x60(%r15), %xmm6
movapd %xmm1, %xmm7
mulsd %xmm13, %xmm7
movaps %xmm12, %xmm9
mulsd %xmm0, %xmm9
addsd %xmm7, %xmm9
movaps %xmm6, %xmm2
mulsd %xmm8, %xmm2
addsd %xmm9, %xmm2
movsd %xmm2, 0x48(%rsp)
movapd %xmm5, %xmm9
mulsd %xmm13, %xmm9
movapd %xmm8, %xmm11
unpckhpd %xmm8, %xmm11           # xmm11 = xmm11[1],xmm8[1]
movapd %xmm5, %xmm7
movaps %xmm12, %xmm14
mulsd %xmm11, %xmm14
addsd %xmm9, %xmm14
movapd %xmm5, %xmm9
unpckhpd %xmm5, %xmm9            # xmm9 = xmm9[1],xmm5[1]
movaps %xmm6, %xmm10
mulsd %xmm9, %xmm10
addsd %xmm14, %xmm10
mulsd %xmm3, %xmm13
mulsd %xmm15, %xmm12
addsd %xmm13, %xmm12
mulsd %xmm4, %xmm6
addsd %xmm12, %xmm6
xorps %xmm4, %xmm4
cvtss2sd 0x64(%r15), %xmm4
xorps %xmm2, %xmm2
cvtss2sd 0x68(%r15), %xmm2
movapd %xmm1, %xmm12
mulsd %xmm2, %xmm12
movaps %xmm4, %xmm14
mulsd %xmm0, %xmm14
addsd %xmm12, %xmm14
xorps %xmm12, %xmm12
cvtss2sd 0x6c(%r15), %xmm12
movaps %xmm12, %xmm13
mulsd %xmm8, %xmm13
addsd %xmm14, %xmm13
movapd %xmm5, %xmm14
mulsd %xmm2, %xmm14
movapd %xmm15, %xmm5
movaps %xmm4, %xmm15
mulsd %xmm11, %xmm15
addsd %xmm14, %xmm15
movaps %xmm12, %xmm14
mulsd %xmm9, %xmm14
addsd %xmm15, %xmm14
mulsd %xmm3, %xmm2
mulsd %xmm5, %xmm4
addsd %xmm2, %xmm4
mulsd 0x28(%rsp), %xmm12
xorps %xmm2, %xmm2
cvtss2sd 0x74(%r15), %xmm2
addsd %xmm4, %xmm12
mulsd %xmm2, %xmm1
xorps %xmm15, %xmm15
cvtss2sd 0x70(%r15), %xmm15
mulsd %xmm15, %xmm0
addsd %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtss2sd 0x78(%r15), %xmm1
mulsd %xmm1, %xmm8
addsd %xmm0, %xmm8
mulsd %xmm2, %xmm7
mulsd %xmm15, %xmm11
addsd %xmm7, %xmm11
mulsd %xmm1, %xmm9
addsd %xmm11, %xmm9
mulsd %xmm2, %xmm3
mulsd %xmm5, %xmm15
addsd %xmm3, %xmm15
xorps %xmm3, %xmm3
cvtsd2ss 0x48(%rsp), %xmm3
xorps %xmm4, %xmm4
cvtsd2ss %xmm10, %xmm4
xorps %xmm5, %xmm5
cvtsd2ss %xmm6, %xmm5
xorps %xmm6, %xmm6
cvtsd2ss %xmm13, %xmm6
xorps %xmm7, %xmm7
cvtsd2ss %xmm14, %xmm7
xorps %xmm10, %xmm10
cvtsd2ss %xmm12, %xmm10
xorps %xmm2, %xmm2
cvtsd2ss %xmm8, %xmm2
mulsd 0x28(%rsp), %xmm1
xorps %xmm8, %xmm8
cvtsd2ss %xmm9, %xmm8
addsd %xmm15, %xmm1
xorps %xmm9, %xmm9
cvtsd2ss %xmm1, %xmm9
movaps 0x30(%rsp), %xmm0
movaps %xmm0, %xmm1
shufps $0x55, %xmm0, %xmm1     # xmm1 = xmm1[1,1],xmm0[1,1]
movss %xmm9, 0x18(%rsp)
movss %xmm2, 0x8(%rsp)
movss %xmm10, (%rsp)
movss %xmm8, 0x10(%rsp)
movq %r14, %rdi
movss 0x24(%rsp), %xmm2
callq 0x149f8
testl %eax, %eax
je 0x144ad
movl $0x1, %ebp
jmp 0x144c2
movaps 0x30(%rsp), %xmm0
movlps %xmm0, (%rbx)
movss 0x24(%rsp), %xmm0
movss %xmm0, 0x8(%rbx)
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x80, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movd 0xf0(%r8), %xmm0
movd 0xe8(%r8), %xmm1
punpckldq %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
movd 0xe0(%r8), %xmm2
movd 0xd8(%r8), %xmm8
punpckldq %xmm2, %xmm8    # xmm8 = xmm8[0],xmm2[0],xmm8[1],xmm2[1]
punpcklqdq %xmm1, %xmm8    # xmm8 = xmm8[0],xmm1[0]
movdqa 0x618b2(%rip), %xmm1    # 0x75dc0
pand %xmm8, %xmm1
por 0x618b5(%rip), %xmm1    # 0x75dd0
psrld $0x10, %xmm8
por 0x618b6(%rip), %xmm8    # 0x75de0
subps 0x618be(%rip), %xmm8    # 0x75df0
addps %xmm1, %xmm8
divps 0x618c2(%rip), %xmm8    # 0x75e00
xorps %xmm1, %xmm1
cmpeqps %xmm8, %xmm1
movmskps %xmm1, %eax
movl $0x1, %ebp
testl %eax, %eax
jne 0x144c2
movl 0xd4(%r8), %eax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
movl 0xdc(%r8), %eax
movss 0x61a34(%rip), %xmm1    # 0x75fa8
divss %xmm1, %xmm0
movl 0xec(%r8), %ecx
cvtsi2ss %rcx, %xmm9
movl 0xe4(%r8), %ecx
cvtsi2ss %rcx, %xmm6
divss %xmm1, %xmm9
cvtsi2ss %rax, %xmm3
divss %xmm1, %xmm6
divss %xmm1, %xmm3
movss 0x619ea(%rip), %xmm1    # 0x75f94
movaps %xmm1, %xmm2
subss %xmm0, %xmm2
divss %xmm8, %xmm0
subss %xmm8, %xmm2
divss %xmm8, %xmm2
movaps %xmm8, %xmm4
shufps $0x55, %xmm8, %xmm4     # xmm4 = xmm4[1,1],xmm8[1,1]
movaps %xmm1, %xmm5
subss %xmm3, %xmm5
divss %xmm4, %xmm3
subss %xmm4, %xmm5
divss %xmm4, %xmm5
movaps %xmm8, %xmm4
unpckhpd %xmm8, %xmm4            # xmm4 = xmm4[1],xmm8[1]
movaps %xmm1, %xmm7
subss %xmm6, %xmm7
divss %xmm4, %xmm6
subss %xmm4, %xmm7
divss %xmm4, %xmm7
shufps $0xff, %xmm8, %xmm8     # xmm8 = xmm8[3,3,3,3]
movaps %xmm1, %xmm4
subss %xmm9, %xmm4
divss %xmm8, %xmm9
subss %xmm8, %xmm4
divss %xmm8, %xmm4
movss %xmm9, 0x8(%rsp)
movss %xmm4, 0x18(%rsp)
movss %xmm7, (%rsp)
movl $0x3f800000, 0x10(%rsp) # imm = 0x3F800000
movq %r14, %rdi
movss %xmm0, 0x28(%rsp)
movss %xmm2, 0x30(%rsp)
movaps %xmm1, %xmm4
movaps %xmm1, %xmm7
callq 0x149f8
testl %eax, %eax
jne 0x144c2
movss 0x28(%rsp), %xmm0
movss %xmm0, (%rbx)
movl $0x3f800000, 0x4(%rbx)  # imm = 0x3F800000
movss 0x30(%rsp), %xmm0
jmp 0x144bb