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

```asm
<i810_debug_965_fence_start>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %edx,-0x30(%rbp)
  mov    %ecx,-0x34(%rbp)
  mov    %r8d,-0x38(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L811
  lea    D5(%rip),%rax
  jmp    L794
L811:
  lea    D18(%rip),%rax
L794:
  mov    %rax,-0x8(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L945
  mov    $0x59,%eax
  jmp    L782
L945:
  mov    $0x58,%eax
L782:
  mov    %al,-0x11(%rbp)
  mov    -0x34(%rbp),%eax
  sar    $0x2,%eax
  and    $0x3ff,%eax
  add    $0x1,%eax
  shl    $0x7,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0xfffff000,%eax
  mov    %eax,-0xc(%rbp)
  cmpl   $0x29a2,-0x38(%rbp)
  je     L277
  cmpl   $0x2992,-0x38(%rbp)
  je     L277
  cmpl   $0x2982,-0x38(%rbp)
  je     L277
  cmpl   $0x2a02,-0x38(%rbp)
  je     L277
  cmpl   $0x2a12,-0x38(%rbp)
  je     L277
  cmpl   $0x2972,-0x38(%rbp)
  je     L277
  cmpl   $0x2e02,-0x38(%rbp)
  je     L277
  cmpl   $0x2e12,-0x38(%rbp)
  je     L277
  cmpl   $0x2e22,-0x38(%rbp)
  je     L277
  cmpl   $0x2e32,-0x38(%rbp)
  je     L277
  cmpl   $0x2a42,-0x38(%rbp)
  je     L277
  cmpl   $0x42,-0x38(%rbp)
  je     L277
  cmpl   $0x46,-0x38(%rbp)
  je     L277
  cmpl   $0x102,-0x38(%rbp)
  je     L277
  cmpl   $0x112,-0x38(%rbp)
  je     L277
  cmpl   $0x122,-0x38(%rbp)
  je     L277
  cmpl   $0x106,-0x38(%rbp)
  je     L277
  cmpl   $0x116,-0x38(%rbp)
  je     L277
  cmpl   $0x126,-0x38(%rbp)
  je     L277
  cmpl   $0x10a,-0x38(%rbp)
  je     L277
  cmpl   $0x152,-0x38(%rbp)
  je     L277
  cmpl   $0x162,-0x38(%rbp)
  je     L277
  cmpl   $0x156,-0x38(%rbp)
  je     L277
  cmpl   $0x166,-0x38(%rbp)
  je     L277
  cmpl   $0x15a,-0x38(%rbp)
  je     L277
  cmpl   $0x16a,-0x38(%rbp)
  je     L277
  cmpl   $0x402,-0x38(%rbp)
  je     L277
  cmpl   $0x406,-0x38(%rbp)
  je     L277
  cmpl   $0x40a,-0x38(%rbp)
  je     L277
  cmpl   $0x40b,-0x38(%rbp)
  je     L277
  cmpl   $0x40e,-0x38(%rbp)
  je     L277
  cmpl   $0xc02,-0x38(%rbp)
  je     L277
  cmpl   $0xc06,-0x38(%rbp)
  je     L277
  cmpl   $0xc0a,-0x38(%rbp)
  je     L277
  cmpl   $0xc0b,-0x38(%rbp)
  je     L277
  cmpl   $0xc0e,-0x38(%rbp)
  je     L277
  cmpl   $0xa02,-0x38(%rbp)
  je     L277
  cmpl   $0xa06,-0x38(%rbp)
  je     L277
  cmpl   $0xa0a,-0x38(%rbp)
  je     L277
  cmpl   $0xa0b,-0x38(%rbp)
  je     L277
  cmpl   $0xa0e,-0x38(%rbp)
  je     L277
  cmpl   $0xd02,-0x38(%rbp)
  je     L277
  cmpl   $0xd06,-0x38(%rbp)
  je     L277
  cmpl   $0xd0a,-0x38(%rbp)
  je     L277
  cmpl   $0xd0b,-0x38(%rbp)
  je     L277
  cmpl   $0xd0e,-0x38(%rbp)
  je     L277
  cmpl   $0x412,-0x38(%rbp)
  je     L277
  cmpl   $0x416,-0x38(%rbp)
  je     L277
  cmpl   $0x41a,-0x38(%rbp)
  je     L277
  cmpl   $0x41b,-0x38(%rbp)
  je     L277
  cmpl   $0x41e,-0x38(%rbp)
  je     L277
  cmpl   $0xc12,-0x38(%rbp)
  je     L277
  cmpl   $0xc16,-0x38(%rbp)
  je     L277
  cmpl   $0xc1a,-0x38(%rbp)
  je     L277
  cmpl   $0xc1b,-0x38(%rbp)
  je     L277
  cmpl   $0xc1e,-0x38(%rbp)
  je     L277
  cmpl   $0xa12,-0x38(%rbp)
  je     L277
  cmpl   $0xa16,-0x38(%rbp)
  je     L277
  cmpl   $0xa1a,-0x38(%rbp)
  je     L277
  cmpl   $0xa1b,-0x38(%rbp)
  je     L277
  cmpl   $0xa1e,-0x38(%rbp)
  je     L277
  cmpl   $0xd12,-0x38(%rbp)
  je     L277
  cmpl   $0xd16,-0x38(%rbp)
  je     L277
  cmpl   $0xd1a,-0x38(%rbp)
  je     L277
  cmpl   $0xd1b,-0x38(%rbp)
  je     L277
  cmpl   $0xd1e,-0x38(%rbp)
  je     L277
  cmpl   $0x422,-0x38(%rbp)
  je     L277
  cmpl   $0x426,-0x38(%rbp)
  je     L277
  cmpl   $0x42a,-0x38(%rbp)
  je     L277
  cmpl   $0x42b,-0x38(%rbp)
  je     L277
  cmpl   $0x42e,-0x38(%rbp)
  je     L277
  cmpl   $0xc22,-0x38(%rbp)
  je     L277
  cmpl   $0xc26,-0x38(%rbp)
  je     L277
  cmpl   $0xc2a,-0x38(%rbp)
  je     L277
  cmpl   $0xc2b,-0x38(%rbp)
  je     L277
  cmpl   $0xc2e,-0x38(%rbp)
  je     L277
  cmpl   $0xa22,-0x38(%rbp)
  je     L277
  cmpl   $0xa26,-0x38(%rbp)
  je     L277
  cmpl   $0xa2a,-0x38(%rbp)
  je     L277
  cmpl   $0xa2b,-0x38(%rbp)
  je     L277
  cmpl   $0xa2e,-0x38(%rbp)
  je     L277
  cmpl   $0xd22,-0x38(%rbp)
  je     L277
  cmpl   $0xd26,-0x38(%rbp)
  je     L277
  cmpl   $0xd2a,-0x38(%rbp)
  je     L277
  cmpl   $0xd2b,-0x38(%rbp)
  je     L277
  cmpl   $0xd2e,-0x38(%rbp)
  je     L277
  cmpl   $0xf30,-0x38(%rbp)
  je     L277
  cmpl   $0xf31,-0x38(%rbp)
  je     L277
  cmpl   $0xf32,-0x38(%rbp)
  je     L277
  cmpl   $0xf33,-0x38(%rbp)
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xff00,%eax
  cmp    $0x1600,%eax
  jne    L769
  mov    -0x38(%rbp),%eax
  sar    $0x4,%eax
  and    $0xc,%eax
  test   %eax,%eax
  jne    L769
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0x2,%eax
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0x6,%eax
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0xb,%eax
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0xa,%eax
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0xd,%eax
  je     L277
  mov    -0x38(%rbp),%eax
  and    $0xf,%eax
  cmp    $0xe,%eax
  je     L277
L769:
  cmpl   $0x22b0,-0x38(%rbp)
  je     L277
  cmpl   $0x22b1,-0x38(%rbp)
  je     L277
  cmpl   $0x22b2,-0x38(%rbp)
  je     L277
  cmpl   $0x22b3,-0x38(%rbp)
  je     L277
  cmpl   $0x5913,-0x38(%rbp)
  je     L277
  cmpl   $0x5915,-0x38(%rbp)
  je     L277
  cmpl   $0x5917,-0x38(%rbp)
  je     L277
  cmpl   $0x5906,-0x38(%rbp)
  je     L277
  cmpl   $0x590e,-0x38(%rbp)
  je     L277
  cmpl   $0x5902,-0x38(%rbp)
  je     L277
  cmpl   $0x590b,-0x38(%rbp)
  je     L277
  cmpl   $0x590a,-0x38(%rbp)
  je     L277
  cmpl   $0x5916,-0x38(%rbp)
  je     L277
  cmpl   $0x5921,-0x38(%rbp)
  je     L277
  cmpl   $0x591e,-0x38(%rbp)
  je     L277
  cmpl   $0x5912,-0x38(%rbp)
  je     L277
  cmpl   $0x591b,-0x38(%rbp)
  je     L277
  cmpl   $0x591a,-0x38(%rbp)
  je     L277
  cmpl   $0x591d,-0x38(%rbp)
  je     L277
  cmpl   $0x5926,-0x38(%rbp)
  je     L277
  cmpl   $0x592b,-0x38(%rbp)
  je     L277
  cmpl   $0x592a,-0x38(%rbp)
  je     L277
  cmpl   $0x1906,-0x38(%rbp)
  je     L277
  cmpl   $0x190e,-0x38(%rbp)
  je     L277
  cmpl   $0x1902,-0x38(%rbp)
  je     L277
  cmpl   $0x190b,-0x38(%rbp)
  je     L277
  cmpl   $0x190a,-0x38(%rbp)
  je     L277
  cmpl   $0x1916,-0x38(%rbp)
  je     L277
  cmpl   $0x1921,-0x38(%rbp)
  je     L277
  cmpl   $0x191e,-0x38(%rbp)
  je     L277
  cmpl   $0x1912,-0x38(%rbp)
  je     L277
  cmpl   $0x191b,-0x38(%rbp)
  je     L277
  cmpl   $0x191a,-0x38(%rbp)
  je     L277
  cmpl   $0x191d,-0x38(%rbp)
  je     L277
  cmpl   $0x1926,-0x38(%rbp)
  je     L277
  cmpl   $0x192b,-0x38(%rbp)
  je     L277
  cmpl   $0x192a,-0x38(%rbp)
  je     L277
  cmpl   $0xa84,-0x38(%rbp)
  je     L277
  cmpl   $0x1a84,-0x38(%rbp)
  je     L277
  cmpl   $0x5a84,-0x38(%rbp)
  jne    L420
L277:
  movsbl -0x11(%rbp),%edi
  mov    -0x10(%rbp),%r8d
  mov    -0x8(%rbp),%rdx
  mov    -0x2c(%rbp),%esi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0xc(%rbp),%ecx
  push   %rcx
  mov    %r8d,%r9d
  mov    %edi,%r8d
  mov    %rdx,%rcx
  lea    D1(%rip),%rdx
  mov    %rax,%rdi
  call   <snprintf@plt>
  add    $0x10,%rsp
  jmp    L886
L420:
  nop
L886:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D5
datatype: string
name: extract_symbolic_data
arguments: data_label: D18
datatype: string
name: extract_symbolic_data
arguments: data_label: D1
datatype: string

tool: D5:  enabled

tool: D18: disabled

tool: D1: %s, %c tile walk, %4d pitch, 0x%08x start

assistant: ```c
void i810_debug_965_fence_start(char *result, int len, int reg, uint32_t val, uint32_t devid) {
  const char *enable = (val & 0x00000001) ? " enabled" : "disabled";
  char format = (val & 0x00000002) ? 'Y' : 'X';
  int pitch = ((val & 0xffc) >> 2) * 128 + 128;
  unsigned int offset = val & 0xfffff000;
  if (!(((devid) == 0x29A2 || (devid) == 0x2992 || (devid) == 0x2982 || (devid) == 0x2A02 || (devid) == 0x2A12 || (devid) == 0x2972 || (((devid) == 0x2E02 || (devid) == 0x2E12 || (devid) == 0x2E22 || (devid) == 0x2E32) || ((devid) == 0x2A42))) || (((devid) == 0x0042) || ((devid) == 0x0046)) || ((devid) == 0x0102 || (devid) == 0x0112 || (devid) == 0x0122 || (devid) == 0x0106 || (devid) == 0x0116 || (devid) == 0x0126 || (devid) == 0x010A) || (((devid) == 0x0152 || (devid) == 0x0162 || (devid) == 0x0156 || (devid) == 0x0166 || (devid) == 0x015a || (devid) == 0x016a) || (((devid) == 0x0402 || (devid) == 0x0406 || (devid) == 0x040A || (devid) == 0x040B || (devid) == 0x040E || (devid) == 0x0C02 || (devid) == 0x0C06 || (devid) == 0x0C0A || (devid) == 0x0C0B || (devid) == 0x0C0E || (devid) == 0x0A02 || (devid) == 0x0A06 || (devid) == 0x0A0A || (devid) == 0x0A0B || (devid) == 0x0A0E || (devid) == 0x0D02 || (devid) == 0x0D06 || (devid) == 0x0D0A || (devid) == 0x0D0B || (devid) == 0x0D0E) || ((devid) == 0x0412 || (devid) == 0x0416 || (devid) == 0x041A || (devid) == 0x041B || (devid) == 0x041E || (devid) == 0x0C12 || (devid) == 0x0C16 || (devid) == 0x0C1A || (devid) == 0x0C1B || (devid) == 0x0C1E || (devid) == 0x0A12 || (devid) == 0x0A16 || (devid) == 0x0A1A || (devid) == 0x0A1B || (devid) == 0x0A1E || (devid) == 0x0D12 || (devid) == 0x0D16 || (devid) == 0x0D1A || (devid) == 0x0D1B || (devid) == 0x0D1E) || ((devid) == 0x0422 || (devid) == 0x0426 || (devid) == 0x042A || (devid) == 0x042B || (devid) == 0x042E || (devid) == 0x0C22 || (devid) == 0x0C26 || (devid) == 0x0C2A || (devid) == 0x0C2B || (devid) == 0x0C2E || (devid) == 0x0A22 || (devid) == 0x0A26 || (devid) == 0x0A2A || (devid) == 0x0A2B || (devid) == 0x0A2E || (devid) == 0x0D22 || (devid) == 0x0D26 || (devid) == 0x0D2A || (devid) == 0x0D2B || (devid) == 0x0D2E)) || ((devid) == 0x0f30 || (devid) == 0x0f31 || (devid) == 0x0f32 || (devid) == 0x0f33)) || (((((devid)&0xff00) != 0x1600) ? 0 : ((((devid)&0x00f0) >> 4) > 3) ? 0 : (((devid)&0x000f) == 0x2) ? 1 : (((devid)&0x000f) == 0x6) ? 1 : (((devid)&0x000f) == 0xb) ? 1 : (((devid)&0x000f) == 0xa) ? 1 : (((devid)&0x000f) == 0xd) ? 1 : (((devid)&0x000f) == 0xe) ? 1 : 0) || ((devid) == 0x22b0 || (devid) == 0x22b1 || (devid) == 0x22b2 || (devid) == 0x22b3)) || (((((devid) == 0x5913 || (devid) == 0x5915 || (devid) == 0x5917 || (devid) == 0x5906 || (devid) == 0x590E || (devid) == 0x5902 || (devid) == 0x590B || (devid) == 0x590A) || ((devid) == 0x5916 || (devid) == 0x5921 || (devid) == 0x591E || (devid) == 0x5912 || (devid) == 0x591B || (devid) == 0x591A || (devid) == 0x591D) || ((devid) == 0x5926 || (devid) == 0x592B || (devid) == 0x592A)) || ((devid) == 0x1906 || (devid) == 0x190E || (devid) == 0x1902 || (devid) == 0x190B || (devid) == 0x190A) || ((devid) == 0x1916 || (devid) == 0x1921 || (devid) == 0x191E || (devid) == 0x1912 || (devid) == 0x191B || (devid) == 0x191A || (devid) == 0x191D) || ((devid) == 0x1926 || (devid) == 0x192B || (devid) == 0x192A)) || ((devid) == 0x0A84 || (devid) == 0x1A84 || (devid) == 0x5A84))))
    return;
  snprintf(result, len, "%s, %c tile walk, %4d pitch, 0x%08x start", enable, format, pitch, offset);
}
```