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

```asm
<compute_tentative_velocity>:
  endbr64
  push   %r15
  mov    %rdx,%r10
  mov    %rcx,%r11
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %r9d,-0x14(%rsp)
  movss  %xmm0,-0x28(%rsp)
  movss  %xmm1,-0x24(%rsp)
  movss  %xmm2,-0x20(%rsp)
  movss  %xmm3,-0x1c(%rsp)
  movss  %xmm4,-0x18(%rsp)
  cmp    $0x1,%r9d
  jle    L110
  mov    0x38(%rsp),%ecx
  test   %ecx,%ecx
  jle    L116
  mov    0x38(%rsp),%eax
  movslq %r9d,%r9
  mov    $0x1,%ecx
  mov    %r11,%r12
  movss  D48(%rip),%xmm1
  lea    0x1(%rax),%r13d
  nopl   0x0(%rax,%rax,1)
L137:
  mov    (%r8,%rcx,8),%rbp
  mov    (%rdi,%rcx,8),%r11
  mov    $0x4,%eax
  mov    $0x1,%edx
  mov    (%r10,%rcx,8),%rbx
  cs nopw 0x0(%rax,%rax,1)
L279:
  movss  (%r11,%rax,1),%xmm3
  testb  $0x10,0x0(%rbp,%rdx,1)
  je     L179
  mov    0x8(%r8,%rcx,8),%r14
  testb  $0x10,(%r14,%rdx,1)
  je     L179
  mov    0x8(%rdi,%rcx,8),%r14
  pxor   %xmm12,%xmm12
  pxor   %xmm0,%xmm0
  movss  0x4(%r11,%rax,1),%xmm6
  cvtss2sd %xmm3,%xmm12
  pxor   %xmm2,%xmm2
  pxor   %xmm7,%xmm7
  mov    (%rsi,%rcx,8),%r15
  addsd  %xmm12,%xmm12
  movss  (%r14,%rax,1),%xmm14
  mov    -0x8(%rdi,%rcx,8),%r14
  pxor   %xmm15,%xmm15
  movss  -0x4(%r11,%rax,1),%xmm8
  cvtss2sd -0x24(%rsp),%xmm2
  pxor   %xmm11,%xmm11
  cvtss2sd -0x20(%rsp),%xmm7
  cvtss2sd %xmm14,%xmm0
  movss  (%r14,%rax,1),%xmm9
  movaps %xmm14,%xmm10
  cvtss2sd -0x1c(%rsp),%xmm11
  subsd  %xmm12,%xmm0
  addss  %xmm3,%xmm10
  mov    0x8(%rsi,%rcx,8),%r14
  movss  (%r15,%rax,1),%xmm13
  cvtss2sd %xmm9,%xmm15
  movaps %xmm9,%xmm5
  subss  %xmm3,%xmm9
  movss  -0x4(%r15,%rax,1),%xmm4
  addss  %xmm3,%xmm5
  addss  (%r14,%rax,1),%xmm13
  addsd  %xmm15,%xmm0
  pxor   %xmm15,%xmm15
  addss  -0x4(%r14,%rax,1),%xmm4
  cvtss2sd %xmm6,%xmm15
  subsd  %xmm12,%xmm15
  pxor   %xmm12,%xmm12
  cvtss2sd %xmm9,%xmm9
  cvtss2sd %xmm8,%xmm12
  divsd  %xmm2,%xmm0
  addsd  %xmm12,%xmm15
  movaps %xmm10,%xmm12
  mulss  %xmm10,%xmm10
  andps  %xmm1,%xmm12
  cvtss2sd %xmm12,%xmm12
  mulsd  %xmm11,%xmm12
  cvtss2sd %xmm10,%xmm10
  divsd  %xmm7,%xmm15
  divsd  %xmm2,%xmm0
  mulsd  D15(%rip),%xmm2
  divsd  %xmm7,%xmm15
  mulsd  D15(%rip),%xmm7
  addsd  %xmm15,%xmm0
  movaps %xmm3,%xmm15
  subss  %xmm14,%xmm15
  pxor   %xmm14,%xmm14
  cvtsd2ss %xmm0,%xmm0
  divss  -0x18(%rsp),%xmm0
  cvtss2sd %xmm15,%xmm14
  mulsd  %xmm12,%xmm14
  addsd  %xmm10,%xmm14
  movaps %xmm5,%xmm10
  mulss  %xmm5,%xmm10
  andps  %xmm1,%xmm5
  cvtss2sd %xmm5,%xmm5
  mulsd  %xmm11,%xmm5
  cvtss2sd %xmm10,%xmm10
  subsd  %xmm10,%xmm14
  mulsd  %xmm9,%xmm5
  subsd  %xmm5,%xmm14
  movaps %xmm3,%xmm5
  subss  %xmm6,%xmm5
  addss  %xmm3,%xmm6
  divsd  %xmm2,%xmm14
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm5,%xmm5
  mulss  %xmm13,%xmm6
  cvtss2sd %xmm6,%xmm6
  cvtsd2ss %xmm14,%xmm2
  subss  %xmm2,%xmm0
  movaps %xmm13,%xmm2
  andps  %xmm1,%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm11,%xmm2
  mulsd  %xmm5,%xmm2
  movaps %xmm8,%xmm5
  subss  %xmm3,%xmm8
  addss  %xmm3,%xmm5
  cvtss2sd %xmm8,%xmm8
  mulss  %xmm4,%xmm5
  andps  %xmm1,%xmm4
  cvtss2sd %xmm4,%xmm4
  mulsd  %xmm11,%xmm4
  addsd  %xmm6,%xmm2
  cvtss2sd %xmm5,%xmm5
  subsd  %xmm5,%xmm2
  mulsd  %xmm4,%xmm8
  subsd  %xmm8,%xmm2
  divsd  %xmm7,%xmm2
  cvtsd2ss %xmm2,%xmm2
  subss  %xmm2,%xmm0
  mulss  -0x28(%rsp),%xmm0
  addss  %xmm0,%xmm3
L179:
  add    $0x1,%rdx
  movss  %xmm3,(%rbx,%rax,1)
  add    $0x4,%rax
  cmp    %r13,%rdx
  jne    L279
  add    $0x1,%rcx
  cmp    %rcx,%r9
  jne    L137
  cmpl   $0x1,0x38(%rsp)
  mov    %r12,%r11
  je     L51
L17:
  mov    %r10,-0x10(%rsp)
  movslq 0x38(%rsp),%r15
  mov    %r9,%r13
  mov    $0x1,%ebx
  mov    -0x14(%rsp),%r12d
  movss  D48(%rip),%xmm1
  nopl   0x0(%rax)
L276:
  mov    (%r8,%rbx,8),%r10
  mov    (%rsi,%rbx,8),%r9
  mov    $0x4,%eax
  mov    (%r11,%rbx,8),%rbp
  lea    0x1(%r10),%rdx
  add    %r15,%r10
  nopl   0x0(%rax,%rax,1)
L201:
  movss  (%r9,%rax,1),%xmm4
  lea    0x4(%rax),%rcx
  testb  $0x10,(%rdx)
  je     L35
  testb  $0x10,0x1(%rdx)
  je     L35
  mov    (%rdi,%rbx,8),%r14
  pxor   %xmm12,%xmm12
  pxor   %xmm0,%xmm0
  movss  0x4(%r9,%rax,1),%xmm14
  cvtss2sd %xmm4,%xmm12
  addsd  %xmm12,%xmm12
  pxor   %xmm2,%xmm2
  pxor   %xmm7,%xmm7
  movss  (%r14,%rax,1),%xmm13
  addss  (%r14,%rcx,1),%xmm13
  movaps %xmm14,%xmm9
  pxor   %xmm15,%xmm15
  mov    0x8(%rsi,%rbx,8),%r14
  pxor   %xmm11,%xmm11
  addss  %xmm4,%xmm9
  movss  -0x4(%r9,%rax,1),%xmm8
  cvtss2sd -0x24(%rsp),%xmm2
  cvtss2sd -0x20(%rsp),%xmm7
  cvtss2sd -0x1c(%rsp),%xmm11
  movss  (%r14,%rax,1),%xmm3
  mov    -0x8(%rdi,%rbx,8),%r14
  movaps %xmm8,%xmm6
  addss  %xmm4,%xmm6
  movss  (%r14,%rax,1),%xmm5
  addss  (%r14,%rcx,1),%xmm5
  cvtss2sd %xmm3,%xmm0
  subsd  %xmm12,%xmm0
  mov    -0x8(%rsi,%rbx,8),%r14
  movss  (%r14,%rax,1),%xmm10
  cvtss2sd %xmm10,%xmm15
  addsd  %xmm15,%xmm0
  pxor   %xmm15,%xmm15
  cvtss2sd %xmm14,%xmm15
  subsd  %xmm12,%xmm15
  pxor   %xmm12,%xmm12
  cvtss2sd %xmm8,%xmm12
  subss  %xmm4,%xmm8
  divsd  %xmm2,%xmm0
  addsd  %xmm12,%xmm15
  movaps %xmm4,%xmm12
  subss  %xmm3,%xmm12
  addss  %xmm4,%xmm3
  cvtss2sd %xmm8,%xmm8
  mulss  %xmm13,%xmm3
  cvtss2sd %xmm12,%xmm12
  cvtss2sd %xmm3,%xmm3
  divsd  %xmm7,%xmm15
  divsd  %xmm2,%xmm0
  mulsd  D15(%rip),%xmm2
  divsd  %xmm7,%xmm15
  mulsd  D15(%rip),%xmm7
  addsd  %xmm15,%xmm0
  movaps %xmm13,%xmm15
  andps  %xmm1,%xmm15
  cvtss2sd %xmm15,%xmm15
  mulsd  %xmm11,%xmm15
  cvtsd2ss %xmm0,%xmm0
  divss  -0x18(%rsp),%xmm0
  mulsd  %xmm15,%xmm12
  addsd  %xmm12,%xmm3
  movaps %xmm10,%xmm12
  subss  %xmm4,%xmm10
  addss  %xmm4,%xmm12
  cvtss2sd %xmm10,%xmm10
  mulss  %xmm5,%xmm12
  andps  %xmm1,%xmm5
  cvtss2sd %xmm5,%xmm5
  mulsd  %xmm11,%xmm5
  cvtss2sd %xmm12,%xmm12
  subsd  %xmm12,%xmm3
  mulsd  %xmm10,%xmm5
  subsd  %xmm5,%xmm3
  divsd  %xmm2,%xmm3
  movaps %xmm9,%xmm2
  mulss  %xmm9,%xmm9
  andps  %xmm1,%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm11,%xmm2
  cvtss2sd %xmm9,%xmm9
  cvtsd2ss %xmm3,%xmm3
  subss  %xmm3,%xmm0
  movaps %xmm4,%xmm3
  subss  %xmm14,%xmm3
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm3,%xmm2
  movaps %xmm6,%xmm3
  mulss  %xmm6,%xmm3
  andps  %xmm1,%xmm6
  cvtss2sd %xmm6,%xmm6
  mulsd  %xmm11,%xmm6
  addsd  %xmm9,%xmm2
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm6,%xmm8
  subsd  %xmm3,%xmm2
  subsd  %xmm8,%xmm2
  divsd  %xmm7,%xmm2
  cvtsd2ss %xmm2,%xmm2
  subss  %xmm2,%xmm0
  mulss  -0x28(%rsp),%xmm0
  addss  %xmm0,%xmm4
L35:
  add    $0x1,%rdx
  movss  %xmm4,0x0(%rbp,%rax,1)
  mov    %rcx,%rax
  cmp    %rdx,%r10
  jne    L201
  add    $0x1,%rbx
  cmp    %ebx,%r12d
  jge    L276
  mov    -0x10(%rsp),%r10
  mov    %r13,%r9
L51:
  mov    (%rdi,%r9,8),%rcx
  mov    (%r10),%rdx
  mov    (%rdi),%r8
  mov    (%r10,%r9,8),%rdi
  lea    0x4(%rcx),%rbx
  lea    0x14(%rdx),%rax
  cmp    %rax,%rbx
  lea    0x4(%rdx),%r10
  lea    0x14(%rcx),%rbx
  lea    0x8(%r8),%rbp
  setae  %al
  lea    0x4(%rdi),%r9
  cmp    %rbx,%r10
  setae  %bl
  sub    %rbp,%r10
  or     %ebx,%eax
  cmp    $0x8,%r10
  seta   %r10b
  cmpl   $0x1,0x38(%rsp)
  setne  %bl
  and    %ebx,%r10d
  lea    0x8(%rdx),%rbx
  and    %r10d,%eax
  mov    %r9,%r10
  sub    %rbp,%r10
  cmp    $0x8,%r10
  seta   %r10b
  and    %r10d,%eax
  mov    %r9,%r10
  sub    %rbx,%r10
  cmp    $0x8,%r10
  seta   %r10b
  test   %r10b,%al
  je     L6
  lea    0x8(%rcx),%rax
  sub    %rax,%r9
  cmp    $0x8,%r9
  jbe    L6
  mov    0x38(%rsp),%r10d
  mov    %r10d,%eax
  sub    $0x1,%eax
  cmp    $0x2,%eax
  jbe    L94
  mov    %r10d,%eax
  shr    $0x2,%eax
  lea    -0x1(%rax),%r9d
  mov    $0x4,%eax
  shl    $0x4,%r9
  add    $0x14,%r9
  nopl   0x0(%rax,%rax,1)
L108:
  movups (%r8,%rax,1),%xmm1
  movups %xmm1,(%rdx,%rax,1)
  movups (%rcx,%rax,1),%xmm1
  movups %xmm1,(%rdi,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r9
  jne    L108
  mov    0x38(%rsp),%ebx
  and    $0xfffffffc,%ebx
  lea    0x1(%rbx),%r9d
  mov    %r9d,%eax
  cmp    0x38(%rsp),%ebx
  je     L271
  mov    0x38(%rsp),%r10d
  sub    %ebx,%r10d
  cmp    $0x1,%r10d
  je     L29
L263:
  mov    (%r8,%r9,4),%rbx
  mov    %rbx,(%rdx,%r9,4)
  mov    (%rcx,%r9,4),%rbx
  mov    %rbx,(%rdi,%r9,4)
  mov    %r10d,%r9d
  and    $0xfffffffe,%r9d
  add    %r9d,%eax
  cmp    %r9d,%r10d
  je     L271
L29:
  cltq
  movss  (%r8,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  movss  (%rcx,%rax,4),%xmm0
  movss  %xmm0,(%rdi,%rax,4)
L271:
  mov    -0x14(%rsp),%eax
  test   %eax,%eax
  jle    L237
L116:
  mov    -0x14(%rsp),%eax
  movslq 0x38(%rsp),%rdi
  lea    0x1(%rax),%r8d
  shl    $0x2,%rdi
  mov    $0x1,%eax
L229:
  mov    (%rsi,%rax,8),%rcx
  mov    (%r11,%rax,8),%rdx
  add    $0x1,%rax
  movss  (%rcx),%xmm0
  movss  %xmm0,(%rdx)
  movss  (%rcx,%rdi,1),%xmm0
  movss  %xmm0,(%rdx,%rdi,1)
  cmp    %rax,%r8
  jne    L229
L237:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L6:
  mov    0x38(%rsp),%eax
  lea    0x1(%rax),%r9d
  mov    $0x1,%eax
  nopl   0x0(%rax,%rax,1)
L270:
  movss  (%r8,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  movss  (%rcx,%rax,4),%xmm0
  movss  %xmm0,(%rdi,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r9
  jne    L270
  jmp    L271
L110:
  je     L10
L45:
  mov    0x38(%rsp),%edx
  movslq -0x14(%rsp),%r9
  test   %edx,%edx
  jle    L271
  jmp    L51
L94:
  mov    $0x1,%eax
  mov    $0x1,%r9d
  jmp    L263
L10:
  cmpl   $0x1,0x38(%rsp)
  jle    L45
  mov    $0x1,%r9d
  jmp    L17
```

