user: Translate the below assembly code into C programming language:

```asm
<write_lu_info>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%rbx
  mov    %esi,%r13d
  lea    -0x41(%rdx),%eax
  cmp    $0x16,%al
  ja     L10
  movzbl %al,%eax
  lea    D21(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  lea    D30(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x21,%ebp
  movl   $0x12c,0x4(%rsp)
  jmp    L42
  lea    D92(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x40,%ebp
  movl   $0xfa,0x4(%rsp)
L42:
  mov    %r13d,%edi
  call   <isqrt2@plt>
  mov    %eax,%r12d
  mov    %r13d,%eax
  cltd
  idiv   %r12d
  mov    %eax,%ecx
  mov    %ebp,%eax
  cltd
  idiv   %r12d
  mov    %r12d,%edx
  imul   %eax,%edx
  cmp    %ebp,%edx
  setl   %dl
  movzbl %dl,%edx
  lea    (%rax,%rdx,1),%r15d
  mov    %ebp,%eax
  cltd
  idiv   %ecx
  imul   %eax,%ecx
  cmp    %ebp,%ecx
  setl   %dl
  movzbl %dl,%edx
  lea    (%rax,%rdx,1),%r14d
  mov    %r13d,%edx
  lea    D129(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r12d,%edx
  lea    D88(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D121(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D27(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebp,%edx
  lea    D105(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r15d,%edx
  lea    D165(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14d,%edx
  lea    D160(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %rbx,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D172(%rip),%rdi
  call   <fwrite@plt>
  mov    0x4(%rsp),%r14d
  mov    %r14d,%edx
  lea    D2(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %r14d,%edx
  lea    D14(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    0x8(%rsp),%rdx
  lea    D63(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  lea    D92(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x66,%ebp
  movl   $0xfa,0x4(%rsp)
  jmp    L42
  lea    D92(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0xa2,%ebp
  movl   $0xfa,0x4(%rsp)
  jmp    L42
  lea    D197(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x198,%ebp
  movl   $0x12c,0x4(%rsp)
  jmp    L42
  lea    D72(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0x3fc,%ebp
  movl   $0x12c,0x4(%rsp)
  jmp    L42
L10:
  movsbl %dl,%esi
  lea    D123(%rip),%rdi
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L42
  lea    D72(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    $0xc,%ebp
  movl   $0x32,0x4(%rsp)
  jmp    L42
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D30
datatype: string
name: extract_symbolic_data
arguments: data_tag: D92
datatype: string
name: extract_symbolic_data
arguments: data_tag: D129
datatype: string
name: extract_symbolic_data
arguments: data_tag: D88
datatype: string
name: extract_symbolic_data
arguments: data_tag: D121
datatype: string
name: extract_symbolic_data
arguments: data_tag: D27
datatype: string
name: extract_symbolic_data
arguments: data_tag: D105
datatype: string
name: extract_symbolic_data
arguments: data_tag: D165
datatype: string
name: extract_symbolic_data
arguments: data_tag: D160
datatype: string
name: extract_symbolic_data
arguments: data_tag: D172
datatype: string
name: extract_symbolic_data
arguments: data_tag: D2
datatype: string
name: extract_symbolic_data
arguments: data_tag: D14
datatype: string
name: extract_symbolic_data
arguments: data_tag: D63
datatype: string
name: extract_symbolic_data
arguments: data_tag: D197
datatype: string
name: extract_symbolic_data
arguments: data_tag: D72
datatype: string
name: extract_symbolic_data
arguments: data_tag: D123
datatype: string

tool: D30: 1.5e-3

tool: D92: 2.0e0

tool: D129: #define nnodes_compiled  %d


tool: D88: #define nnodes_xdim      %d


tool: D121: #define isiz01  %d


tool: D27: #define isiz02  %d


tool: D105: #define isiz03  %d


tool: D165: #define isiz1  %d


tool: D160: #define isiz2  %d


tool: D172: #define isiz3  isiz03


tool: D2: #define itmax_default  %d


tool: D14: #define inorm_default  %d


tool: D63: #define dt_default  %s


tool: D197: 1.0e0

tool: D72: 0.5e0

tool: D123: setparams: Internal error: invalid class %c


assistant: ```c
void write_lu_info(FILE *fp, int nprocs, char class) {
  int isiz1, isiz2, itmax, inorm, problem_size;
  int xdiv, ydiv;
  char *dt_default;
  if (class == 'S') {
    problem_size = 12;
    dt_default = "0.5e0";
    itmax = 50;
  } else if (class == 'W') {
    problem_size = 33;
    dt_default = "1.5e-3";
    itmax = 300;
  } else if (class == 'A') {
    problem_size = 64;
    dt_default = "2.0e0";
    itmax = 250;
  } else if (class == 'B') {
    problem_size = 102;
    dt_default = "2.0e0";
    itmax = 250;
  } else if (class == 'C') {
    problem_size = 162;
    dt_default = "2.0e0";
    itmax = 250;
  } else if (class == 'D') {
    problem_size = 408;
    dt_default = "1.0e0";
    itmax = 300;
  } else if (class == 'E') {
    problem_size = 1020;
    dt_default = "0.5e0";
    itmax = 300;
  } else {
    printf("setparams: Internal error: invalid class %c\n", class);
    exit(1);
  }
  inorm = itmax;
  xdiv = isqrt2(nprocs);
  ydiv = nprocs / xdiv;
  isiz1 = problem_size / xdiv;
  if (isiz1 * xdiv < problem_size)
    isiz1++;
  isiz2 = problem_size / ydiv;
  if (isiz2 * ydiv < problem_size)
    isiz2++;
  fprintf(fp, "#define nnodes_compiled  %d\n", nprocs);
  fprintf(fp, "#define nnodes_xdim      %d\n", xdiv);
  fprintf(fp, "#define isiz01  %d\n", problem_size);
  fprintf(fp, "#define isiz02  %d\n", problem_size);
  fprintf(fp, "#define isiz03  %d\n", problem_size);
  fprintf(fp, "#define isiz1  %d\n", isiz1);
  fprintf(fp, "#define isiz2  %d\n", isiz2);
  fprintf(fp, "#define isiz3  isiz03\n");
  fprintf(fp, "#define itmax_default  %d\n", itmax);
  fprintf(fp, "#define inorm_default  %d\n", inorm);
  fprintf(fp, "#define dt_default  %s\n", dt_default);
}
```