user: What is the c source code of the assembly code below:

```asm
<uchar_to_float>:
  endbr64
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  lea    0x0(,%rsi,4),%edi
  sub    $0x8,%rsp
  call   <malloc@plt>
  mov    %rax,%r8
  test   %rbp,%rbp
  je     L4
  lea    (%rax,%rbp,4),%rdx
  cmp    %rdx,%rbx
  lea    (%rbx,%rbp,1),%rdx
  setae  %cl
  cmp    %rdx,%rax
  setae  %sil
  or     %sil,%cl
  je     L168
  lea    -0x1(%rbp),%rcx
  cmp    $0xe,%rcx
  jbe    L168
  mov    %rbp,%rcx
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  mov    %rbx,%rdx
  and    $0xfffffffffffffff0,%rcx
  movapd D10(%rip),%xmm3
  add    %rbx,%rcx
  nopl   0x0(%rax)
L49:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x40,%rax
  movdqa %xmm0,%xmm1
  punpckhbw %xmm5,%xmm0
  punpcklbw %xmm5,%xmm1
  movdqa %xmm0,%xmm6
  punpckhwd %xmm4,%xmm0
  movdqa %xmm1,%xmm2
  punpckhwd %xmm4,%xmm1
  punpcklwd %xmm4,%xmm6
  punpcklwd %xmm4,%xmm2
  cvtdq2pd %xmm2,%xmm7
  divpd  %xmm3,%xmm7
  pshufd $0xee,%xmm2,%xmm2
  cvtdq2pd %xmm2,%xmm2
  divpd  %xmm3,%xmm2
  cvtpd2ps %xmm7,%xmm7
  cvtpd2ps %xmm2,%xmm2
  movlhps %xmm2,%xmm7
  pshufd $0xee,%xmm1,%xmm2
  movups %xmm7,-0x40(%rax)
  cvtdq2pd %xmm2,%xmm2
  cvtdq2pd %xmm1,%xmm7
  divpd  %xmm3,%xmm2
  divpd  %xmm3,%xmm7
  cvtpd2ps %xmm2,%xmm2
  cvtpd2ps %xmm7,%xmm1
  movlhps %xmm2,%xmm1
  cvtdq2pd %xmm6,%xmm2
  movups %xmm1,-0x30(%rax)
  divpd  %xmm3,%xmm2
  pshufd $0xee,%xmm6,%xmm1
  cvtdq2pd %xmm1,%xmm1
  divpd  %xmm3,%xmm1
  cvtpd2ps %xmm2,%xmm2
  cvtpd2ps %xmm1,%xmm1
  movlhps %xmm1,%xmm2
  cvtdq2pd %xmm0,%xmm1
  pshufd $0xee,%xmm0,%xmm0
  divpd  %xmm3,%xmm1
  cvtdq2pd %xmm0,%xmm0
  movups %xmm2,-0x20(%rax)
  divpd  %xmm3,%xmm0
  cvtpd2ps %xmm1,%xmm1
  cvtpd2ps %xmm0,%xmm0
  movlhps %xmm0,%xmm1
  movups %xmm1,-0x10(%rax)
  cmp    %rcx,%rdx
  jne    L49
  mov    %rbp,%rax
  and    $0xfffffffffffffff0,%rax
  test   $0xf,%bpl
  je     L4
  movzbl (%rbx,%rax,1),%edx
  pxor   %xmm0,%xmm0
  movsd  D10(%rip),%xmm1
  cvtsi2sd %edx,%xmm0
  lea    0x1(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%r8,%rax,4)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%esi
  pxor   %xmm0,%xmm0
  lea    0x0(,%rdx,4),%rcx
  cvtsi2sd %esi,%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%r8,%rdx,4)
  lea    0x2(%rax),%edx
  movslq %edx,%rdx
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x3(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x4(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x4(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x8(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x5(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0xc(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x6(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x10(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x7(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x14(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x8(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x18(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0x9(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x1c(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0xa(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x20(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0xb(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x24(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0xc(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x28(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  lea    0xd(%rax),%edx
  movslq %edx,%rdx
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x2c(%r8,%rcx,1)
  cmp    %rdx,%rbp
  jbe    L4
  movzbl (%rbx,%rdx,1),%edx
  pxor   %xmm0,%xmm0
  add    $0xe,%eax
  cltq
  cvtsi2sd %edx,%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x30(%r8,%rcx,1)
  cmp    %rax,%rbp
  jbe    L4
  movzbl (%rbx,%rax,1),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x34(%r8,%rcx,1)
L4:
  add    $0x8,%rsp
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L168:
  movsd  D10(%rip),%xmm1
L163:
  movzbl (%rbx),%ecx
  pxor   %xmm0,%xmm0
  add    $0x1,%rbx
  add    $0x4,%rax
  cvtsi2sd %ecx,%xmm0
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    %rdx,%rbx
  jne    L163
  add    $0x8,%rsp
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: label: D10
type: f64[2]

tool: {"D10": [255.0,255.0]}

assistant: ```c
float *uchar_to_float(unsigned char *canal, size_t pixeles) {
  int i;
  float *output = (float *)malloc(sizeof(float) * pixeles);
  for (i = 0; i < pixeles; i++) {
    output[i] = canal[i] / 255.0;
  }
  return output;
}
```