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

```asm
<advect>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %edi,-0x54(%rbp)
  mov    %esi,-0x58(%rbp)
  mov    %rdx,-0x60(%rbp)
  mov    %rcx,-0x68(%rbp)
  mov    %r8,-0x70(%rbp)
  mov    %r9,-0x78(%rbp)
  movss  %xmm0,-0x7c(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x54(%rbp),%xmm0
  movss  -0x7c(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x34(%rbp)
  movl   $0x1,-0x4c(%rbp)
  jmp    L11
L116:
  movl   $0x1,-0x48(%rbp)
  jmp    L45
L110:
  movl   $0x1,-0x44(%rbp)
  jmp    L48
L97:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x4c(%rbp),%xmm0
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x44(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x34(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x48(%rbp),%xmm0
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x44(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x34(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x44(%rbp),%xmm0
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x44(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x34(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
  movss  D6(%rip),%xmm0
  comiss -0x40(%rbp),%xmm0
  jbe    L65
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x40(%rbp)
L65:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x40(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x54(%rbp),%xmm2
  movsd  D97(%rip),%xmm1
  addsd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jbe    L76
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x54(%rbp),%xmm1
  movsd  D97(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x40(%rbp)
L76:
  movss  D6(%rip),%xmm0
  comiss -0x3c(%rbp),%xmm0
  jbe    L78
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x3c(%rbp)
L78:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x3c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x54(%rbp),%xmm2
  movsd  D97(%rip),%xmm1
  addsd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jbe    L106
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x54(%rbp),%xmm1
  movsd  D97(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x3c(%rbp)
L106:
  movss  D6(%rip),%xmm0
  comiss -0x38(%rbp),%xmm0
  jbe    L57
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x38(%rbp)
L57:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x38(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x54(%rbp),%xmm2
  movsd  D97(%rip),%xmm1
  addsd  %xmm2,%xmm1
  comisd %xmm1,%xmm0
  jbe    L64
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x54(%rbp),%xmm1
  movsd  D97(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
L64:
  movss  -0x40(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
  movss  -0x3c(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x24(%rbp)
  movss  -0x38(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x30(%rbp),%xmm1
  movss  -0x40(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  D85(%rip),%xmm0
  subss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x28(%rbp),%xmm1
  movss  -0x3c(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  movss  D85(%rip),%xmm0
  subss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x20(%rbp),%xmm1
  movss  -0x38(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  D85(%rip),%xmm0
  subss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0xc(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x4(%rbp),%xmm1
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  movss  -0x10(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x4(%rbp),%xmm2
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x8(%rbp),%xmm2
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x1c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm0,%xmm1
  movss  -0x10(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x8(%rbp),%xmm2
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x1c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x14(%rbp),%xmm1
  movss  -0xc(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  -0x4(%rbp),%xmm2
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm2
  movss  -0x10(%rbp),%xmm0
  movaps %xmm0,%xmm3
  mulss  -0x4(%rbp),%xmm3
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x20(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm3,%xmm0
  addss  %xmm0,%xmm2
  movss  -0xc(%rbp),%xmm0
  movaps %xmm0,%xmm3
  mulss  -0x8(%rbp),%xmm3
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x28(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x1c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm3,%xmm0
  addss  %xmm0,%xmm2
  movss  -0x10(%rbp),%xmm0
  movaps %xmm0,%xmm3
  mulss  -0x8(%rbp),%xmm3
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x1c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm3,%xmm0
  addss  %xmm2,%xmm0
  mulss  -0x18(%rbp),%xmm0
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   -0x48(%rbp),%eax
  mov    %eax,%edx
  mov    -0x4c(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x54(%rbp),%eax
  lea    0x2(%rax),%edx
  mov    -0x54(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  imul   -0x44(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x44(%rbp)
L48:
  mov    -0x44(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jle    L97
  addl   $0x1,-0x48(%rbp)
L45:
  mov    -0x48(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jle    L110
  addl   $0x1,-0x4c(%rbp)
L11:
  mov    -0x4c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jle    L116
  mov    -0x58(%rbp),%edx
  mov    -0x60(%rbp),%rcx
  mov    -0x54(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <boundary_condition@plt>
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D6
data_type: f32
name: unpack_data
arguments: data_tag: D97
data_type: byte[8]
name: unpack_data
arguments: data_tag: D85
data_type: byte[4]

tool: D6: 0.5

tool: {"D97": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D85": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void advect(int N, int b, float *density, float *density_prev, float *velocity_u, float *velocity_v, float *velocity_w, float dt) {
  int count_x;
  int count_y;
  int count_z;
  int i0;
  int j0;
  int k0;
  int i1;
  int j1;
  int k1;
  float x;
  float y;
  float z;
  float s0;
  float t0;
  float s1;
  float t1;
  float u1;
  float u0;
  float dh;
  dh = dt * N;
  for (count_x = 1; count_x <= N; count_x++) {
    for (count_y = 1; count_y <= N; count_y++) {
      for (count_z = 1; count_z <= N; count_z++) {
        x = count_x - dh * velocity_u[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))];
        y = count_y - dh * velocity_v[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))];
        z = count_z - dh * velocity_w[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))];
        if (x < 0.5) {
          x = 0.5;
        }
        if (x > N + 0.5) {
          x = (float)(N + 0.5);
        }
        if (y < 0.5) {
          y = 0.5;
        }
        if (y > N + 0.5) {
          y = (float)(N + 0.5);
        }
        if (z < 0.5) {
          z = 0.5;
        }
        if (z > N + 0.5) {
          z = (float)(N + 0.5);
        }
        i0 = (int)x;
        i1 = i0 + 1;
        j0 = (int)y;
        j1 = j0 + 1;
        k0 = (int)z;
        k1 = k0 + 1;
        s1 = x - i0;
        s0 = 1 - s1;
        t1 = y - j0;
        t0 = 1 - t1;
        u1 = z - k0;
        u0 = 1 - u1;
        density[((count_x) + (N + 2) * (count_y) + (N + 2) * (N + 2) * (count_z))] = s0 * (t0 * u0 * density_prev[((i0) + (N + 2) * (j0) + (N + 2) * (N + 2) * (k0))] + t1 * u0 * density_prev[((i0) + (N + 2) * (j1) + (N + 2) * (N + 2) * (k0))] + t0 * u1 * density_prev[((i0) + (N + 2) * (j0) + (N + 2) * (N + 2) * (k1))] + t1 * u1 * density_prev[((i0) + (N + 2) * (j1) + (N + 2) * (N + 2) * (k1))]) + s1 * (t0 * u0 * density_prev[((i1) + (N + 2) * (j0) + (N + 2) * (N + 2) * (k0))] + t1 * u0 * density_prev[((i1) + (N + 2) * (j1) + (N + 2) * (N + 2) * (k0))] + t0 * u1 * density_prev[((i1) + (N + 2) * (j0) + (N + 2) * (N + 2) * (k1))] + t1 * u1 * density_prev[((i1) + (N + 2) * (j1) + (N + 2) * (N + 2) * (k1))]);
      }
    }
  }
  boundary_condition(N, density, b);
}
```