user: 请将以下的汇编代码转换成C语言代码：

```asm
<jacobi>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edx,0x4(%rsp)
  mov    %ecx,0x1c(%rsp)
  test   %ecx,%ecx
  jle    L27
  mov    %edx,%ecx
  mov    %edx,%eax
  movl   $0x0,0x18(%rsp)
  mov    %rdi,%r14
  and    $0xfffffffe,%ecx
  shr    %eax
  mov    %rsi,0x8(%rsp)
  movsd  D9(%rip),%xmm2
  mov    %ecx,0x10(%rsp)
  mov    %edx,%ecx
  lea    -0x1(%rax),%ebp
  movapd D9(%rip),%xmm1
  or     $0x1,%ecx
  shl    $0x4,%rbp
  movslq %ecx,%rbx
  add    $0x18,%rbp
  shl    $0x3,%rbx
  lea    -0x8(%rbx),%r13
  lea    0x8(%rbx),%r12
  xchg   %ax,%ax
L177:
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  jle    L169
  lea    -0x1(%rax),%r15d
  movsd  D9(%rip),%xmm3
  mov    $0x1,%r8d
  add    $0x2,%r15
  nopw   0x0(%rax,%rax,1)
L173:
  mov    0x8(%rsp),%rdi
  mov    0x8(%r14,%r8,8),%rsi
  mov    -0x8(%r14,%r8,8),%rcx
  cmpl   $0x1,0x4(%rsp)
  mov    (%rdi,%r8,8),%rdx
  lea    0x10(%rsi),%r9
  setne  %dil
  mov    (%r14,%r8,8),%rax
  lea    0x10(%rcx),%r11
  lea    0x8(%rdx),%r10
  cmp    %r9,%r10
  setne  %r9b
  cmp    %r11,%r10
  setne  %r10b
  and    %r10d,%r9d
  test   %dil,%r9b
  je     L84
  mov    %rdx,%r10
  mov    $0x8,%r9d
  sub    %rax,%r10
  cmp    $0x10,%r10
  jbe    L84
  nopl   0x0(%rax)
L17:
  movupd (%rsi,%r9,1),%xmm0
  movupd (%rcx,%r9,1),%xmm4
  movupd -0x8(%rax,%r9,1),%xmm5
  movupd 0x8(%rax,%r9,1),%xmm6
  addpd  %xmm4,%xmm0
  addpd  %xmm5,%xmm0
  addpd  %xmm6,%xmm0
  mulpd  %xmm1,%xmm0
  movups %xmm0,(%rdx,%r9,1)
  add    $0x10,%r9
  cmp    %rbp,%r9
  jne    L17
  mov    0x4(%rsp),%r10d
  cmp    %r10d,0x10(%rsp)
  je     L105
  movsd  (%rsi,%rbx,1),%xmm0
  addsd  (%rcx,%rbx,1),%xmm0
  addsd  (%rax,%r13,1),%xmm0
  addsd  (%rax,%r12,1),%xmm0
  mulsd  %xmm3,%xmm0
  movsd  %xmm0,(%rdx,%rbx,1)
L105:
  add    $0x1,%r8
  cmp    %r15,%r8
  jne    L173
  xor    %eax,%eax
  mov    %dil,0x17(%rsp)
  call   <dissBarrier@plt>
  mov    0x8(%rsp),%rdi
  movsd  D9(%rip),%xmm3
  mov    $0x1,%r8d
  movapd D9(%rip),%xmm1
  nop
L16:
  mov    0x8(%rdi,%r8,8),%rsi
  mov    (%r14,%r8,8),%rdx
  mov    -0x8(%rdi,%r8,8),%rcx
  mov    (%rdi,%r8,8),%rax
  lea    0x8(%rdx),%r10
  lea    0x10(%rsi),%r9
  cmp    %r9,%r10
  lea    0x10(%rcx),%r11
  setne  %r9b
  cmp    %r11,%r10
  setne  %r10b
  and    %r10d,%r9d
  test   %r9b,0x17(%rsp)
  je     L144
  mov    %rdx,%r10
  mov    $0x8,%r9d
  sub    %rax,%r10
  cmp    $0x10,%r10
  jbe    L144
L108:
  movupd (%rsi,%r9,1),%xmm0
  movupd (%rcx,%r9,1),%xmm7
  movupd -0x8(%rax,%r9,1),%xmm4
  movupd 0x8(%rax,%r9,1),%xmm5
  addpd  %xmm7,%xmm0
  addpd  %xmm4,%xmm0
  addpd  %xmm5,%xmm0
  mulpd  %xmm1,%xmm0
  movups %xmm0,(%rdx,%r9,1)
  add    $0x10,%r9
  cmp    %r9,%rbp
  jne    L108
  mov    0x4(%rsp),%r10d
  cmp    %r10d,0x10(%rsp)
  je     L176
  movsd  (%rsi,%rbx,1),%xmm0
  addsd  (%rcx,%rbx,1),%xmm0
  addsd  (%rax,%r13,1),%xmm0
  addsd  (%rax,%r12,1),%xmm0
  mulsd  %xmm3,%xmm0
  movsd  %xmm0,(%rdx,%rbx,1)
L176:
  add    $0x1,%r8
  cmp    %r15,%r8
  jne    L16
L114:
  xor    %eax,%eax
  call   <dissBarrier@plt>
  addl   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%eax
  cmp    %eax,0x1c(%rsp)
  mov    D9(%rip),%rax
  movapd D9(%rip),%xmm1
  movq   %rax,%xmm2
  jne    L177
L27:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L144:
  mov    $0x1,%r9d
  cs nopw 0x0(%rax,%rax,1)
L3:
  movsd  (%rsi,%r9,8),%xmm0
  addsd  (%rcx,%r9,8),%xmm0
  addsd  -0x8(%rax,%r9,8),%xmm0
  addsd  0x8(%rax,%r9,8),%xmm0
  mulsd  %xmm3,%xmm0
  movsd  %xmm0,(%rdx,%r9,8)
  add    $0x1,%r9
  cmp    %r9,%r15
  jne    L3
  jmp    L176
  nopw   0x0(%rax,%rax,1)
L84:
  mov    $0x1,%r9d
  xchg   %ax,%ax
L117:
  movsd  (%rsi,%r9,8),%xmm0
  addsd  (%rcx,%r9,8),%xmm0
  addsd  -0x8(%rax,%r9,8),%xmm0
  addsd  0x8(%rax,%r9,8),%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdx,%r9,8)
  add    $0x1,%r9
  cmp    %r15,%r9
  jne    L117
  jmp    L105
L169:
  xor    %eax,%eax
  call   <dissBarrier@plt>
  jmp    L114
```

tool_calls: name: unpack_data
arguments: tag: D9
type_guessed: f64[2]

tool: {"D9": [0.25,0.25]}

assistant: ```c
void jacobi(double **grid, double **new, int gridSize, int iter) {
  for (int k = 0; k < iter; k++) {
#pragma omp for nowait schedule(static)
    for (int i = 1; i < gridSize + 1; i++) {
      for (int j = 1; j < gridSize + 1; j++) {
        new[i][j] = (grid[i - 1][j] + grid[i + 1][j] + grid[i][j - 1] + grid[i][j + 1]) * 0.25;
      }
    }
    dissBarrier();
#pragma omp for nowait schedule(static)
    for (int i = 1; i < gridSize + 1; i++) {
      for (int j = 1; j < gridSize + 1; j++) {
        grid[i][j] = (new[i - 1][j] + new[i + 1][j] + new[i][j - 1] + new[i][j + 1]) * 0.25;
      }
    }
    dissBarrier();
  }
}
```