user: Demonstrate the C code that generates the assembly output below:

```asm
<imm_bit_name>:
  endbr64
  push   %rbp
  lea    D9(%rip),%rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x8,%rsp
  and    $0x1,%edi
  movb   $0x0,D9(%rip)
  jne    L113
  test   $0x2,%bl
  jne    L48
L6:
  test   $0x4,%bl
  jne    L119
L407:
  test   $0x8,%bl
  jne    L356
L66:
  test   $0x10,%bl
  jne    L148
L112:
  test   $0x20,%bl
  jne    L118
L208:
  test   $0x40,%bl
  jne    L418
L166:
  test   $0x80,%bl
  jne    L101
L115:
  test   $0x1,%bh
  jne    L36
L404:
  test   $0x2,%bh
  jne    L346
L65:
  test   $0x4,%bh
  jne    L116
L413:
  test   $0x8,%bh
  jne    L92
L290:
  test   $0x10,%bh
  jne    L330
L84:
  test   $0x20,%bh
  jne    L203
L11:
  test   $0x40,%bh
  jne    L345
L387:
  test   $0x80,%bh
  jne    L291
L334:
  test   $0x10000,%ebx
  jne    L142
L223:
  test   $0x20000,%ebx
  jne    L191
L98:
  test   $0x40000,%ebx
  jne    L64
L176:
  test   $0x2000000,%ebx
  jne    L295
L135:
  test   $0x800000,%ebx
  jne    L82
L41:
  and    $0x1000000,%ebx
  jne    L1
L188:
  cmpb   $0x0,D9(%rip)
  lea    D183(%rip),%rax
  lea    D168(%rip),%rdx
  cmove  %rdx,%rax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L113:
  lea    D121(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x2,%bl
  je     L6
L48:
  lea    D197(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x4,%bl
  je     L407
L119:
  lea    D235(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x8,%bl
  je     L66
L356:
  lea    D20(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x10,%bl
  je     L112
L148:
  lea    D269(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x20,%bl
  je     L208
L118:
  lea    D165(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x40,%bl
  je     L166
L418:
  lea    D105(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x80,%bl
  je     L115
L101:
  lea    D34(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x1,%bh
  je     L404
L36:
  lea    D13(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x2,%bh
  je     L65
L346:
  lea    D61(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x4,%bh
  je     L413
L116:
  lea    D161(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x8,%bh
  je     L290
L92:
  lea    D51(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x10,%bh
  je     L84
L330:
  lea    D48(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x20,%bh
  je     L11
L203:
  lea    D229(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x40,%bh
  je     L387
L345:
  lea    D135(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x80,%bh
  je     L334
L291:
  lea    D192(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x10000,%ebx
  je     L223
L142:
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x20000,%ebx
  je     L98
L191:
  lea    D267(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x40000,%ebx
  je     L176
L64:
  lea    D10(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x2000000,%ebx
  je     L135
L295:
  lea    D217(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x800000,%ebx
  je     L41
L82:
  lea    D164(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  and    $0x1000000,%ebx
  je     L188
L1:
  lea    D190(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  jmp    L188
```

tool_calls: name: parse_data
arguments: label: D168
type_infered: string
name: parse_data
arguments: label: D121
type_infered: string
name: parse_data
arguments: label: D197
type_infered: string
name: parse_data
arguments: label: D235
type_infered: string
name: parse_data
arguments: label: D20
type_infered: string
name: parse_data
arguments: label: D269
type_infered: string
name: parse_data
arguments: label: D165
type_infered: string
name: parse_data
arguments: label: D105
type_infered: string
name: parse_data
arguments: label: D34
type_infered: string
name: parse_data
arguments: label: D13
type_infered: string
name: parse_data
arguments: label: D61
type_infered: string
name: parse_data
arguments: label: D161
type_infered: string
name: parse_data
arguments: label: D51
type_infered: string
name: parse_data
arguments: label: D48
type_infered: string
name: parse_data
arguments: label: D229
type_infered: string
name: parse_data
arguments: label: D135
type_infered: string
name: parse_data
arguments: label: D192
type_infered: string
name: parse_data
arguments: label: D3
type_infered: string
name: parse_data
arguments: label: D267
type_infered: string
name: parse_data
arguments: label: D10
type_infered: string
name: parse_data
arguments: label: D217
type_infered: string
name: parse_data
arguments: label: D164
type_infered: string
name: parse_data
arguments: label: D190
type_infered: string

tool: D168: none

tool: D121:  summon

tool: D197:  charm

tool: D235:  magic

tool: D20:  weapon

tool: D269:  blunt

tool: D165:  piercing

tool: D105:  slashing

tool: D34:  fire

tool: D13:  cold

tool: D61:  lightning

tool: D161:  acid

tool: D51:  poison

tool: D48:  negative

tool: D229:  holy

tool: D135:  energy

tool: D192:  mental

tool: D3:  disease

tool: D267:  drowning

tool: D10:  light

tool: D217:  iron

tool: D164:  wood

tool: D190:  silver

assistant: ```c
char *imm_bit_name(int imm_flags) {
  static char buf[512];
  buf[0] = '\0';
  if (imm_flags & (1))
    strcat(buf, " summon");
  if (imm_flags & (2))
    strcat(buf, " charm");
  if (imm_flags & (4))
    strcat(buf, " magic");
  if (imm_flags & (8))
    strcat(buf, " weapon");
  if (imm_flags & (16))
    strcat(buf, " blunt");
  if (imm_flags & (32))
    strcat(buf, " piercing");
  if (imm_flags & (64))
    strcat(buf, " slashing");
  if (imm_flags & (128))
    strcat(buf, " fire");
  if (imm_flags & (256))
    strcat(buf, " cold");
  if (imm_flags & (512))
    strcat(buf, " lightning");
  if (imm_flags & (1024))
    strcat(buf, " acid");
  if (imm_flags & (2048))
    strcat(buf, " poison");
  if (imm_flags & (4096))
    strcat(buf, " negative");
  if (imm_flags & (8192))
    strcat(buf, " holy");
  if (imm_flags & (16384))
    strcat(buf, " energy");
  if (imm_flags & (32768))
    strcat(buf, " mental");
  if (imm_flags & (65536))
    strcat(buf, " disease");
  if (imm_flags & (131072))
    strcat(buf, " drowning");
  if (imm_flags & (262144))
    strcat(buf, " light");
  if (imm_flags & (33554432))
    strcat(buf, " iron");
  if (imm_flags & (8388608))
    strcat(buf, " wood");
  if (imm_flags & (16777216))
    strcat(buf, " silver");
  return (buf[0] != '\0') ? buf + 1 : "none";
}
```