user: 请从给定的汇编指令推导出C源代码：

```asm
<poly_sum>:
  endbr64
  cmp    %esi,%ecx
  mov    %esi,%r9d
  cmovge %ecx,%r9d
  test   %r9d,%r9d
  jle    L306
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  cmp    %esi,%ecx
  jl     L314
  mov    %ecx,%eax
  sub    %esi,%eax
  je     L28
  cmp    %eax,%r9d
  lea    0x8(%rdx),%r10
  cmovle %r9d,%eax
  mov    %eax,%r11d
  mov    %r8,%rax
  sub    %r10,%rax
  cmp    $0x10,%rax
  jbe    L312
  cmp    $0x4,%r11d
  jle    L312
  test   %r11d,%r11d
  mov    $0x1,%ebx
  movdqa D0(%rip),%xmm1
  movdqa D40(%rip),%xmm3
  cmovg  %r11d,%ebx
  movdqa D58(%rip),%xmm2
  xor    %eax,%eax
  mov    %ebx,%r10d
  shr    $0x2,%r10d
  shl    $0x5,%r10
  nopl   0x0(%rax,%rax,1)
L267:
  movupd 0x10(%rdx,%rax,1),%xmm4
  movupd (%rdx,%rax,1),%xmm5
  movdqa %xmm1,%xmm0
  paddd  %xmm3,%xmm1
  paddd  %xmm2,%xmm0
  movups %xmm5,(%r8,%rax,1)
  movups %xmm4,0x10(%r8,%rax,1)
  add    $0x20,%rax
  cmp    %rax,%r10
  jne    L267
  mov    %ebx,%r10d
  pshufd $0xff,%xmm0,%xmm0
  and    $0xfffffffc,%r10d
  and    $0x3,%ebx
  movd   %xmm0,%eax
  je     L144
  mov    %r10d,%eax
  movsd  (%rdx,%rax,8),%xmm0
  lea    0x0(,%rax,8),%rbx
  movsd  %xmm0,(%r8,%rax,8)
  lea    0x1(%r10),%eax
  cmp    %eax,%r11d
  jle    L144
  movsd  0x8(%rdx,%rbx,1),%xmm0
  lea    0x2(%r10),%eax
  movsd  %xmm0,0x8(%r8,%rbx,1)
  cmp    %eax,%r11d
  jle    L144
  movsd  0x10(%rdx,%rbx,1),%xmm0
  lea    0x3(%r10),%eax
  movsd  %xmm0,0x10(%r8,%rbx,1)
L144:
  cmp    %eax,%r9d
  jle    L10
L28:
  movslq %esi,%rbx
  movslq %ecx,%r15
  mov    %r9d,%r14d
  movslq %eax,%r10
  mov    %rbx,%r11
  sub    %eax,%r14d
  mov    %r15,-0x10(%rsp)
  sub    %r15,%r11
  lea    -0x1(%r14),%r13d
  mov    %rbx,-0x18(%rsp)
  lea    0x0(,%r10,8),%rbx
  lea    0x2(%r10,%r11,1),%r12
  lea    (%r8,%rbx,1),%r11
  shl    $0x3,%r12
  cmp    $0x1,%r13d
  seta   %r13b
  cmp    %r9d,%eax
  lea    -0x10(%rdi,%r12,1),%rbp
  setl   %r15b
  and    %r15d,%r13d
  lea    0x8(%rdx,%rbx,1),%r15
  cmp    %r15,%r11
  setne  %r15b
  test   %r15b,%r13b
  je     L266
  lea    0x10(%r8,%rbx,1),%r13
  cmp    %r13,%rbp
  setae  %r13b
  add    %rdi,%r12
  cmp    %r12,%r11
  setae  %r12b
  or     %r13b,%r12b
  je     L266
  cmp    %r9d,%eax
  mov    $0x1,%r12d
  cmovl  %r14d,%r12d
  add    %rdx,%rbx
  xor    %r9d,%r9d
  mov    %r12d,%r10d
  shr    %r10d
  shl    $0x4,%r10
  nop
L69:
  movupd (%rbx,%r9,1),%xmm0
  movups %xmm0,(%r11,%r9,1)
  movupd 0x0(%rbp,%r9,1),%xmm6
  addpd  %xmm6,%xmm0
  movups %xmm0,(%r11,%r9,1)
  add    $0x10,%r9
  cmp    %r10,%r9
  jne    L69
  mov    %r12d,%r9d
  and    $0xfffffffe,%r9d
  add    %r9d,%eax
  cmp    %r9d,%r12d
  je     L10
  movslq %eax,%r9
  sub    %ecx,%eax
  movsd  (%rdx,%r9,8),%xmm0
  add    %esi,%eax
  lea    (%r8,%r9,8),%r8
  cltq
  movsd  %xmm0,(%r8)
  addsd  (%rdi,%rax,8),%xmm0
  movsd  %xmm0,(%r8)
L10:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L314:
  mov    %esi,%r11d
  lea    0x8(%rdi),%r10
  mov    %r8,%rax
  sub    %ecx,%r11d
  cmp    %r9d,%r11d
  cmovg  %r9d,%r11d
  sub    %r10,%rax
  cmp    $0x10,%rax
  jbe    L177
  cmp    $0x4,%r11d
  jle    L177
  test   %r11d,%r11d
  mov    $0x1,%ebx
  movdqa D0(%rip),%xmm1
  movdqa D40(%rip),%xmm3
  cmovg  %r11d,%ebx
  movdqa D58(%rip),%xmm2
  xor    %eax,%eax
  mov    %ebx,%r10d
  shr    $0x2,%r10d
  shl    $0x5,%r10
  nopl   0x0(%rax)
L188:
  movupd 0x10(%rdi,%rax,1),%xmm4
  movupd (%rdi,%rax,1),%xmm7
  movdqa %xmm1,%xmm0
  paddd  %xmm3,%xmm1
  paddd  %xmm2,%xmm0
  movups %xmm7,(%r8,%rax,1)
  movups %xmm4,0x10(%r8,%rax,1)
  add    $0x20,%rax
  cmp    %r10,%rax
  jne    L188
  mov    %ebx,%r10d
  pshufd $0xff,%xmm0,%xmm0
  and    $0xfffffffc,%r10d
  and    $0x3,%ebx
  movd   %xmm0,%eax
  je     L323
  mov    %r10d,%eax
  movsd  (%rdi,%rax,8),%xmm0
  lea    0x0(,%rax,8),%rbx
  movsd  %xmm0,(%r8,%rax,8)
  lea    0x1(%r10),%eax
  cmp    %r11d,%eax
  jge    L323
  movsd  0x8(%rdi,%rbx,1),%xmm0
  lea    0x2(%r10),%eax
  movsd  %xmm0,0x8(%r8,%rbx,1)
  cmp    %r11d,%eax
  jge    L323
  movsd  0x10(%rdi,%rbx,1),%xmm0
  lea    0x3(%r10),%eax
  movsd  %xmm0,0x10(%r8,%rbx,1)
L323:
  cmp    %eax,%r9d
  jle    L10
  movslq %ecx,%rbx
  mov    %r9d,%r13d
  movslq %esi,%r15
  movslq %eax,%r10
  mov    %rbx,%r11
  sub    %eax,%r13d
  mov    %rbx,-0x10(%rsp)
  lea    0x0(,%r10,8),%rbx
  sub    %r15,%r11
  lea    -0x1(%r13),%r14d
  lea    0x2(%r10,%r11,1),%r12
  lea    (%r8,%rbx,1),%r11
  shl    $0x3,%r12
  cmp    $0x1,%r14d
  lea    0x8(%rdi,%rbx,1),%r14
  seta   -0x18(%rsp)
  cmp    %r14,%r11
  lea    -0x10(%rdx,%r12,1),%rbp
  setne  %r14b
  test   %r14b,-0x18(%rsp)
  je     L205
  lea    0x10(%r8,%rbx,1),%r14
  cmp    %r14,%rbp
  setae  %r14b
  add    %rdx,%r12
  cmp    %r12,%r11
  setae  %r12b
  or     %r14b,%r12b
  je     L205
  mov    %r13d,%r10d
  add    %rdi,%rbx
  xor    %r9d,%r9d
  shr    %r10d
  shl    $0x4,%r10
  nopw   0x0(%rax,%rax,1)
L13:
  movupd (%rbx,%r9,1),%xmm0
  movups %xmm0,(%r11,%r9,1)
  movupd 0x0(%rbp,%r9,1),%xmm5
  addpd  %xmm5,%xmm0
  movups %xmm0,(%r11,%r9,1)
  add    $0x10,%r9
  cmp    %r10,%r9
  jne    L13
  mov    %r13d,%r9d
  and    $0xfffffffe,%r9d
  add    %r9d,%eax
  cmp    %r9d,%r13d
  je     L10
  movslq %eax,%r9
  sub    %esi,%eax
  movsd  (%rdi,%r9,8),%xmm0
  add    %ecx,%eax
  lea    (%r8,%r9,8),%r8
  cltq
  movsd  %xmm0,(%r8)
  addsd  (%rdx,%rax,8),%xmm0
  movsd  %xmm0,(%r8)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L306:
  ret
L205:
  mov    -0x10(%rsp),%rax
  sub    %r15,%rax
  lea    (%rdx,%rax,8),%rax
  nopl   (%rax)
L227:
  movsd  (%rdi,%r10,8),%xmm0
  movsd  %xmm0,(%r8,%r10,8)
  addsd  (%rax,%r10,8),%xmm0
  movsd  %xmm0,(%r8,%r10,8)
  add    $0x1,%r10
  cmp    %r10d,%r9d
  jg     L227
  jmp    L10
L266:
  mov    -0x18(%rsp),%rax
  sub    -0x10(%rsp),%rax
  lea    (%rdi,%rax,8),%rax
  nopl   0x0(%rax)
L286:
  movsd  (%rdx,%r10,8),%xmm0
  movsd  %xmm0,(%r8,%r10,8)
  addsd  (%rax,%r10,8),%xmm0
  movsd  %xmm0,(%r8,%r10,8)
  add    $0x1,%r10
  cmp    %r10d,%r9d
  jg     L286
  jmp    L10
L312:
  xor    %r10d,%r10d
  nopl   0x0(%rax)
L179:
  movsd  (%rdx,%r10,8),%xmm0
  lea    0x1(%r10),%eax
  movsd  %xmm0,(%r8,%r10,8)
  add    $0x1,%r10
  cmp    %r10d,%r11d
  jg     L179
  jmp    L144
L177:
  xor    %r10d,%r10d
  nopl   0x0(%rax)
L253:
  movsd  (%rdi,%r10,8),%xmm0
  lea    0x1(%r10),%eax
  movsd  %xmm0,(%r8,%r10,8)
  add    $0x1,%r10
  cmp    %r10d,%r11d
  jg     L253
  jmp    L323
```

tool_calls: name: extract_symbolic_data
arguments: label: D0
data_type: byte[16]
name: extract_symbolic_data
arguments: label: D40
data_type: byte[16]
name: extract_symbolic_data
arguments: label: D58
data_type: byte[16]

tool: {"D0": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D40": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

tool: {"D58": [0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00]}

assistant: ```c
void poly_sum(double a[], int Na, double b[], int Nb, double ans[], int Nans) {
  int i;
  Nans = Na > Nb ? Na : Nb;
  for (i = 0; i < Nans; i++) {
    if (Na > Nb) {
      ans[i] = a[i];
      if (i > Na - Nb - 1) {
        ans[i] = ans[i] + b[i - Na + Nb];
      }
    } else {
      ans[i] = b[i];
      if (i > Nb - Na - 1) {
        ans[i] = ans[i] + a[i - Nb + Na];
      }
    }
  }
}
```