user: 下面的汇编指令对应的C源代码是什么：

```asm
<sprint_fractional_12>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  movsd  %xmm0,-0x20(%rbp)
  movl   $0x0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x20(%rbp),%xmm0
  jbe    L3
  movl   $0x1,-0x10(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movq   D58(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
L3:
  movsd  -0x20(%rbp),%xmm1
  movsd  D51(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <nearbyint@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  jne    L50
  movl   $0x0,-0x10(%rbp)
L50:
  mov    -0xc(%rbp),%edx
  movslq %edx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  sub    %eax,%edx
  mov    %edx,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%edx
  movslq %edx,%rax
  imul   $0x2aaaaaab,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  sub    %eax,%edx
  mov    %edx,-0x4(%rbp)
  mov    -0xc(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x2aaaaaab,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
  cmpl   $0x0,-0x10(%rbp)
  je     L15
  mov    -0x18(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L15:
  cmpl   $0x0,-0x8(%rbp)
  je     L17
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    -0x18(%rbp),%rdx
  lea    (%rax,%rdx,1),%rdi
  mov    -0x8(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D3(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L68
L17:
  cmpl   $0x0,-0x4(%rbp)
  je     L43
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    -0x18(%rbp),%rdx
  lea    (%rax,%rdx,1),%rdi
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D29(%rip),%rax
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L68
L43:
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    -0x18(%rbp),%rdx
  lea    (%rax,%rdx,1),%rcx
  mov    -0xc(%rbp),%eax
  mov    %eax,%edx
  lea    D27(%rip),%rax
  mov    %rax,%rsi
  mov    %rcx,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L68:
  mov    -0x18(%rbp),%rax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D58
data_type: f32[2]
name: retrieve_data
arguments: label: D51
data_type: f64
name: retrieve_data
arguments: label: D1
data_type: string
name: retrieve_data
arguments: label: D3
data_type: string
name: retrieve_data
arguments: label: D29
data_type: string
name: retrieve_data
arguments: label: D27
data_type: string

tool: {"D58": [0.0,-0.0]}

tool: D51: 144

tool: D1: -

tool: D3: %d;%d;%d

tool: D29: %d;%d

tool: D27: %d

assistant: ```c
char *sprint_fractional_12(char *string, double v) {
  int d, p1, p2, neg = 0, n;
  if (v < 0.) {
    neg = 1;
    v = -v;
  }
  d = nearbyint(v * 144.);
  if (d == 0)
    neg = 0;
  p2 = d % 12;
  d /= 12;
  p1 = d % 12;
  d /= 12;
  string[0] = 0;
  if (neg)
    sprintf(string, "-");
  if (p2)
    sprintf(&string[strlen(string)], "%d;%d;%d", d, p1, p2);
  else if (p1)
    sprintf(&string[strlen(string)], "%d;%d", d, p1);
  else
    sprintf(&string[strlen(string)], "%d", d);
  return string;
}
```