user: Please show me the C implementation that matches the assembly code listed below:

```asm
<add>:
  endbr64
  mov    %rsi,%rcx
  mov    0x40(%rdi),%esi
  mov    %rdi,%rax
  xor    %edx,%edx
  add    0x40(%rcx),%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L11
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L11:
  mov    %esi,0x40(%rax)
  mov    0x3c(%rcx),%esi
  add    0x3c(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L136
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L136:
  mov    %esi,0x3c(%rax)
  mov    0x38(%rcx),%esi
  add    0x38(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L86
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L86:
  mov    %esi,0x38(%rax)
  mov    0x34(%rcx),%esi
  add    0x34(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L48
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L48:
  mov    %esi,0x34(%rax)
  mov    0x30(%rcx),%esi
  add    0x30(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L164
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L164:
  mov    %esi,0x30(%rax)
  mov    0x2c(%rcx),%esi
  add    0x2c(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L159
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L159:
  mov    %esi,0x2c(%rax)
  mov    0x28(%rcx),%esi
  add    0x28(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L162
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L162:
  mov    %esi,0x28(%rax)
  mov    0x24(%rcx),%esi
  add    0x24(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L57
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L57:
  mov    %esi,0x24(%rax)
  mov    0x20(%rcx),%esi
  add    0x20(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L130
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L130:
  mov    %esi,0x20(%rax)
  mov    0x1c(%rcx),%esi
  add    0x1c(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L138
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L138:
  mov    %esi,0x1c(%rax)
  mov    0x18(%rcx),%esi
  add    0x18(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L153
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L153:
  mov    %esi,0x18(%rax)
  mov    0x14(%rcx),%esi
  add    0x14(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L80
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L80:
  mov    %esi,0x14(%rax)
  mov    0x10(%rcx),%esi
  add    0x10(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L134
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L134:
  mov    %esi,0x10(%rax)
  mov    0xc(%rcx),%esi
  add    0xc(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L145
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L145:
  mov    %esi,0xc(%rax)
  mov    0x8(%rcx),%esi
  add    0x8(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L155
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L155:
  mov    %esi,0x8(%rax)
  mov    0x4(%rcx),%esi
  add    0x4(%rax),%esi
  add    %edx,%esi
  lea    -0x1(%rsi),%edi
  cmp    $0x2,%edi
  ja     L104
  lea    D126(%rip),%rdx
  lea    D255(%rip),%rsi
  mov    (%rdx,%rdi,4),%edx
  mov    (%rsi,%rdi,4),%esi
L104:
  mov    %esi,0x4(%rax)
  mov    (%rcx),%ecx
  add    (%rax),%ecx
  add    %ecx,%edx
  lea    -0x1(%rdx),%ecx
  cmp    $0x2,%ecx
  ja     L79
  lea    D255(%rip),%rdx
  mov    (%rdx,%rcx,4),%edx
L79:
  mov    %edx,(%rax)
  ret
```

tool_calls: name: read_data
arguments: label: D126
data_type: string
name: read_data
arguments: label: D255
data_type: string

tool: 

tool: D255: 

assistant: ```c
int add(int a[16], int b[16]) {
  int result[16];
  int c = 0;
  for (int i = 16; i >= 0; i--) {
    int r = a[i] + b[i] + c;
    switch (r) {
    case 1:
      c = 0;
      r = 1;
      break;
    case 2:
      c = 1;
      r = 0;
      break;
    case 3:
      c = 1;
      r = 1;
      break;
    }
    a[i] = r;
  }
  if (c == 1) {
  }
}
```