// File: donfreiday[P]gb/./imgui/imgui.cpp
// Function: ImGui::ColorConvertHSVtoRGB(float, float, float, float&, float&, float&)
void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
{
    if (s == 0.0f)
    {
        // gray
        out_r = out_g = out_b = v;
        return;
    }

    h = fmodf(h, 1.0f) / (60.0f/360.0f);
    int   i = (int)h;
    float f = h - (float)i;
    float p = v * (1.0f - s);
    float q = v * (1.0f - s * f);
    float t = v * (1.0f - s * (1.0f - f));

    switch (i)
    {
    case 0: out_r = v; out_g = t; out_b = p; break;
    case 1: out_r = q; out_g = v; out_b = p; break;
    case 2: out_r = p; out_g = v; out_b = t; break;
    case 3: out_r = p; out_g = q; out_b = v; break;
    case 4: out_r = t; out_g = p; out_b = v; break;
    case 5: default: out_r = v; out_g = p; out_b = q; break;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movss %xmm0, -0x4(%rbp)
movss %xmm1, -0x8(%rbp)
movss %xmm2, -0xc(%rbp)
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movq %rdx, -0x28(%rbp)
movss -0x8(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0xa3e4
jp 0xa3e4
movss -0xc(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
movss -0x4(%rbp), %xmm0
movss 0x50c27(%rip), %xmm1    # 0x5b018
movss %xmm1, -0x4c(%rbp)
callq 0x7930
movss -0x4c(%rbp), %xmm1
movss 0x50c90(%rip), %xmm2    # 0x5b098
divss %xmm2, %xmm0
movss %xmm0, -0x4(%rbp)
cvttss2si -0x4(%rbp), %eax
movl %eax, -0x2c(%rbp)
movss -0x4(%rbp), %xmm0
cvtsi2ssl -0x2c(%rbp), %xmm2
subss %xmm2, %xmm0
movss %xmm0, -0x30(%rbp)
movss -0xc(%rbp), %xmm0
movss -0x8(%rbp), %xmm3
movaps %xmm1, %xmm2
subss %xmm3, %xmm2
mulss %xmm2, %xmm0
movss %xmm0, -0x34(%rbp)
movss -0xc(%rbp), %xmm0
movss -0x8(%rbp), %xmm3
movss -0x30(%rbp), %xmm2
mulss %xmm2, %xmm3
movaps %xmm1, %xmm2
subss %xmm3, %xmm2
mulss %xmm2, %xmm0
movss %xmm0, -0x38(%rbp)
movss -0xc(%rbp), %xmm0
movss -0x8(%rbp), %xmm2
movss -0x30(%rbp), %xmm4
movaps %xmm1, %xmm3
subss %xmm4, %xmm3
mulss %xmm3, %xmm2
subss %xmm2, %xmm1
mulss %xmm1, %xmm0
movss %xmm0, -0x3c(%rbp)
movl -0x2c(%rbp), %eax
movq %rax, -0x48(%rbp)
subq $0x5, %rax
ja 0xa58a
movq -0x48(%rbp), %rax
leaq 0x50cb4(%rip), %rcx     # 0x5b160
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movss -0xc(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x3c(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x34(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
movss -0x38(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0xc(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x34(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
movss -0x34(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0xc(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x3c(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
movss -0x34(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x38(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0xc(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
movss -0x3c(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x34(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0xc(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
jmp 0xa5b1
jmp 0xa58a
movss -0xc(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x34(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x38(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
addq $0x50, %rsp
popq %rbp
retq
nopw (%rax,%rax)