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

```asm
<size2str>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  mov    -0x18(%rbp),%rax
  test   %rax,%rax
  js     L61
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L112
L61:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L112:
  movss  D55(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x4(%rbp),%xmm0
  comiss D95(%rip),%xmm0
  jb     L94
  movss  -0x4(%rbp),%xmm0
  movss  D96(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rdx
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D105(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <snprintf@plt>
  jmp    L77
L94:
  movss  -0x4(%rbp),%xmm0
  comiss D83(%rip),%xmm0
  jb     L52
  movss  -0x4(%rbp),%xmm0
  movss  D69(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rdx
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D53(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <snprintf@plt>
  jmp    L77
L52:
  movss  -0x4(%rbp),%xmm0
  comiss D121(%rip),%xmm0
  jb     L113
  movss  -0x4(%rbp),%xmm0
  movss  D51(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rdx
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D134(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <snprintf@plt>
  jmp    L77
L113:
  movss  -0x4(%rbp),%xmm0
  comiss D104(%rip),%xmm0
  jb     L48
  movss  -0x4(%rbp),%xmm0
  movss  D55(%rip),%xmm1
  divss  %xmm1,%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movq   %xmm5,%rdx
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D3(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <snprintf@plt>
  jmp    L77
L48:
  movss  -0x4(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L13
  pxor   %xmm6,%xmm6
  cvtss2sd -0x4(%rbp),%xmm6
  movq   %xmm6,%rdx
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D68(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <snprintf@plt>
  jmp    L77
L13:
  mov    -0x24(%rbp),%ecx
  mov    -0x20(%rbp),%rax
  lea    D38(%rip),%rdx
  mov    %ecx,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
L77:
  mov    -0x20(%rbp),%rax
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D55
data_type: f32
name: parse_data
arguments: data_tag: D95
data_type: byte[4]
name: parse_data
arguments: data_tag: D96
data_type: byte[4]
name: parse_data
arguments: data_tag: D105
data_type: string
name: parse_data
arguments: data_tag: D83
data_type: byte[4]
name: parse_data
arguments: data_tag: D69
data_type: byte[4]
name: parse_data
arguments: data_tag: D53
data_type: string
name: parse_data
arguments: data_tag: D121
data_type: byte[4]
name: parse_data
arguments: data_tag: D51
data_type: byte[4]
name: parse_data
arguments: data_tag: D134
data_type: string
name: parse_data
arguments: data_tag: D104
data_type: byte[4]
name: parse_data
arguments: data_tag: D3
data_type: string
name: parse_data
arguments: data_tag: D68
data_type: string
name: parse_data
arguments: data_tag: D38
data_type: string

tool: D55: 1024

tool: {"D95": [0x00,0x00,0x7a,0x53]}

tool: {"D96": [0x00,0x00,0x80,0x53]}

tool: D105: %.1fP

tool: {"D83": [0x00,0x00,0x7a,0x4e]}

tool: {"D69": [0x00,0x00,0x80,0x4e]}

tool: D53: %.1fT

tool: {"D121": [0x00,0x00,0x7a,0x49]}

tool: {"D51": [0x00,0x00,0x80,0x49]}

tool: D134: %.1fG

tool: {"D104": [0x00,0x00,0x7a,0x44]}

tool: D3: %.1fM

tool: D68: %.1fK

tool: D38: -0-

assistant: ```c
char *size2str(unsigned long long size, char *str, int len) {
  float n = (float)size / 1024;
  if (n >= 1000ULL * 1024 * 1024 * 1024)
    snprintf(str, len, "%.1fP", n / (1024ULL * 1024 * 1024 * 1024));
  else if (n >= 1000 * 1024 * 1024)
    snprintf(str, len, "%.1fT", n / (1024 * 1024 * 1024));
  else if (n >= 1000 * 1024)
    snprintf(str, len, "%.1fG", n / (1024 * 1024));
  else if (n >= 1000)
    snprintf(str, len, "%.1fM", n / 1024);
  else if (n > 0)
    snprintf(str, len, "%.1fK", n);
  else
    snprintf(str, len, "-0-");
  return str;
}
```