user: 下面的汇编指令对应的C源代码是什么:

```asm
<foo>:
  endbr64
  push   %r12
  push   %rbp
  sub    $0x308,%rsp
  movaps D112(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0x2f8(%rsp)
  xor    %eax,%eax
  lea    0x30(%rsp),%rbp
  movl   $0x0,0xc(%rsp)
  movaps %xmm0,0x70(%rsp)
  movaps D168(%rip),%xmm0
  movaps %xmm0,0x80(%rsp)
  movaps D272(%rip),%xmm0
  movaps %xmm0,0x90(%rsp)
  movaps D10(%rip),%xmm0
  movaps %xmm0,0xa0(%rsp)
  test   %edi,%edi
  jle    L14
  movslq %edi,%rdi
  lea    0x70(%rsp),%rsi
  lea    0x0(,%rdi,4),%rdx
  mov    %rbp,%rdi
  call   <memcpy@plt>
L14:
  mov    %rbp,%rdi
  lea    0xb0(%rsp),%r12
  call   <fbar@plt>
  movdqa D211(%rip),%xmm0
  mov    %rbp,%rdi
  movaps %xmm0,0xb0(%rsp)
  movdqa D297(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  movdqa D129(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movdqa D236(%rip),%xmm0
  movaps %xmm0,0xe0(%rsp)
  call   <fbar@plt>
  movaps D103(%rip),%xmm0
  mov    %rbp,%rdi
  movaps %xmm0,0x30(%rsp)
  movaps D55(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  call   <fbar@plt>
  movdqa D251(%rip),%xmm0
  mov    %r12,%rdi
  movaps %xmm0,0xb0(%rsp)
  movdqa D21(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  movdqa D184(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movdqa D125(%rip),%xmm0
  movaps %xmm0,0xe0(%rsp)
  call   <ibar@plt>
  movdqa D192(%rip),%xmm0
  mov    %r12,%rdi
  lea    0xc(%rsp),%r12
  movaps %xmm0,0xb0(%rsp)
  movdqa D149(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  movdqa D217(%rip),%xmm0
  movaps %xmm0,0x10(%rsp)
  movdqa D134(%rip),%xmm0
  movaps %xmm0,0xd0(%rsp)
  movdqa D45(%rip),%xmm0
  movaps %xmm0,0xe0(%rsp)
  movdqa D268(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  call   <ibar@plt>
  lea    0x10(%rsp),%rdi
  call   <sbar@plt>
  movaps D265(%rip),%xmm0
  mov    %rbp,%rdi
  movl   $0x42700000,0x70(%rsp)
  movaps %xmm0,0x30(%rsp)
  movaps D98(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movaps D258(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movaps D163(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  call   <fbar@plt>
  movaps D193(%rip),%xmm0
  mov    %rbp,%rdi
  mov    D311(%rip),%rax
  movl   $0x0,0x30(%rsp)
  movups %xmm0,0x34(%rsp)
  movaps D215(%rip),%xmm0
  mov    %rax,0x64(%rsp)
  movups %xmm0,0x44(%rsp)
  movaps D232(%rip),%xmm0
  movl   $0x42340000,0x6c(%rsp)
  movups %xmm0,0x54(%rsp)
  call   <fbar@plt>
  pxor   %xmm3,%xmm3
  pxor   %xmm1,%xmm1
  mov    %r12,%rdi
  pxor   %xmm2,%xmm2
  movdqa %xmm3,%xmm4
  movdqa %xmm1,%xmm0
  pcmpgtb %xmm1,%xmm4
  pcmpgtb %xmm2,%xmm3
  movdqa %xmm2,%xmm5
  punpckhbw %xmm4,%xmm1
  punpckhbw %xmm3,%xmm2
  punpcklbw %xmm3,%xmm5
  psubw  %xmm2,%xmm1
  punpcklbw %xmm4,%xmm0
  pxor   %xmm2,%xmm2
  psubw  %xmm5,%xmm0
  movdqa %xmm2,%xmm3
  pcmpgtw %xmm0,%xmm3
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm0,%xmm4
  punpcklwd %xmm3,%xmm4
  punpckhwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  paddd  %xmm4,%xmm0
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm1
  paddd  %xmm3,%xmm0
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,0xc(%rsp)
  call   <ibar@plt>
  xor    %edx,%edx
  mov    %r12,%rdi
  movsbl 0x1f0(%rsp,%rdx,1),%ecx
  movsbl 0xf0(%rsp,%rdx,1),%eax
  movsbl 0x200(%rsp,%rdx,1),%esi
  sub    %ecx,%eax
  movsbl 0x100(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x210(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x110(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x220(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x120(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x230(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x130(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x240(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x140(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x250(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x150(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x260(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x160(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x270(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x170(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x280(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x180(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x290(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x190(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x2a0(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x1a0(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x2b0(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x1b0(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x2c0(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x1c0(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x2d0(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x1d0(%rsp,%rdx,1),%ecx
  sub    %esi,%ecx
  movsbl 0x2e0(%rsp,%rdx,1),%esi
  add    %ecx,%eax
  movsbl 0x1e0(%rsp,%rdx,1),%ecx
  mov    %ecx,%edx
  sub    %esi,%edx
  add    %edx,%eax
  mov    %eax,0xc(%rsp)
  call   <ibar@plt>
  movaps D166(%rip),%xmm0
  mov    %rbp,%rdi
  movaps %xmm0,0x30(%rsp)
  movaps D295(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movaps D89(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movaps D202(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  call   <fbar@plt>
  mov    0x2f8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x308,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D112
data_type: byte[16]
name: parse_data
arguments: label: D168
data_type: byte[16]
name: parse_data
arguments: label: D272
data_type: byte[16]
name: parse_data
arguments: label: D10
data_type: byte[16]
name: parse_data
arguments: label: D211
data_type: byte[16]
name: parse_data
arguments: label: D297
data_type: byte[16]
name: parse_data
arguments: label: D129
data_type: byte[16]
name: parse_data
arguments: label: D236
data_type: byte[16]
name: parse_data
arguments: label: D103
data_type: byte[16]
name: parse_data
arguments: label: D55
data_type: byte[16]
name: parse_data
arguments: label: D251
data_type: byte[16]
name: parse_data
arguments: label: D21
data_type: byte[16]
name: parse_data
arguments: label: D184
data_type: byte[16]
name: parse_data
arguments: label: D125
data_type: byte[16]
name: parse_data
arguments: label: D192
data_type: byte[16]
name: parse_data
arguments: label: D149
data_type: byte[16]
name: parse_data
arguments: label: D217
data_type: byte[16]
name: parse_data
arguments: label: D134
data_type: byte[16]
name: parse_data
arguments: label: D45
data_type: byte[16]
name: parse_data
arguments: label: D268
data_type: byte[16]
name: parse_data
arguments: label: D265
data_type: byte[16]
name: parse_data
arguments: label: D98
data_type: byte[16]
name: parse_data
arguments: label: D258
data_type: byte[16]
name: parse_data
arguments: label: D163
data_type: byte[16]
name: parse_data
arguments: label: D193
data_type: byte[16]
name: parse_data
arguments: label: D311
data_type: byte[8]
name: parse_data
arguments: label: D215
data_type: byte[16]
name: parse_data
arguments: label: D232
data_type: byte[16]
name: parse_data
arguments: label: D166
data_type: byte[16]
name: parse_data
arguments: label: D295
data_type: byte[16]
name: parse_data
arguments: label: D89
data_type: byte[16]
name: parse_data
arguments: label: D202
data_type: byte[16]

tool: {"D112": [0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0xc0,0x40,0x00,0x00,0x10,0x41]}

tool: {"D168": [0x00,0x00,0x40,0x41,0x00,0x00,0x70,0x41,0x00,0x00,0x90,0x41,0x00,0x00,0xa8,0x41]}

tool: {"D272": [0x00,0x00,0xc0,0x41,0x00,0x00,0xd8,0x41,0x00,0x00,0xf0,0x41,0x00,0x00,0x04,0x42]}

tool: {"D10": [0x00,0x00,0x10,0x42,0x00,0x00,0x1c,0x42,0x00,0x00,0x28,0x42,0x00,0x00,0x34,0x42]}

tool: {"D211": [0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00]}

tool: {"D297": [0x0c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00]}

tool: {"D129": [0x18,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x21,0x00,0x00,0x00]}

tool: {"D236": [0x24,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2d,0x00,0x00,0x00]}

tool: {"D103": [0x00,0x00,0x40,0x40,0x00,0x00,0x70,0x41,0x00,0x00,0xd8,0x41,0x00,0x00,0x1c,0x42]}

tool: {"D55": [0x00,0x00,0x4c,0x42,0x00,0x00,0x7c,0x42,0x00,0x00,0x96,0x42,0x00,0x00,0xae,0x42]}

tool: {"D251": [0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x51,0x00,0x00,0x00]}

tool: {"D21": [0x90,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xb9,0x01,0x00,0x00]}

tool: {"D184": [0x40,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x84,0x03,0x00,0x00,0x41,0x04,0x00,0x00]}

tool: {"D125": [0x10,0x05,0x00,0x00,0xf1,0x05,0x00,0x00,0xe4,0x06,0x00,0x00,0xe9,0x07,0x00,0x00]}

tool: {"D192": [0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x00,0x00,0x00]}

tool: {"D149": [0x18,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x2a,0x00,0x00,0x00]}

tool: {"D217": [0x00,0x00,0x06,0x00,0x0c,0x00,0x12,0x00,0x18,0x00,0x1e,0x00,0x24,0x00,0x2a,0x00]}

tool: {"D134": [0x30,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x42,0x00,0x00,0x00]}

tool: {"D45": [0x48,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x5a,0x00,0x00,0x00]}

tool: {"D268": [0x30,0x00,0x36,0x00,0x3c,0x00,0x42,0x00,0x48,0x00,0x4e,0x00,0x54,0x00,0x5a,0x00]}

tool: {"D265": [0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x40,0x41]}

tool: {"D98": [0x00,0x00,0x80,0x41,0x00,0x00,0xa0,0x41,0x00,0x00,0xc0,0x41,0x00,0x00,0xe0,0x41]}

tool: {"D258": [0x00,0x00,0x00,0x42,0x00,0x00,0x10,0x42,0x00,0x00,0x20,0x42,0x00,0x00,0x30,0x42]}

tool: {"D163": [0x00,0x00,0x40,0x42,0x00,0x00,0x50,0x42,0x00,0x00,0x60,0x42,0x00,0x00,0x70,0x42]}

tool: {"D193": [0x00,0x00,0x40,0x40,0x00,0x00,0xc0,0x40,0x00,0x00,0x10,0x41,0x00,0x00,0x40,0x41]}

tool: {"D311": [0x00,0x00,0x1c,0x42,0x00,0x00,0x28,0x42]}

tool: {"D215": [0x00,0x00,0x70,0x41,0x00,0x00,0x90,0x41,0x00,0x00,0xa8,0x41,0x00,0x00,0xc0,0x41]}

tool: {"D232": [0x00,0x00,0xd8,0x41,0x00,0x00,0xf0,0x41,0x00,0x00,0x04,0x42,0x00,0x00,0x10,0x42]}

tool: {"D166": [0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40]}

tool: {"D295": [0x00,0x00,0x80,0x40,0x00,0x00,0xa0,0x40,0x00,0x00,0xc0,0x40,0x00,0x00,0xe0,0x40]}

tool: {"D89": [0x00,0x00,0x00,0x41,0x00,0x00,0x10,0x41,0x00,0x00,0x20,0x41,0x00,0x00,0x30,0x41]}

tool: {"D202": [0x00,0x00,0x40,0x41,0x00,0x00,0x50,0x41,0x00,0x00,0x60,0x41,0x00,0x00,0x70,0x41]}

assistant: ```c
int foo(int n) {
  int i, j;
  float a[16];
  float e[16];
  float b[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  float c[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
  float d[16] = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30};
  short sc[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  short sb[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  short sa[16];
  int ic[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  int ib[16] = {0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45};
  int ia[16];
  int diff = 0;
  char cb[16];
  char cc[16];
  char image[16][16];
  char block[16][16];
  for (i = 0; i < n; i++) {
    a[i] = b[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    ia[i] = (int)sb[i];
  }
  fbar(a);
  for (i = 0; i < 16 / 2; i++) {
    a[i] = b[2 * i + 1] * c[2 * i + 1] - b[2 * i] * c[2 * i];
    d[i] = b[2 * i] * c[2 * i + 1] + b[2 * i + 1] * c[2 * i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    ia[i] = ib[i] * ic[i];
  }
  ibar(ia);
  for (i = 0; i < 16; i++) {
    ia[i] = ib[i] + ic[i];
    sa[i] = sb[i] + sc[i];
  }
  ibar(ia);
  sbar(sa);
  for (i = 0; i < 16; i++) {
    a[i] = b[i] + c[i];
    a[i + 1] = b[i] + c[i];
  }
  fbar(a);
  for (i = 0; i < 16; i++) {
    a[i] = (b[i] > 0 ? b[i] : 0);
  }
  fbar(a);
  diff = 0;
  for (i = 0; i < 16; i++) {
    diff += (cb[i] - cc[i]);
  }
  ibar(&diff);
  diff = 0;
  for (i = 0; i < 16; i++) {
    for (i = 0; i < 16; i++) {
      diff += (image[i][j] - block[i][j]);
    }
  }
  ibar(&diff);
  for (i = 0; i < 16; i++) {
    a[i] = i;
  }
  fbar(a);
  for (i = 16; i > 0; i--) {
    a[16 - i] = b[i - 1];
  }
  for (i = 0; i < 16; i++) {
    if (a[i] != b[16 - 1 - i])
      abort();
  }
  return 0;
}
```