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

```asm
<vec_mat_vec_mult_2d>:
  endbr64
  test   %esi,%esi
  jle    L215
  movslq %esi,%rcx
  push   %rbp
  movq   D19(%rip),%xmm5
  mov    %rdx,%rbp
  push   %rbx
  lea    0x0(,%rcx,8),%rbx
  lea    -0x1(%rsi),%r9d
  mov    %rdx,%r8
  mov    %rbx,%rdi
  xor    %r11d,%r11d
  pxor   %xmm0,%xmm0
  xor    %r10d,%r10d
  movsd  D8(%rip),%xmm3
  neg    %rdi
  movapd %xmm5,%xmm6
  movapd %xmm5,%xmm4
  nopl   0x0(%rax,%rax,1)
L30:
  mov    %r8,%rdx
  xor    %eax,%eax
  test   %r10d,%r10d
  je     L233
  cmp    %r9d,%r10d
  jge    L182
  nopw   0x0(%rax,%rax,1)
L160:
  movsd  (%rdx),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm4,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rdi,1),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  movsd  (%rdx,%rcx,8),%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm0,%xmm2
  test   %eax,%eax
  je     L256
  movsd  -0x8(%rdx),%xmm0
  add    $0x1,%eax
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm0
  mulsd  (%rdx),%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %r9d,%eax
  jl     L160
  cmp    %esi,%eax
  jge    L203
  movslq %eax,%rdx
  add    %r11,%rdx
  lea    0x0(%rbp,%rdx,8),%rdx
  nopw   0x0(%rax,%rax,1)
L240:
  movsd  (%rdx),%xmm1
  add    $0x1,%eax
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm4,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rdi,1),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rcx,8),%xmm0
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm0
  mulsd  -0x10(%rdx),%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %eax,%esi
  jg     L240
L203:
  add    $0x1,%r10d
  add    %rbx,%r8
  add    %rcx,%r11
  cmp    %r10d,%esi
  jne    L30
L284:
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L256:
  mulsd  0x8(%rdx),%xmm1
  mov    $0x1,%eax
  add    $0x8,%rdx
  addsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  jmp    L160
  nopl   0x0(%rax,%rax,1)
L233:
  test   %r9d,%r9d
  je     L169
  nopl   0x0(%rax)
L214:
  movsd  (%rdx),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm5,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rcx,8),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  test   %eax,%eax
  je     L102
  movsd  -0x8(%rdx),%xmm2
  add    $0x1,%eax
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm2
  mulsd  (%rdx),%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %r9d,%eax
  jl     L214
L197:
  cmp    %eax,%esi
  jle    L203
  movslq %eax,%rdx
  add    %r11,%rdx
  lea    0x0(%rbp,%rdx,8),%rdx
  nopl   0x0(%rax)
L64:
  movsd  (%rdx),%xmm1
  add    $0x1,%eax
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm5,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rcx,8),%xmm0
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm0
  mulsd  -0x10(%rdx),%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %eax,%esi
  jg     L64
  add    $0x1,%r10d
  add    %rbx,%r8
  add    %rcx,%r11
  cmp    %r10d,%esi
  jne    L30
  jmp    L284
  nopl   0x0(%rax)
L102:
  mulsd  0x8(%rdx),%xmm1
  mov    $0x1,%eax
  add    $0x8,%rdx
  addsd  %xmm1,%xmm0
  cmp    $0x1,%r9d
  jne    L214
  jmp    L197
  nopl   0x0(%rax)
L182:
  test   %r9d,%r9d
  je     L9
  movapd %xmm5,%xmm7
  nopl   (%rax)
L271:
  movsd  (%rdx),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm6,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rdi,1),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  test   %eax,%eax
  je     L119
  movsd  -0x8(%rdx),%xmm2
  add    $0x1,%eax
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm2
  mulsd  (%rdx),%xmm1
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %r9d,%eax
  jl     L271
L130:
  cmp    %eax,%esi
  jle    L203
L86:
  mov    %r8,%rdx
  cltq
  sub    %rbx,%rdx
  cs nopw 0x0(%rax,%rax,1)
L109:
  movsd  (%r8,%rax,8),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  xorpd  %xmm7,%xmm1
  addsd  %xmm0,%xmm2
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  test   %eax,%eax
  je     L76
  mulsd  -0x8(%r8,%rax,8),%xmm1
  addsd  %xmm1,%xmm0
L76:
  add    $0x1,%rax
  cmp    %eax,%esi
  jg     L109
  add    $0x1,%r10d
  add    %rbx,%r8
  add    %rcx,%r11
  cmp    %r10d,%esi
  jne    L30
  jmp    L284
  cs nopw 0x0(%rax,%rax,1)
L119:
  mulsd  0x8(%rdx),%xmm1
  mov    $0x1,%eax
  add    $0x8,%rdx
  addsd  %xmm1,%xmm0
  cmp    $0x1,%r9d
  jne    L271
  jmp    L130
  nopl   0x0(%rax)
L9:
  xor    %eax,%eax
  movapd %xmm5,%xmm7
  jmp    L86
  nopl   0x0(%rax,%rax,1)
L169:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L114:
  movsd  (%r8,%rax,8),%xmm1
  movapd %xmm1,%xmm2
  mulsd  %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  addsd  %xmm2,%xmm0
  test   %eax,%eax
  je     L50
  mulsd  -0x8(%r8,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
L50:
  add    $0x1,%rax
  cmp    %eax,%esi
  jg     L114
  add    $0x1,%r10d
  add    %rbx,%r8
  add    %rcx,%r11
  cmp    %r10d,%esi
  jne    L30
  jmp    L284
L215:
  pxor   %xmm0,%xmm0
  ret
```

tool_calls: name: disassemble_data
arguments: label: D19
type_guessed: f32[2]
name: disassemble_data
arguments: label: D8
type_guessed: f64

tool: {"D19": [0.0,-0.0]}

tool: D8: 4

assistant: ```c
double vec_mat_vec_mult_2d(int unused, int lin_size, double *x) {
  double sum = 0.0;
  for (int grid_row = 0; grid_row < lin_size; grid_row++) {
    for (int grid_col = 0; grid_col < lin_size; grid_col++) {
      int index = grid_row * lin_size + grid_col;
      sum += x[index] * (4.0) * x[index];
      if (0 < grid_row)
        sum += x[index] * (-1.0) * x[index - lin_size];
      if (grid_row < lin_size - 1)
        sum += x[index] * (-1.0) * x[index + lin_size];
      if (0 < grid_col)
        sum += x[index] * (-1.0) * x[index - 1];
      if (grid_col < lin_size - 1)
        sum += x[index] * (-1.0) * x[index + 1];
    }
  }
  return sum;
}
```