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

```asm
<set_timestep_interval>:
  endbr64
  comisd D7(%rip),%xmm3
  jb     L66
  push   %rbx
  mov    %esi,%r9d
  mov    %edx,%esi
  movapd %xmm0,%xmm7
  mov    %r9d,%ebx
  add    $0x1,%ebx
  js     L95
  lea    0x1(%r9),%edx
  lea    0x8(%rcx,%rdx,8),%r10
  mov    %esi,%eax
  movsd  D7(%rip),%xmm5
  lea    0x10(,%rax,8),%r11
  movq   D73(%rip),%xmm4
  jmp    L87
L64:
  mov    (%rcx),%rdx
  lea    0x8(%rdx),%rax
  add    %r11,%rdx
L44:
  movsd  (%rax),%xmm0
  andpd  %xmm4,%xmm0
  maxsd  %xmm5,%xmm0
  movapd %xmm0,%xmm5
  add    $0x8,%rax
  cmp    %rdx,%rax
  jne    L44
L81:
  add    $0x8,%rcx
  cmp    %r10,%rcx
  je     L35
L87:
  test   %esi,%esi
  jns    L64
  jmp    L81
L95:
  movsd  D7(%rip),%xmm5
L35:
  test   %ebx,%ebx
  jle    L50
  lea    0x8(%r8),%rcx
  mov    %r9d,%r9d
  lea    0x10(%r8,%r9,8),%r8
  lea    0x1(%rsi),%eax
  movsd  D7(%rip),%xmm4
  lea    0x8(,%rax,8),%r9
  movq   D73(%rip),%xmm6
  jmp    L58
L43:
  mov    (%rcx),%rax
  lea    (%r9,%rax,1),%rdx
L30:
  movsd  (%rax),%xmm0
  andpd  %xmm6,%xmm0
  maxsd  %xmm4,%xmm0
  movapd %xmm0,%xmm4
  add    $0x8,%rax
  cmp    %rax,%rdx
  jne    L30
L69:
  add    $0x8,%rcx
  cmp    %r8,%rcx
  je     L59
L58:
  cmp    $0xffffffff,%esi
  jge    L43
  jmp    L69
L50:
  movsd  D7(%rip),%xmm4
L59:
  movapd %xmm7,%xmm6
  divsd  %xmm5,%xmm6
  movapd %xmm1,%xmm5
  divsd  %xmm4,%xmm5
  mulsd  %xmm7,%xmm7
  movsd  D6(%rip),%xmm0
  movapd %xmm0,%xmm4
  divsd  %xmm7,%xmm4
  mulsd  %xmm1,%xmm1
  movapd %xmm0,%xmm7
  divsd  %xmm1,%xmm7
  movapd %xmm4,%xmm1
  addsd  %xmm7,%xmm1
  divsd  %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  D61(%rip),%xmm0
  comisd %xmm6,%xmm5
  jbe    L0
  minsd  %xmm0,%xmm6
L27:
  mulsd  %xmm6,%xmm3
  movsd  %xmm3,(%rdi)
  pop    %rbx
  ret
L0:
  movapd %xmm5,%xmm6
  minsd  %xmm0,%xmm6
  jmp    L27
L66:
  ret
```

tool_calls: name: parse_data
arguments: data_label: D7
type_guessed: byte[16]
name: parse_data
arguments: data_label: D73
type_guessed: qword
name: parse_data
arguments: data_label: D6
type_guessed: byte[8]
name: parse_data
arguments: data_label: D61
type_guessed: byte[8]

tool: {"D7": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D73: 9223372036854775807

tool: {"D6": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

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

assistant: ```c
void set_timestep_interval(double *del_t, int imax, int jmax, double delx, double dely, double **u, double **v, double Re, double tau) {
  int i, j;
  double umax, vmax, deltu, deltv, deltRe;
  if (tau >= 1.0e-10) {
    umax = 1.0e-10;
    vmax = 1.0e-10;
    for (i = 0; i <= imax + 1; i++) {
      for (j = 1; j <= jmax + 1; j++) {
        umax = ((fabs(u[i][j])) > (umax) ? (fabs(u[i][j])) : (umax));
      }
    }
    for (i = 1; i <= imax + 1; i++) {
      for (j = 0; j <= jmax + 1; j++) {
        vmax = ((fabs(v[i][j])) > (vmax) ? (fabs(v[i][j])) : (vmax));
      }
    }
    deltu = delx / umax;
    deltv = dely / vmax;
    deltRe = 1 / (1 / (delx * delx) + 1 / (dely * dely)) * Re / 2.0;
    if (deltu < deltv) {
      *del_t = ((deltu) < (deltRe) ? (deltu) : (deltRe));
    } else {
      *del_t = ((deltv) < (deltRe) ? (deltv) : (deltRe));
    }
    *del_t = tau * (*del_t);
  }
}
```