user: Please show me the C implementation that matches the assembly code listed below:

```asm
<fosphor_gl_cmap_histogram>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  sar    $0x4,%eax
  mov    %eax,-0xc(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L38
L29:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x10(%rbp),%xmm0
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x4(%rbp),%xmm1
  movss  D31(%rip),%xmm0
  mulss  %xmm0,%xmm1
  movss  D20(%rip),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  movaps %xmm0,%xmm2
  movss  D85(%rip),%xmm1
  mov    D97(%rip),%eax
  movd   %eax,%xmm0
  mov    %rdx,%rdi
  call   <_set_rgba_from_hsv@plt>
  addl   $0x1,-0x10(%rbp)
L38:
  mov    -0x10(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  jl     L29
  mov    -0xc(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L9
L31:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x10(%rbp),%xmm0
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  D100(%rip),%xmm0
  comiss -0x8(%rbp),%xmm0
  jbe    L23
  movss  -0x8(%rbp),%xmm0
  jmp    L19
L23:
  movss  D100(%rip),%xmm0
L19:
  movss  D118(%rip),%xmm1
  movaps %xmm0,%xmm4
  addss  %xmm1,%xmm4
  movss  D39(%rip),%xmm0
  comiss -0x8(%rbp),%xmm0
  jbe    L26
  pxor   %xmm0,%xmm0
  jmp    L8
L26:
  movss  -0x8(%rbp),%xmm0
  movss  D39(%rip),%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  D32(%rip),%xmm0
  mulss  %xmm1,%xmm0
L8:
  movss  D126(%rip),%xmm1
  movaps %xmm1,%xmm3
  subss  %xmm0,%xmm3
  movss  -0x8(%rbp),%xmm1
  movss  D82(%rip),%xmm0
  mulss  %xmm0,%xmm1
  movss  D82(%rip),%xmm0
  subss  %xmm1,%xmm0
  movd   %xmm0,%eax
  mov    -0x10(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x18(%rbp),%rdx
  add    %rcx,%rdx
  movaps %xmm4,%xmm2
  movaps %xmm3,%xmm1
  movd   %eax,%xmm0
  mov    %rdx,%rdi
  call   <_set_rgba_from_hsv@plt>
  addl   $0x1,-0x10(%rbp)
L9:
  mov    -0x10(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L31
  nop
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D31
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D20
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D85
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D97
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D100
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D118
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D39
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D32
type_infered: byte[4]
name: disassemble_data
arguments: data_label: D126
type_infered: f32
name: disassemble_data
arguments: data_label: D82
type_infered: byte[4]

tool: {"D31": [0x00,0x00,0x80,0x40]}

tool: {"D20": [0x9a,0x99,0x19,0x3e]}

tool: {"D85": [0x00,0x00,0x00,0x3f]}

tool: {"D97": [0x66,0x66,0x66,0x3f]}

tool: {"D100": [0xcd,0xcc,0xcc,0x3e]}

tool: {"D118": [0x9a,0x99,0x19,0x3f]}

tool: {"D39": [0x9a,0x99,0x59,0x3f]}

tool: {"D32": [0x00,0x00,0x40,0x40]}

tool: D126: 1

tool: {"D82": [0xcd,0xcc,0x4c,0x3f]}

assistant: ```c
void fosphor_gl_cmap_histogram(uint32_t *rgba, int N) {
  int i;
  int m = N >> 4;
  for (i = 0; i < m; i++) {
    float p = (1.0f * i) / (N - 1);
    _set_rgba_from_hsv(&rgba[i], 0.90f, 0.50f, 0.15f + 4.0f * p);
  }
  for (i = m; i < N; i++) {
    float p = (1.0f * i) / (N - 1);
    _set_rgba_from_hsv(&rgba[i], 0.80f - p * 0.80f, 1.00f - ((p < 0.85f) ? 0.0f : ((p - 0.85f) * 3.0f)), 0.60f + ((p < 0.40f) ? p : 0.40f));
  }
}
```