user: What would the C source look like for the assembly code provided here:

```asm
<AddFloat>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x30,%rsp
  mov    %rdi,%r11
  mov    %esi,%r10d
  mov    %ecx,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  cmp    $0x6,%edx
  ja     L114
  mov    %edx,%r8d
  mov    %edx,%r12d
  test   %edx,%edx
  je     L101
  jmp    L120
L114:
  mov    $0x6,%r8d
L120:
  lea    0x1(%r8),%r12d
L101:
  pxor   %xmm3,%xmm3
  movaps %xmm0,%xmm1
  xorps  D5(%rip),%xmm1
  movaps %xmm0,%xmm2
  cmpltss %xmm3,%xmm2
  andps  %xmm2,%xmm1
  andnps %xmm0,%xmm2
  orps   %xmm2,%xmm1
  cvttss2si %xmm1,%edx
  mov    %rsp,%rsi
  mov    %rsi,%rdi
  mov    $0x0,%ecx
L37:
  mov    %ecx,%r9d
  add    $0x1,%ecx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %edx,%ebx
  sar    $0x1f,%ebx
  sub    %ebx,%eax
  lea    (%rax,%rax,4),%ebx
  add    %ebx,%ebx
  sub    %ebx,%edx
  add    $0x30,%edx
  mov    %dl,(%rdi)
  mov    %eax,%edx
  add    $0x1,%rdi
  test   %eax,%eax
  jne    L37
  pxor   %xmm2,%xmm2
  comiss %xmm0,%xmm2
  ja     L161
L105:
  mov    (%r11),%rdi
  mov    %ebp,%r13d
  and    $0x4,%r13d
  jne    L3
  lea    (%rcx,%r12,1),%r9d
  cmp    %r9d,%r10d
  jle    L3
  mov    %ebp,%eax
  and    $0x80,%eax
  cmp    $0x1,%eax
  sbb    %eax,%eax
  and    $0xfffffff0,%eax
  add    $0x30,%eax
  sub    $0x1,%r10d
  sub    %r9d,%r10d
  lea    0x1(%rdi,%r10,1),%rdx
L0:
  add    $0x1,%rdi
  mov    %al,-0x1(%rdi)
  cmp    %rdx,%rdi
  jne    L0
  mov    %rdx,%rdi
  mov    %r9d,%r10d
L3:
  lea    -0x1(%rcx),%r14d
  test   %ecx,%ecx
  je     L38
  movslq %ecx,%rax
  lea    (%rsp,%rax,1),%rdx
  lea    -0x1(%rcx),%eax
  lea    0x1(%rdi,%rax,1),%rbx
  mov    %rdi,%rax
L93:
  add    $0x1,%rax
  movzbl -0x1(%rdx),%r9d
  mov    %r9b,-0x1(%rax)
  sub    $0x1,%rdx
  cmp    %rbx,%rax
  jne    L93
  mov    %r14d,%r14d
  lea    0x1(%rdi,%r14,1),%rdi
L38:
  mov    %rdi,(%r11)
  test   %r8d,%r8d
  jle    L179
  mov    %r8d,%ebx
  sub    $0x1,%r8d
  mov    %r8d,%eax
  lea    0x1(%rsi,%rax,1),%r9
  movss  D13(%rip),%xmm2
L171:
  cvttss2si %xmm1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  subss  %xmm0,%xmm1
  mulss  %xmm2,%xmm1
  cvttss2si %xmm1,%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  sar    $0x22,%rax
  mov    %edx,%r14d
  sar    $0x1f,%r14d
  sub    %r14d,%eax
  lea    (%rax,%rax,4),%eax
  add    %eax,%eax
  sub    %eax,%edx
  add    $0x30,%edx
  mov    %dl,(%rsi)
  add    $0x1,%rsi
  cmp    %r9,%rsi
  jne    L171
  movb   $0x2e,(%rdi)
  mov    %ebx,%ebx
  mov    $0x0,%eax
L96:
  movzbl (%rsp,%rax,1),%edx
  mov    %dl,0x1(%rdi,%rax,1)
  add    $0x1,%rax
  cmp    %rbx,%rax
  jne    L96
  test   %r8d,%r8d
  mov    $0x0,%eax
  cmovs  %eax,%r8d
  lea    0x1(%r8),%eax
  lea    0x1(%rdi,%rax,1),%rax
  mov    %rax,(%r11)
L179:
  test   %r13d,%r13d
  je     L61
  mov    (%r11),%rdi
  add    %r12d,%ecx
  cmp    %ecx,%r10d
  jle    L5
  and    $0x80,%ebp
  cmp    $0x1,%ebp
  sbb    %edx,%edx
  and    $0xfffffff0,%edx
  add    $0x30,%edx
  mov    %r10d,%r8d
  sub    %ecx,%r10d
  lea    -0x1(%r10),%eax
  lea    0x1(%rdi,%rax,1),%rsi
  mov    %rdi,%rax
L12:
  add    $0x1,%rax
  mov    %dl,-0x1(%rax)
  cmp    %rsi,%rax
  jne    L12
  mov    %r8d,%eax
  sub    %ecx,%eax
  lea    -0x1(%rax),%eax
  lea    0x1(%rdi,%rax,1),%rdi
L5:
  mov    %rdi,(%r11)
L61:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L43
  add    $0x30,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L161:
  movslq %ecx,%rcx
  movb   $0x2d,(%rsp,%rcx,1)
  lea    0x2(%r9),%ecx
  jmp    L105
L43:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D5
type_guessed: byte[16]
name: parse_data
arguments: data_tag: D13
type_guessed: f32

tool: {"D5": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D13: 10

assistant: ```c
void AddFloat(char **buf_p, float fval, int width, int prec, int flags) {
  char text[32];
  int digits;
  int prec_len, len;
  float signedVal;
  char *buf;
  int val;
  if (prec < 0 || prec > 6)
    prec = 6;
  prec_len = prec ? (prec + 1) : 0;
  signedVal = fval;
  if (fval < 0) {
    fval = -fval;
  }
  digits = 0;
  val = (int)fval;
  do {
    text[digits++] = '0' + val % 10;
    val /= 10;
  } while (val);
  if (signedVal < 0) {
    text[digits++] = '-';
  }
  buf = *buf_p;
  len = digits;
  if (!(flags & 0x00000004)) {
    while ((len + prec_len) < width) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
      width--;
    }
  }
  while (digits--) {
    *buf++ = text[digits];
  }
  *buf_p = buf;
  digits = 0;
  while (digits < prec) {
    fval -= (int)fval;
    fval *= 10.0;
    val = (int)fval;
    text[digits++] = '0' + val % 10;
  }
  if (digits > 0) {
    buf = *buf_p;
    *buf++ = '.';
    for (prec = 0; prec < digits; prec++) {
      *buf++ = text[prec];
    }
    *buf_p = buf;
  }
  if (flags & 0x00000004) {
    buf = *buf_p;
    while ((len + prec_len) < width) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
      width--;
    }
    *buf_p = buf;
  }
}
```