user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<jacobi>:
  endbr64
  movsd  D2(%rip),%xmm1
  push   %r14
  mov    %rdi,%r9
  mov    %r8,%r14
  push   %r13
  mov    %rsi,%r10
  mov    %r8,%r13
  mov    %rdx,%r11
  push   %r12
  xor    %r8d,%r8d
  mov    $0xffffffffffffffe0,%r12
  push   %rbp
  mov    %rcx,%rbp
  xor    %ecx,%ecx
  push   %rbx
  mov    $0x20,%ebx
  nopw   0x0(%rax,%rax,1)
L46:
  cmp    $0x1f,%ecx
  je     L117
L149:
  mov    %r13,%rax
  test   %ecx,%ecx
  je     L49
  mov    %r12,%rsi
  mov    %rbx,%rdi
  xor    %edx,%edx
  sub    %r8,%rsi
  sub    %r8,%rdi
  jmp    L39
  nopl   0x0(%rax)
L158:
  movss  -0x4(%rax),%xmm0
  movss  (%rax,%rsi,4),%xmm3
  cmp    $0x1f,%edx
  je     L137
L140:
  addss  %xmm2,%xmm0
  add    $0x1,%edx
  addss  %xmm3,%xmm0
  addss  0x4(%rax),%xmm0
  addss  (%rax,%rdi,4),%xmm0
  add    $0x4,%rax
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    $0x20,%edx
  je     L126
L39:
  movss  (%rax),%xmm2
  test   %edx,%edx
  jne    L158
  movss  (%r9),%xmm0
  movss  (%rax,%rsi,4),%xmm3
  jmp    L140
  nopw   0x0(%rax,%rax,1)
L137:
  addss  %xmm2,%xmm0
  mov    %rbx,%rdx
  sub    %r8,%rdx
  addss  %xmm3,%xmm0
  addss  (%r11),%xmm0
  addss  (%rax,%rdx,4),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
L126:
  add    $0x1,%ecx
  add    $0x4,%r11
  add    $0x20,%rbx
  add    $0x20,%r8
  sub    $0xffffffffffffff80,%r13
  add    $0x20,%r12
  cmp    $0x1f,%ecx
  jne    L149
L117:
  movslq %r8d,%rdi
  movslq %r12d,%rcx
  xor    %edx,%edx
  lea    (%r14,%rdi,4),%rax
  sub    %rdi,%rcx
  nopw   0x0(%rax,%rax,1)
L154:
  movss  (%rax),%xmm2
  test   %edx,%edx
  je     L102
  movss  -0x4(%rax),%xmm0
  movss  (%rax,%rcx,4),%xmm3
  cmp    $0x1f,%edx
  je     L62
L85:
  addss  %xmm2,%xmm0
  add    $0x1,%edx
  add    $0x4,%rax
  addss  %xmm3,%xmm0
  addss  (%rax),%xmm0
  addss  0x7c(%rbp),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    $0x20,%edx
  jne    L154
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  cs nopw 0x0(%rax,%rax,1)
L49:
  mov    %rbx,%rdx
  sub    %r8,%rdx
  jmp    L134
  nopl   0x0(%rax,%rax,1)
L81:
  movss  -0x4(%rax),%xmm0
  movss  (%r10),%xmm2
  cmp    $0x1f,%ecx
  je     L93
L170:
  addss  %xmm3,%xmm0
  add    $0x1,%ecx
  addss  %xmm2,%xmm0
  addss  0x4(%rax),%xmm0
  addss  (%rax,%rdx,4),%xmm0
  add    $0x4,%rax
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    $0x20,%ecx
  je     L35
L134:
  movss  (%rax),%xmm3
  test   %ecx,%ecx
  jne    L81
  movss  (%r9),%xmm0
  movss  (%r10),%xmm2
  jmp    L170
  nopw   0x0(%rax,%rax,1)
L93:
  addss  %xmm3,%xmm0
  mov    %rbx,%rdx
  sub    %r8,%rdx
  addss  %xmm2,%xmm0
  addss  (%r11),%xmm0
  addss  (%rax,%rdx,4),%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
L35:
  add    $0x4,%r11
  add    $0x20,%rbx
  add    $0x20,%r8
  sub    $0xffffffffffffff80,%r13
  add    $0x20,%r12
  mov    $0x1,%ecx
  jmp    L46
  xchg   %ax,%ax
L102:
  movss  (%r9),%xmm0
  movss  (%rax,%rcx,4),%xmm3
  jmp    L85
  nop
L62:
  addss  %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  addss  %xmm3,%xmm2
  addss  (%r11),%xmm2
  addss  0x7c(%rbp),%xmm2
  cvtss2sd %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: unpack_data
arguments: tag: D2
datatype: f64

tool: D2: 0.2

assistant: ```c
void jacobi(float *lefthalo, float *tophalo, float *righthalo, float *bottomhalo, float *A) {
  int i, j;
  float tmp;
  float left, top, right, bottom;
  for (i = 0; (i < 32); i++)
    for (j = 0; j < 32; j++) {
      tmp = A[i * 32 + j];
      left = (j == 0 ? lefthalo[j] : A[i * 32 + j - 1]);
      top = (i == 0 ? tophalo[i] : A[(i - 1) * 32 + j]);
      right = (j == 32 - 1 ? righthalo[i] : A[i * 32 + j + 1]);
      bottom = (i == 32 - 1 ? bottomhalo[i] : A[(i + 1) * 32 + j]);
      A[i * 32 + j] = 0.2 * (A[i * 32 + j] + left + top + right + bottom);
    }
}
```