// File: /workspace/github_c_makefile_star2_O1/kilobyte[P]colormatch/color_distance.c
// Function: rgb2lab
void rgb2lab(int rgb, double lab[3])
{
    double r = ((rgb>>16)&0xff)/255.0;
    double g = ((rgb>> 8)&0xff)/255.0;
    double b = ((rgb    )&0xff)/255.0;
    double x,y,z;

    r = (r > 0.04045) ? pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
    g = (g > 0.04045) ? pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
    b = (b > 0.04045) ? pow((b + 0.055) / 1.055, 2.4) : b / 12.92;

    // at D65
    x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047;
    y = (r * 0.2126 + g * 0.7152 + b * 0.0722) / 1.00000;
    z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883;

    x = (x > 0.008856) ? pow(x, 1.0/3) : (7.787 * x) + 16.0/116;
    y = (y > 0.008856) ? pow(y, 1.0/3) : (7.787 * y) + 16.0/116;
    z = (z > 0.008856) ? pow(z, 1.0/3) : (7.787 * z) + 16.0/116;

    lab[0] = 116 * y - 16;
    lab[1] = 500 * (x - y);
    lab[2] = 200 * (y - z);
}

// Assembly:
pushq %rbx
subq $0x20, %rsp
movq %rsi, %rbx
movl %edi, %eax
shrl $0x10, %eax
movl $0xff, %ecx
andl %ecx, %eax
cvtsi2sd %eax, %xmm0
movsd 0x724(%rip), %xmm1      # 0x2180
movl %edi, %eax
shrl $0x8, %eax
andl %ecx, %eax
cvtsi2sd %eax, %xmm4
divsd %xmm1, %xmm0
andl %ecx, %edi
cvtsi2sd %edi, %xmm2
divsd %xmm1, %xmm4
ucomisd 0x70b(%rip), %xmm0      # 0x2188
jbe 0x1abe
addsd 0x711(%rip), %xmm0      # 0x2198
divsd 0x711(%rip), %xmm0      # 0x21a0
movsd 0x711(%rip), %xmm1      # 0x21a8
movsd %xmm2, 0x10(%rsp)
movsd %xmm4, 0x8(%rsp)
callq 0x1040
movsd 0x6d0(%rip), %xmm1      # 0x2180
movsd 0x8(%rsp), %xmm4
movsd 0x10(%rsp), %xmm2
jmp 0x1ac6
divsd 0x6ca(%rip), %xmm0      # 0x2190
divsd %xmm1, %xmm2
ucomisd 0x6b6(%rip), %xmm4      # 0x2188
movsd %xmm0, 0x18(%rsp)
jbe 0x1b0d
addsd 0x6b6(%rip), %xmm4      # 0x2198
divsd 0x6b6(%rip), %xmm4      # 0x21a0
movsd 0x6b6(%rip), %xmm1      # 0x21a8
movapd %xmm4, %xmm0
movsd %xmm2, 0x10(%rsp)
callq 0x1040
movsd 0x10(%rsp), %xmm2
movapd %xmm0, %xmm4
jmp 0x1b15
divsd 0x67b(%rip), %xmm4      # 0x2190
ucomisd 0x66b(%rip), %xmm2      # 0x2188
jbe 0x1b52
addsd 0x671(%rip), %xmm2      # 0x2198
divsd 0x671(%rip), %xmm2      # 0x21a0
movsd 0x671(%rip), %xmm1      # 0x21a8
movapd %xmm2, %xmm0
movsd %xmm4, 0x8(%rsp)
callq 0x1040
movsd 0x8(%rsp), %xmm4
movapd %xmm0, %xmm2
jmp 0x1b5a
divsd 0x636(%rip), %xmm2      # 0x2190
movsd 0x64e(%rip), %xmm0      # 0x21b0
mulsd %xmm4, %xmm0
movsd 0x64a(%rip), %xmm1      # 0x21b8
movsd 0x18(%rsp), %xmm3
mulsd %xmm3, %xmm1
addsd %xmm0, %xmm1
movsd 0x63c(%rip), %xmm0      # 0x21c0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
divsd 0x634(%rip), %xmm0      # 0x21c8
movsd 0x634(%rip), %xmm5      # 0x21d0
mulsd %xmm4, %xmm5
movsd 0x630(%rip), %xmm1      # 0x21d8
mulsd %xmm3, %xmm1
addsd %xmm5, %xmm1
movsd 0x628(%rip), %xmm5      # 0x21e0
mulsd %xmm2, %xmm5
mulsd 0x624(%rip), %xmm4      # 0x21e8
mulsd 0x624(%rip), %xmm3      # 0x21f0
addsd %xmm1, %xmm5
addsd %xmm4, %xmm3
mulsd 0x61c(%rip), %xmm2      # 0x21f8
addsd %xmm3, %xmm2
ucomisd 0x620(%rip), %xmm0      # 0x2208
jbe 0x1c11
movsd 0x62e(%rip), %xmm1      # 0x2220
movsd %xmm2, 0x10(%rsp)
movsd %xmm5, 0x8(%rsp)
callq 0x1040
movsd 0x8(%rsp), %xmm5
movsd 0x10(%rsp), %xmm2
jmp 0x1c21
mulsd 0x5f7(%rip), %xmm0      # 0x2210
addsd 0x5f7(%rip), %xmm0      # 0x2218
divsd 0x5d7(%rip), %xmm2      # 0x2200
ucomisd 0x5d7(%rip), %xmm5      # 0x2208
movsd %xmm0, 0x18(%rsp)
jbe 0x1c5c
movsd 0x5df(%rip), %xmm1      # 0x2220
movapd %xmm5, %xmm0
movsd %xmm2, 0x10(%rsp)
callq 0x1040
movsd 0x10(%rsp), %xmm2
movapd %xmm0, %xmm5
jmp 0x1c6c
mulsd 0x5ac(%rip), %xmm5      # 0x2210
addsd 0x5ac(%rip), %xmm5      # 0x2218
ucomisd 0x594(%rip), %xmm2      # 0x2208
jbe 0x1c99
movsd 0x5a2(%rip), %xmm1      # 0x2220
movapd %xmm2, %xmm0
movsd %xmm5, 0x8(%rsp)
callq 0x1040
movsd 0x8(%rsp), %xmm5
movapd %xmm0, %xmm2
jmp 0x1ca9
mulsd 0x56f(%rip), %xmm2      # 0x2210
addsd 0x56f(%rip), %xmm2      # 0x2218
movsd 0x18(%rsp), %xmm1
movsd 0x571(%rip), %xmm0      # 0x2228
mulsd %xmm5, %xmm0
addsd 0x56d(%rip), %xmm0      # 0x2230
movsd %xmm0, (%rbx)
subsd %xmm5, %xmm1
mulsd 0x565(%rip), %xmm1      # 0x2238
movsd %xmm1, 0x8(%rbx)
subsd %xmm2, %xmm5
mulsd 0x55c(%rip), %xmm5      # 0x2240
movsd %xmm5, 0x10(%rbx)
addq $0x20, %rsp
popq %rbx
retq