user: Converte this assembly snippet into its equivalent C code:

```asm
<size2str>:
  endbr64
  push   %r12
  mov    %rsi,%r12
  mov    %edx,%esi
  test   %rdi,%rdi
  js     L82
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdi,%xmm0
L37:
  mulss  D85(%rip),%xmm0
  comiss D111(%rip),%xmm0
  jae    L79
  comiss D118(%rip),%xmm0
  jae    L56
  comiss D157(%rip),%xmm0
  jae    L87
  comiss D31(%rip),%xmm0
  jae    L35
  comiss D8(%rip),%xmm0
  jbe    L4
  mov    %r12,%rdi
  lea    D73(%rip),%rdx
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
  call   <snprintf@plt>
  mov    %r12,%rax
  pop    %r12
  ret
L56:
  mulss  D34(%rip),%xmm0
  lea    D48(%rip),%rdx
  mov    %r12,%rdi
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
  call   <snprintf@plt>
L39:
  mov    %r12,%rax
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L82:
  mov    %rdi,%rax
  and    $0x1,%edi
  pxor   %xmm0,%xmm0
  shr    %rax
  or     %rdi,%rax
  cvtsi2ss %rax,%xmm0
  addss  %xmm0,%xmm0
  jmp    L37
  xchg   %ax,%ax
L79:
  mulss  D13(%rip),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  lea    D97(%rip),%rdx
  cvtss2sd %xmm0,%xmm0
  call   <snprintf@plt>
  mov    %r12,%rax
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L4:
  lea    D77(%rip),%rdx
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <snprintf@plt>
  jmp    L39
  nopl   0x0(%rax,%rax,1)
L87:
  mulss  D141(%rip),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  lea    D16(%rip),%rdx
  cvtss2sd %xmm0,%xmm0
  call   <snprintf@plt>
  mov    %r12,%rax
  pop    %r12
  ret
  xchg   %ax,%ax
L35:
  mulss  D85(%rip),%xmm0
  lea    D132(%rip),%rdx
  mov    %r12,%rdi
  mov    $0x1,%eax
  cvtss2sd %xmm0,%xmm0
  call   <snprintf@plt>
  jmp    L39
```

tool_calls: name: disassemble_data
arguments: label: D85
data_type: byte[4]
name: disassemble_data
arguments: label: D111
data_type: byte[4]
name: disassemble_data
arguments: label: D118
data_type: byte[4]
name: disassemble_data
arguments: label: D157
data_type: byte[4]
name: disassemble_data
arguments: label: D31
data_type: byte[4]
name: disassemble_data
arguments: label: D8
data_type: byte[4]
name: disassemble_data
arguments: label: D73
data_type: string
name: disassemble_data
arguments: label: D34
data_type: byte[4]
name: disassemble_data
arguments: label: D48
data_type: string
name: disassemble_data
arguments: label: D13
data_type: byte[4]
name: disassemble_data
arguments: label: D97
data_type: string
name: disassemble_data
arguments: label: D77
data_type: string
name: disassemble_data
arguments: label: D141
data_type: byte[4]
name: disassemble_data
arguments: label: D16
data_type: string
name: disassemble_data
arguments: label: D132
data_type: string

tool: {"D85": [0x00,0x00,0x80,0x3a]}

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

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

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

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

tool: {"D8": [0x00,0x00,0x00,0x00]}

tool: D73: %.1fK

tool: {"D34": [0x00,0x00,0x80,0x30]}

tool: D48: %.1fT

tool: {"D13": [0x00,0x00,0x80,0x2b]}

tool: D97: %.1fP

tool: D77: -0-

tool: {"D141": [0x00,0x00,0x80,0x35]}

tool: D16: %.1fG

tool: D132: %.1fM

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;
}
```