user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  movl   $0x0,-0x20(%rbp)
  movl   $0x1,-0x1c(%rbp)
  mov    $0x4c4b400,%edi
  call   <mem_alloc@plt>
  mov    %rax,-0x10(%rbp)
  jmp    L92
L10:
  mov    -0x1c(%rbp),%eax
  imul   $0xf4240,%eax,%eax
  mov    %eax,-0x14(%rbp)
  mov    $0x0,%eax
  call   <sys_millis@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L90
L84:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <int_enc@plt>
  addl   $0x1,-0x18(%rbp)
L90:
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L84
  mov    $0x0,%eax
  call   <sys_millis@plt>
  sub    -0x8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <sys_print@plt>
  mov    $0x0,%eax
  call   <sys_millis@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L41
L2:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <int_dec@plt>
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x20(%rbp)
  addl   $0x1,-0x18(%rbp)
L41:
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L2
  mov    $0x0,%eax
  call   <sys_millis@plt>
  sub    -0x8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <sys_print@plt>
  mov    $0x0,%eax
  call   <sys_millis@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L93
L88:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  mov    %rdx,%rdi
  call   <real_enc@plt>
  addl   $0x1,-0x18(%rbp)
L93:
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L88
  mov    $0x0,%eax
  call   <sys_millis@plt>
  sub    -0x8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <sys_print@plt>
  mov    $0x0,%eax
  call   <sys_millis@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L5
L36:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,%rdi
  call   <real_dec@plt>
  add    %eax,-0x20(%rbp)
  addl   $0x1,-0x18(%rbp)
L5:
  mov    -0x18(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L36
  mov    $0x0,%eax
  call   <sys_millis@plt>
  sub    -0x8(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x1c(%rbp),%eax
  mov    %eax,%esi
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <sys_print@plt>
  mov    -0x1c(%rbp),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  mov    %eax,-0x1c(%rbp)
L92:
  cmpl   $0xa,-0x1c(%rbp)
  jle    L10
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x10(%rbp),%rax
  add    $0xf4240,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  add    %edx,%eax
  add    %eax,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <mem_free@plt>
  mov    -0x20(%rbp),%eax
  add    $0x1b8888c0,%eax
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D6
type_guessed: string
name: read_data
arguments: data_tag: D2
type_guessed: string
name: read_data
arguments: data_tag: D3
type_guessed: string
name: read_data
arguments: data_tag: D23
type_guessed: string

tool: D6: encoded %dM ints in %lldms


tool: D2: decoded %dM ints in %lldms


tool: D3: encoded %dM reals in %lldms


tool: D23: decoded %dM reals in %lldms


assistant: ```c
int main(void) {
  int x = 0, mln = 1;
  char *buf = mem_alloc(sizeof(double) * 10 * 1000 * 1000);
  for (; mln <= 10; mln *= 10) {
    int i, count = mln * 1000 * 1000;
    long long t = sys_millis();
    for (i = 0; i < count; i++)
      int_enc(buf + i * sizeof(int), i);
    sys_print("encoded %dM ints in %lldms\n", mln, sys_millis() - t);
    t = sys_millis();
    for (i = 0; i < count; i++)
      x += int_dec(buf + i * sizeof(int));
    sys_print("decoded %dM ints in %lldms\n", mln, sys_millis() - t);
    t = sys_millis();
    for (i = 0; i < count; i++)
      real_enc(buf + i * sizeof(double), i);
    sys_print("encoded %dM reals in %lldms\n", mln, sys_millis() - t);
    t = sys_millis();
    for (i = 0; i < count; i++)
      x += (int)real_dec(buf + i * sizeof(double));
    sys_print("decoded %dM reals in %lldms\n", mln, sys_millis() - t);
  }
  x += buf[0] + buf[1 * 1000 * 1000];
  mem_free(buf);
  return x + 461932736;
}
```