tool_calls: name: unpack_data
arguments: data_label: D48
datatype: dword
name: unpack_data
arguments: data_label: D15
datatype: f64

tool: D48: 2147483647

tool: D15: 4

assistant: ```c
void compute_tentative_velocity(float **u, float **v, float **f, float **g, char **flag, int imax, int jmax, float del_t, float delx, float dely, float gamma, float Re) {
  int i, j;
  float du2dx, duvdy, duvdx, dv2dy, laplu, laplv;
  for (i = 1; i <= imax - 1; i++) {
    for (j = 1; j <= jmax; j++) {
      if ((flag[i][j] & 0x0010) && (flag[i + 1][j] & 0x0010)) {
        du2dx = ((u[i][j] + u[i + 1][j]) * (u[i][j] + u[i + 1][j]) + gamma * fabs(u[i][j] + u[i + 1][j]) * (u[i][j] - u[i + 1][j]) - (u[i - 1][j] + u[i][j]) * (u[i - 1][j] + u[i][j]) - gamma * fabs(u[i - 1][j] + u[i][j]) * (u[i - 1][j] - u[i][j])) / (4.0 * delx);
        duvdy = ((v[i][j] + v[i + 1][j]) * (u[i][j] + u[i][j + 1]) + gamma * fabs(v[i][j] + v[i + 1][j]) * (u[i][j] - u[i][j + 1]) - (v[i][j - 1] + v[i + 1][j - 1]) * (u[i][j - 1] + u[i][j]) - gamma * fabs(v[i][j - 1] + v[i + 1][j - 1]) * (u[i][j - 1] - u[i][j])) / (4.0 * dely);
        laplu = (u[i + 1][j] - 2.0 * u[i][j] + u[i - 1][j]) / delx / delx + (u[i][j + 1] - 2.0 * u[i][j] + u[i][j - 1]) / dely / dely;
        f[i][j] = u[i][j] + del_t * (laplu / Re - du2dx - duvdy);
      } else {
        f[i][j] = u[i][j];
      }
    }
  }
  for (i = 1; i <= imax; i++) {
    for (j = 1; j <= jmax - 1; j++) {
      if ((flag[i][j] & 0x0010) && (flag[i][j + 1] & 0x0010)) {
        duvdx = ((u[i][j] + u[i][j + 1]) * (v[i][j] + v[i + 1][j]) + gamma * fabs(u[i][j] + u[i][j + 1]) * (v[i][j] - v[i + 1][j]) - (u[i - 1][j] + u[i - 1][j + 1]) * (v[i - 1][j] + v[i][j]) - gamma * fabs(u[i - 1][j] + u[i - 1][j + 1]) * (v[i - 1][j] - v[i][j])) / (4.0 * delx);
        dv2dy = ((v[i][j] + v[i][j + 1]) * (v[i][j] + v[i][j + 1]) + gamma * fabs(v[i][j] + v[i][j + 1]) * (v[i][j] - v[i][j + 1]) - (v[i][j - 1] + v[i][j]) * (v[i][j - 1] + v[i][j]) - gamma * fabs(v[i][j - 1] + v[i][j]) * (v[i][j - 1] - v[i][j])) / (4.0 * dely);
        laplv = (v[i + 1][j] - 2.0 * v[i][j] + v[i - 1][j]) / delx / delx + (v[i][j + 1] - 2.0 * v[i][j] + v[i][j - 1]) / dely / dely;
        g[i][j] = v[i][j] + del_t * (laplv / Re - duvdx - dv2dy);
      } else {
        g[i][j] = v[i][j];
      }
    }
  }
  for (j = 1; j <= jmax; j++) {
    f[0][j] = u[0][j];
    f[imax][j] = u[imax][j];
  }
  for (i = 1; i <= imax; i++) {
    g[i][0] = v[i][0];
    g[i][jmax] = v[i][jmax];
  }
}
```