user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<histogram_print>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x668,%rsp
  mov    %rdi,%r15
  mov    %fs:0x28,%rax
  mov    %rax,0x658(%rsp)
  xor    %eax,%eax
  mov    $0xffffffc0,%ebx
  lea    D44(%rip),%rbp
L302:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x2,%ebx
  cmp    $0x42,%ebx
  jne    L302
  lea    D3(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r15,0x28(%rsp)
  mov    $0xffffffc0,%r14d
  lea    D176(%rip),%r13
  jmp    L127
L61:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm1,%xmm1
  cvtsi2sd %rdx,%xmm1
  addsd  %xmm1,%xmm1
L520:
  movsd  0x18(%rsp),%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
  movsd  0x20(%rsp),%xmm0
  subsd  %xmm6,%xmm0
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x10(%rsp),%xmm0
  movsd  %xmm0,0x10(%rsp)
  add    $0x2,%ebx
  add    $0x8,%rbp
  cmp    $0x42,%ebx
  je     L216
L112:
  pxor   %xmm7,%xmm7
  cvtsi2sd %ebx,%xmm7
  movsd  %xmm7,0x18(%rsp)
  mov    0x0(%rbp),%rsi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    0x0(%rbp),%rax
  add    %rax,%r12
  test   %rax,%rax
  js     L61
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  jmp    L520
L216:
  test   %r12,%r12
  js     L225
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12,%xmm0
L32:
  movsd  0x8(%rsp),%xmm2
  divsd  %xmm0,%xmm2
  movsd  %xmm2,0x18(%rsp)
  mov    %r12,%rax
  sub    $0x1,%rax
  js     L267
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
L310:
  movsd  0x10(%rsp),%xmm2
  divsd  %xmm0,%xmm2
  movsd  %xmm2,0x8(%rsp)
  cmp    $0x5,%r12
  ja     L194
  test   %r12,%r12
  je     L282
  pxor   %xmm7,%xmm7
  movsd  0x8(%rsp),%xmm2
  ucomisd %xmm2,%xmm7
  ja     L144
  sqrtsd %xmm2,%xmm2
  movapd %xmm2,%xmm1
L252:
  movsd  0x18(%rsp),%xmm0
  mov    %r12,%rsi
  lea    D94(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
L92:
  add    $0x1,%r14d
  add    $0x208,%r15
  cmp    $0x41,%r14d
  je     L220
L127:
  mov    %r14d,%esi
  lea    D187(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  pxor   %xmm2,%xmm2
  cvtsi2sd %r14d,%xmm2
  movsd  %xmm2,0x20(%rsp)
  mov    %r15,%rbp
  mov    $0xffffffc0,%ebx
  pxor   %xmm2,%xmm2
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  mov    $0x0,%r12d
  jmp    L112
L225:
  mov    %r12,%rax
  shr    %rax
  mov    %r12,%rdx
  and    $0x1,%edx
  or     %rdx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  addsd  %xmm0,%xmm0
  jmp    L32
L267:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
  jmp    L310
L194:
  movsd  0x20(%rsp),%xmm1
  subsd  0x18(%rsp),%xmm1
  movsd  %xmm1,0x10(%rsp)
  mulsd  %xmm1,%xmm1
  movsd  0x8(%rsp),%xmm0
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L311
  sqrtsd %xmm0,%xmm0
  movq   %xmm0,%rbx
L356:
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm2
  ucomisd %xmm2,%xmm0
  ja     L344
  sqrtsd %xmm2,%xmm2
  movapd %xmm2,%xmm1
L360:
  movq   %rbx,%xmm3
  movsd  0x10(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm0
  mov    %r12,%rsi
  lea    D164(%rip),%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  jmp    L92
L311:
  call   <sqrt@plt>
  movq   %xmm0,%rbx
  jmp    L356
L344:
  movsd  0x8(%rsp),%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  jmp    L360
L144:
  movsd  0x8(%rsp),%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  jmp    L252
L282:
  mov    $0x0,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L92
L220:
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D82(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebx
  mov    $0x0,%ebp
  lea    D176(%rip),%r12
  jmp    L365
L199:
  mov    %rax,%rdi
  shr    %rdi
  and    $0x1,%eax
  or     %rax,%rdi
  pxor   %xmm1,%xmm1
  cvtsi2sd %rdi,%xmm1
  addsd  %xmm1,%xmm1
L397:
  movapd %xmm1,%xmm4
  mulsd  %xmm0,%xmm4
  addsd  %xmm4,%xmm3
  subsd  %xmm5,%xmm0
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm0,%xmm2
  add    $0x1,%edx
  add    $0x208,%rcx
  cmp    $0x41,%edx
  je     L4
L423:
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  mov    (%rcx),%rax
  add    %rax,%rsi
  test   %rax,%rax
  js     L199
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  jmp    L397
L4:
  add    %rsi,%rbp
  lea    0x30(%rsp),%rax
  test   %rsi,%rsi
  js     L400
  pxor   %xmm0,%xmm0
  cvtsi2sd %rsi,%xmm0
L196:
  divsd  %xmm0,%xmm3
  movsd  %xmm3,(%rax,%rbx,8)
  lea    0x240(%rsp),%rdx
  mov    %rsi,%rax
  sub    $0x1,%rax
  js     L500
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
L67:
  divsd  %xmm0,%xmm2
  movsd  %xmm2,(%rdx,%rbx,8)
  test   $0x1,%sil
  je     L146
  lea    0x1(%rsi),%rax
  shr    %rax
  pxor   %xmm2,%xmm2
  cvtsi2sd %rax,%xmm2
  mov    0x28(%rsp),%rcx
  pxor   %xmm1,%xmm1
  mov    $0x0,%edx
  jmp    L444
L400:
  mov    %rsi,%rdx
  shr    %rdx
  mov    %rsi,%rcx
  and    $0x1,%ecx
  or     %rcx,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
  jmp    L196
L500:
  mov    %rax,%rcx
  shr    %rcx
  and    $0x1,%eax
  or     %rax,%rcx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rcx,%xmm0
  addsd  %xmm0,%xmm0
  jmp    L67
L528:
  mov    %rax,%rdi
  shr    %rdi
  and    $0x1,%eax
  or     %rax,%rdi
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdi,%xmm0
  addsd  %xmm0,%xmm0
L214:
  addsd  %xmm0,%xmm1
  comisd %xmm2,%xmm1
  jae    L49
  add    $0x1,%edx
  add    $0x208,%rcx
  cmp    $0x81,%edx
  je     L274
L444:
  mov    (%rcx),%rax
  test   %rax,%rax
  js     L528
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L214
L49:
  sub    $0x40,%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  movsd  %xmm0,0x450(%rsp,%rbx,8)
L274:
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%rbx
  addq   $0x8,0x28(%rsp)
  cmp    $0x41,%rbx
  je     L300
L365:
  lea    -0x40(%rbx,%rbx,1),%eax
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  mov    0x28(%rsp),%rcx
  mov    $0xffffffc0,%edx
  pxor   %xmm2,%xmm2
  movapd %xmm2,%xmm3
  mov    $0x0,%esi
  jmp    L423
L146:
  mov    %rsi,%rax
  shr    %rax
  pxor   %xmm2,%xmm2
  cvtsi2sd %rax,%xmm2
  mov    0x28(%rsp),%rcx
  pxor   %xmm0,%xmm0
  mov    $0x0,%edx
  jmp    L203
L551:
  mov    %rax,%rdi
  shr    %rdi
  and    $0x1,%eax
  or     %rax,%rdi
  pxor   %xmm1,%xmm1
  cvtsi2sd %rdi,%xmm1
  addsd  %xmm1,%xmm1
L290:
  addsd  %xmm1,%xmm0
  ucomisd %xmm0,%xmm2
  jp     L239
  je     L309
L239:
  comisd %xmm2,%xmm0
  ja     L263
  add    $0x1,%edx
  add    $0x208,%rcx
  cmp    $0x81,%edx
  je     L274
L203:
  mov    (%rcx),%rax
  test   %rax,%rax
  js     L551
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  jmp    L290
L309:
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  subsd  D154(%rip),%xmm0
  movsd  %xmm0,0x450(%rsp,%rbx,8)
  jmp    L274
L263:
  sub    $0x40,%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  movsd  %xmm0,0x450(%rsp,%rbx,8)
  jmp    L274
L300:
  mov    %rbp,%rsi
  lea    D10(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D114(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x30(%rsp),%rbp
  lea    0x238(%rsp),%r13
  mov    %rbp,%rbx
  lea    D102(%rip),%r12
L160:
  movsd  (%rbx),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x8,%rbx
  cmp    %r13,%rbx
  jne    L160
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D183(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x450(%rsp),%rbx
  lea    0x658(%rsp),%r13
  lea    D102(%rip),%r12
L122:
  movsd  (%rbx),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x8,%rbx
  cmp    %r13,%rbx
  jne    L122
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D152(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x240(%rsp),%rbx
  lea    0x448(%rsp),%r13
  lea    D102(%rip),%r12
L374:
  movsd  (%rbx),%xmm0
  pxor   %xmm2,%xmm2
  ucomisd %xmm0,%xmm2
  ja     L238
  sqrtsd %xmm0,%xmm0
L55:
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x8,%rbx
  cmp    %rbx,%r13
  jne    L374
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D56(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xffffffc0,%ebx
  lea    D102(%rip),%r12
L431:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  subsd  0x0(%rbp),%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x2,%ebx
  add    $0x8,%rbp
  cmp    $0x42,%ebx
  jne    L431
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D64(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebp
  mov    $0xffffffc0,%ebx
  lea    0x30(%rsp),%r13
  lea    D102(%rip),%r12
L40:
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  subsd  0x0(%rbp,%r13,1),%xmm0
  movapd %xmm0,%xmm1
  mulsd  %xmm0,%xmm1
  movsd  0x240(%rsp,%rbp,1),%xmm0
  subsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  ucomisd %xmm0,%xmm2
  ja     L324
  sqrtsd %xmm0,%xmm0
L243:
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x2,%ebx
  add    $0x8,%rbp
  cmp    $0x42,%ebx
  jne    L40
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    0x658(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L3
  add    $0x668,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L238:
  call   <sqrt@plt>
  jmp    L55
L324:
  call   <sqrt@plt>
  jmp    L243
L3:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: tag: D44
type_guessed: string
name: retrieve_data
arguments: tag: D3
type_guessed: string
name: retrieve_data
arguments: tag: D176
type_guessed: string
name: retrieve_data
arguments: tag: D94
type_guessed: string
name: retrieve_data
arguments: tag: D187
type_guessed: string
name: retrieve_data
arguments: tag: D164
type_guessed: string
name: retrieve_data
arguments: tag: D82
type_guessed: string
name: retrieve_data
arguments: tag: D154
type_guessed: f64
name: retrieve_data
arguments: tag: D10
type_guessed: string
name: retrieve_data
arguments: tag: D114
type_guessed: string
name: retrieve_data
arguments: tag: D102
type_guessed: string
name: retrieve_data
arguments: tag: D183
type_guessed: string
name: retrieve_data
arguments: tag: D152
type_guessed: string
name: retrieve_data
arguments: tag: D56
type_guessed: string
name: retrieve_data
arguments: tag: D64
type_guessed: string

tool: D44: ; %d

tool: D3: ; total; mean; error; bias; precision

tool: D176: ; %lld

tool: D94: ; %lld; %.2f; %.2f

tool: D187: 
%d

tool: D164: ; %lld; %.2f; %.2f; %.2f; %.2f

tool: D82: total

tool: D154: 63.5

tool: D10: ; %lld


tool: D114: mean

tool: D102: ; %.2f

tool: D183: median

tool: D152: error

tool: D56: bias

tool: D64: precision

assistant: ```c
void histogram_print(unsigned long long h[129][65]) {
  int i, j;
  unsigned long long n, N;
  double x, y, s, s2;
  double mean[65], variance[65], median[65];
  for (j = 0; j < 65; ++j)
    printf("; %d", j * 2 - 64);
  printf("; total; mean; error; bias; precision");
  for (i = 0; i < 129; ++i) {
    printf("\n%d", i - 64);
    n = s = s2 = 0;
    x = (i - 64);
    for (j = 0; j < 65; ++j) {
      y = 2 * j - 64;
      printf("; %lld", h[i][j]);
      n += h[i][j];
      s += y * h[i][j];
      s2 += (x - y) * (x - y) * h[i][j];
    }
    s /= n;
    s2 /= (n - 1);
    if (n > 5)
      printf("; %lld; %.2f; %.2f; %.2f; %.2f", n, s, sqrt(s2), x - s, sqrt(s2 - (x - s) * (x - s)));
    else if (n > 0)
      printf("; %lld; %.2f; %.2f", n, s, sqrt(s2));
    else
      printf("; %lld", n);
  }
  printf("\n");
  N = 0;
  printf("total");
  for (j = 0; j < 65; ++j) {
    n = s = s2 = 0;
    y = 2 * j - 64;
    for (i = 0; i < 129; ++i) {
      x = (i - 64);
      n += h[i][j];
      s += x * h[i][j];
      s2 += (x - y) * (x - y) * h[i][j];
    }
    N += n;
    mean[j] = s / n;
    variance[j] = s2 / (n - 1);
    s = 0;
    if ((n & 1) == 1) {
      for (i = 0; i < 129; ++i) {
        s += h[i][j];
        if (s >= (n + 1) / 2) {
          median[j] = i - 64;
          break;
        }
      }
    } else {
      for (i = 0; i < 129; ++i) {
        s += h[i][j];
        if (s == n / 2) {
          median[j] = i - 63.5;
          break;
        } else if (s > n / 2) {
          median[j] = i - 64;
          break;
        }
      }
    }
    printf("; %lld", n);
  }
  printf("; %lld\n", N);
  printf("mean");
  for (j = 0; j < 65; ++j)
    printf("; %.2f", mean[j]);
  printf("\n");
  printf("median");
  for (j = 0; j < 65; ++j)
    printf("; %.2f", median[j]);
  printf("\n");
  printf("error");
  for (j = 0; j < 65; ++j)
    printf("; %.2f", sqrt(variance[j]));
  printf("\n");
  printf("bias");
  for (j = 0; j < 65; ++j)
    printf("; %.2f", (2 * j - 64) - mean[j]);
  printf("\n");
  printf("precision");
  for (j = 0; j < 65; ++j) {
    x = (2 * j - 64) - mean[j];
    printf("; %.2f", sqrt(variance[j] - x * x));
  }
  printf("\n");
}
```