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

```asm
<write_mg_info>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  lea    -0x41(%rsi),%eax
  cmp    $0x16,%al
  ja     L12
  movzbl %al,%eax
  lea    D40(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x4,%r13d
  mov    $0x80,%r12d
  jmp    L45
  mov    $0x4,%r13d
  mov    $0x100,%r12d
L45:
  mov    %r12d,%edi
  call   <ilog2@plt>
  mov    %eax,%ebp
  mov    %r12d,%edx
  lea    D6(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %r12d,%edx
  lea    D3(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %r12d,%edx
  lea    D100(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %r13d,%edx
  lea    D104(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D25(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D75(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    $0x0,%edx
  lea    D111(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D95(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D39(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D77(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  mov    $0x1,%edx
  lea    D67(%rip),%rsi
  mov    %rbx,%rdi
  call   <fprintf@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  mov    $0x14,%r13d
  mov    $0x100,%r12d
  jmp    L45
  mov    $0x14,%r13d
  mov    $0x200,%r12d
  jmp    L45
  mov    $0x32,%r13d
  mov    $0x400,%r12d
  jmp    L45
  mov    $0x32,%r13d
  mov    $0x800,%r12d
  jmp    L45
L12:
  movsbl %sil,%esi
  lea    D33(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L45
  mov    $0x4,%r13d
  mov    $0x20,%r12d
  jmp    L45
```

tool_calls: name: parse_data
arguments: tag: D6
type: string
name: parse_data
arguments: tag: D3
type: string
name: parse_data
arguments: tag: D100
type: string
name: parse_data
arguments: tag: D104
type: string
name: parse_data
arguments: tag: D25
type: string
name: parse_data
arguments: tag: D75
type: string
name: parse_data
arguments: tag: D111
type: string
name: parse_data
arguments: tag: D95
type: string
name: parse_data
arguments: tag: D39
type: string
name: parse_data
arguments: tag: D77
type: string
name: parse_data
arguments: tag: D67
type: string
name: parse_data
arguments: tag: D33
type: string

tool: D6: #define NX_DEFAULT     %d


tool: D3: #define NY_DEFAULT     %d


tool: D100: #define NZ_DEFAULT     %d


tool: D104: #define NIT_DEFAULT    %d


tool: D25: #define LM             %d


tool: D75: #define LT_DEFAULT     %d


tool: D111: #define DEBUG_DEFAULT  %d


tool: D95: #define NDIM1          %d


tool: D39: #define NDIM2          %d


tool: D77: #define NDIM3          %d


tool: D67: #define ONE            %d


tool: D33: setparams: Internal error: invalid class type %c


assistant: ```c
void write_mg_info(FILE *fp, char class) {
  int problem_size, nit, log2_size, lt_default, lm;
  int ndim1, ndim2, ndim3;
  if (class == 'S') {
    problem_size = 32;
    nit = 4;
  } else if (class == 'W') {
    problem_size = 128;
    nit = 4;
  } else if (class == 'A') {
    problem_size = 256;
    nit = 4;
  } else if (class == 'B') {
    problem_size = 256;
    nit = 20;
  } else if (class == 'C') {
    problem_size = 512;
    nit = 20;
  } else if (class == 'D') {
    problem_size = 1024;
    nit = 50;
  } else if (class == 'E') {
    problem_size = 2048;
    nit = 50;
  } else {
    printf("setparams: Internal error: invalid class type %c\n", class);
    exit(1);
  }
  log2_size = ilog2(problem_size);
  lt_default = log2_size;
  lm = log2_size;
  ndim1 = lm;
  ndim3 = log2_size;
  ndim2 = log2_size;
  fprintf(fp, "#define NX_DEFAULT     %d\n", problem_size);
  fprintf(fp, "#define NY_DEFAULT     %d\n", problem_size);
  fprintf(fp, "#define NZ_DEFAULT     %d\n", problem_size);
  fprintf(fp, "#define NIT_DEFAULT    %d\n", nit);
  fprintf(fp, "#define LM             %d\n", lm);
  fprintf(fp, "#define LT_DEFAULT     %d\n", lt_default);
  fprintf(fp, "#define DEBUG_DEFAULT  %d\n", 0);
  fprintf(fp, "#define NDIM1          %d\n", ndim1);
  fprintf(fp, "#define NDIM2          %d\n", ndim2);
  fprintf(fp, "#define NDIM3          %d\n", ndim3);
  fprintf(fp, "#define ONE            %d\n", 1);
}
```