user: What is the c source code of the assembly code below?

```asm
<gen_field>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8d,-0x24(%rbp)
  mov    %r9d,-0x28(%rbp)
  mov    -0x24(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x28(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %rsi,%r8
  mov    %rax,%rsi
  lea    D33(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x18(%rbp),%rax
  lea    D52(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L36
  mov    -0x18(%rbp),%rax
  lea    D77(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L43
L36:
  mov    -0x24(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L40
L43:
  mov    -0x18(%rbp),%rax
  lea    D94(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L13
  mov    -0x18(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L40
L13:
  mov    -0x24(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x24(%rbp),%esi
  mov    -0x20(%rbp),%rcx
  mov    -0x10(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  mov    %esi,%r8d
  mov    %rax,%rsi
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L40:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D21
type_guessed: string
name: disassemble_data
arguments: label: D108
type_guessed: string
name: disassemble_data
arguments: label: D33
type_guessed: string
name: disassemble_data
arguments: label: D52
type_guessed: string
name: disassemble_data
arguments: label: D77
type_guessed: string
name: disassemble_data
arguments: label: D64
type_guessed: string
name: disassemble_data
arguments: label: D58
type_guessed: string
name: disassemble_data
arguments: label: D94
type_guessed: string
name: disassemble_data
arguments: label: D0
type_guessed: string
name: disassemble_data
arguments: label: D25
type_guessed: string
name: disassemble_data
arguments: label: D80
type_guessed: string

tool: D21: (def-syntax %s%s-%s-offset %d)


tool: D108: (def-syntax %s%s-%s-size %d)


tool: D33: (def-syntax %s%s-%s-type "%s")


tool: D52: int 

tool: D77: unsigned int 

tool: D64: (def-syntax (%s%s-get-%s ?x)
  (c-get-int ?x %d))


tool: D58: (def-syntax (%s%s-set-%s ?x ?v)
  (c-set-int ?x %d ?v))


tool: D94: short 

tool: D0: unsigned short 

tool: D25: (def-syntax (%s%s-get-%s ?x)
  (c-get-short ?x %d))


tool: D80: (def-syntax (%s%s-set-%s ?x ?v)
  (c-set-short ?x %d ?v))


assistant: ```c
void gen_field(const char *prefix, const char *struct_name, const char *type, const char *field, int offset, int size) {
  printf("(def-syntax %s%s-%s-offset %d)\n", prefix, struct_name, field, offset);
  printf("(def-syntax %s%s-%s-size %d)\n", prefix, struct_name, field, size);
  printf("(def-syntax %s%s-%s-type \"%s\")\n", prefix, struct_name, field, type);
  if (strcmp(type, "int ") == 0 || strcmp(type, "unsigned int ") == 0) {
    printf("(def-syntax (%s%s-get-%s ?x)\n  (c-get-int ?x %d))\n", prefix, struct_name, field, offset);
    printf("(def-syntax (%s%s-set-%s ?x ?v)\n  (c-set-int ?x %d ?v))\n", prefix, struct_name, field, offset);
  } else if (strcmp(type, "short ") == 0 || strcmp(type, "unsigned short ") == 0) {
    printf("(def-syntax (%s%s-get-%s ?x)\n  (c-get-short ?x %d))\n", prefix, struct_name, field, offset);
    printf("(def-syntax (%s%s-set-%s ?x ?v)\n  (c-set-short ?x %d ?v))\n", prefix, struct_name, field, offset);
  }
}
```