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

```asm
<write_cg_info>:
  endbr64
  push   %r15
  lea    -0x41(%rdx),%eax
  push   %r14
  push   %r13
  push   %r12
  mov    %esi,%r12d
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x10,%rsp
  cmp    $0x16,%al
  ja     L32
  lea    D92(%rip),%rcx
  movzbl %al,%eax
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L32:
  movsbl %dl,%esi
  lea    D122(%rip),%rdi
  mov    %r8d,0xc(%rsp)
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  mov    0xc(%rsp),%r8d
L18:
  mov    %r8d,%edx
  mov    %rbp,%rdi
  lea    D70(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %r15d,%edx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D145(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14d,%edx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D28(%rip),%rsi
  call   <fprintf@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D77(%rip),%rsi
  call   <fprintf@plt>
  lea    D40(%rip),%rsi
  lea    D182(%rip),%rdx
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    %r12d,%edi
  call   <ilog2@plt>
  mov    %r12d,%edi
  mov    %eax,%edx
  shr    $0x1f,%edx
  lea    (%rdx,%rax,1),%r13d
  call   <ilog2@plt>
  sar    %r13d
  xor    %edi,%edi
  lea    0x0(%r13,%r13,1),%edx
  cmp    %eax,%edx
  setne  %dil
  add    %r13d,%edi
  call   <ipow2@plt>
  mov    %r13d,%edi
  mov    %eax,%r14d
  call   <ipow2@plt>
  mov    %rbp,%rcx
  mov    $0x37,%edx
  mov    $0x1,%esi
  lea    D153(%rip),%rdi
  mov    %eax,%r13d
  call   <fwrite@plt>
  mov    %r12d,%edx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D9(%rip),%rsi
  call   <fprintf@plt>
  mov    %r14d,%edx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D80(%rip),%rsi
  call   <fprintf@plt>
  add    $0x10,%rsp
  mov    %r13d,%edx
  mov    %rbp,%rdi
  lea    D6(%rip),%rsi
  pop    %rbp
  xor    %eax,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10c0 <fprintf@plt>
  nopl   0x0(%rax)
  lea    D2(%rip),%r13
  mov    $0xf,%r14d
  mov    $0xb,%r15d
  mov    $0x36b0,%r8d
  jmp    L18
  cs nopw 0x0(%rax,%rax,1)
  lea    D38(%rip),%r13
  mov    $0x4b,%r14d
  mov    $0xd,%r15d
  mov    $0x124f8,%r8d
  jmp    L18
  xchg   %ax,%ax
  lea    D132(%rip),%r13
  mov    $0x4b,%r14d
  mov    $0xf,%r15d
  mov    $0x249f0,%r8d
  jmp    L18
  xchg   %ax,%ax
  lea    D100(%rip),%r13
  mov    $0x64,%r14d
  mov    $0x15,%r15d
  mov    $0x16e360,%r8d
  jmp    L18
  xchg   %ax,%ax
  lea    D164(%rip),%r13
  mov    $0x64,%r14d
  mov    $0x1a,%r15d
  mov    $0x895440,%r8d
  jmp    L18
  xchg   %ax,%ax
  lea    D159(%rip),%r13
  mov    $0xf,%r14d
  mov    $0x7,%r15d
  mov    $0x578,%r8d
  jmp    L18
  xchg   %ax,%ax
  lea    D105(%rip),%r13
  mov    $0xf,%r14d
  mov    $0x8,%r15d
  mov    $0x1b58,%r8d
  jmp    L18
```

tool_calls: name: disassemble_data
arguments: data_tag: D122
data_type: string
name: disassemble_data
arguments: data_tag: D70
data_type: string
name: disassemble_data
arguments: data_tag: D145
data_type: string
name: disassemble_data
arguments: data_tag: D28
data_type: string
name: disassemble_data
arguments: data_tag: D77
data_type: string
name: disassemble_data
arguments: data_tag: D40
data_type: string
name: disassemble_data
arguments: data_tag: D182
data_type: string
name: disassemble_data
arguments: data_tag: D153
data_type: string
name: disassemble_data
arguments: data_tag: D9
data_type: string
name: disassemble_data
arguments: data_tag: D80
data_type: string
name: disassemble_data
arguments: data_tag: D6
data_type: string
name: disassemble_data
arguments: data_tag: D2
data_type: string
name: disassemble_data
arguments: data_tag: D38
data_type: string
name: disassemble_data
arguments: data_tag: D132
data_type: string
name: disassemble_data
arguments: data_tag: D100
data_type: string
name: disassemble_data
arguments: data_tag: D164
data_type: string
name: disassemble_data
arguments: data_tag: D159
data_type: string
name: disassemble_data
arguments: data_tag: D105
data_type: string

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


tool: D70: const int na = %d;


tool: D145: const int nonzer = %d;


tool: D28: const int niter = %d;


tool: D77: const double shift = %s;


tool: D40: const double rcond = %s;


tool: D182: 1.0e-1

tool: D153: 
// number of nodes for which this version is compiled


tool: D9: const int nnodes_compiled = %d;


tool: D80: const int num_proc_cols = %d;


tool: D6: const int num_proc_rows = %d;


tool: D2: 20.

tool: D38: 60.

tool: D132: 110.

tool: D100: 500.

tool: D164: 1.5e3

tool: D159: 10.

tool: D105: 12.

assistant: ```c
void write_cg_info(FILE *fp, int nprocs, char class) {
  int na, nonzer, niter;
  char *shift, *rcond = "1.0e-1";
  char *shiftS = "10.", *shiftW = "12.", *shiftA = "20.", *shiftB = "60.", *shiftC = "110.", *shiftD = "500.", *shiftE = "1.5e3";
  int num_proc_cols, num_proc_rows;
  if (class == 'S') {
    na = 1400;
    nonzer = 7;
    niter = 15;
    shift = shiftS;
  } else if (class == 'W') {
    na = 7000;
    nonzer = 8;
    niter = 15;
    shift = shiftW;
  } else if (class == 'A') {
    na = 14000;
    nonzer = 11;
    niter = 15;
    shift = shiftA;
  } else if (class == 'B') {
    na = 75000;
    nonzer = 13;
    niter = 75;
    shift = shiftB;
  } else if (class == 'C') {
    na = 150000;
    nonzer = 15;
    niter = 75;
    shift = shiftC;
  } else if (class == 'D') {
    na = 1500000;
    nonzer = 21;
    niter = 100;
    shift = shiftD;
  } else if (class == 'E') {
    na = 9000000;
    nonzer = 26;
    niter = 100;
    shift = shiftE;
  } else {
    printf("setparams: Internal error: invalid class type %c\n", class);
    exit(1);
  }
  fprintf(fp, "const int na = %d;\n", na);
  fprintf(fp, "const int nonzer = %d;\n", nonzer);
  fprintf(fp, "const int niter = %d;\n", niter);
  fprintf(fp, "const double shift = %s;\n", shift);
  fprintf(fp, "const double rcond = %s;\n", rcond);
  num_proc_cols = num_proc_rows = ilog2(nprocs) / 2;
  if (num_proc_cols + num_proc_rows != ilog2(nprocs))
    num_proc_cols += 1;
  num_proc_cols = ipow2(num_proc_cols);
  num_proc_rows = ipow2(num_proc_rows);
  fprintf(fp, "\n// number of nodes for which this version is compiled\n");
  fprintf(fp, "const int nnodes_compiled = %d;\n", nprocs);
  fprintf(fp, "const int num_proc_cols = %d;\n", num_proc_cols);
  fprintf(fp, "const int num_proc_rows = %d;\n", num_proc_rows);
}
```