user: What would the C source look like for the assembly code provided here:

```asm
<tm_world_recur_>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    0xd0(%rsp),%rax
  mov    %r8,0x28(%rsp)
  mov    0xc8(%rsp),%r14
  mov    0xc0(%rsp),%r15
  mov    %rax,0x18(%rsp)
  mov    0xd8(%rsp),%rax
  mov    0xe8(%rsp),%r13
  mov    %rax,0x10(%rsp)
  mov    0xe0(%rsp),%rax
  mov    %rax,0x20(%rsp)
  mov    0xf0(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0xf8(%rsp),%rax
  mov    %rax,0x8(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  movslq (%rsi),%rax
  mov    %eax,0x5c(%rsp)
  mov    (%r14,%rax,4),%ebx
  cmp    (%rcx),%eax
  jle    L361
  lea    0x0(,%rax,4),%r11
  add    %r9,%r11
  movslq (%r11),%rdx
  test   %edx,%edx
  je     L361
  mov    (%r15,%rax,4),%edi
  cmp    $0x1,%edi
  je     L176
  movsd  D23(%rip),%xmm0
  cmp    $0x2,%edi
  je     L347
  nopl   0x0(%rax,%rax,1)
L270:
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L153
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L361:
  lea    0x5c(%rsp),%r15
  xor    %eax,%eax
  mov    %r15,%rdi
  call   <tm_its_subspan_modulo_int_@plt>
  movslq 0x5c(%rsp),%rdx
  cmp    $0x1,%eax
  mov    0x0(%rbp),%eax
  mov    0x0(%r13,%rdx,4),%edi
  sbb    $0xffffffff,%ebx
  test   %edi,%edi
  jne    L310
  test   %eax,%eax
  mov    $0x1,%edx
  cmovle %edx,%eax
  cmp    %ebx,%eax
  cmovg  %ebx,%eax
  mov    %eax,%edx
L412:
  xor    %eax,%eax
  mov    %r15,%rdi
  mov    %edx,0x30(%rsp)
  call   <tm_its_subspan_modulo_int_@plt>
  mov    0x30(%rsp),%edx
  test   %eax,%eax
  je     L450
  cmp    %ebx,%edx
  je     L261
L450:
  movslq 0x5c(%rsp),%rax
  mov    0x8(%rsp),%rdi
  mov    (%r12),%ecx
  mov    (%rdi,%rax,4),%esi
  test   %esi,%esi
  je     L316
  sub    $0x1,%edx
  pxor   %xmm0,%xmm0
  mov    0x10(%rsp),%rsi
  cvtsi2sd %edx,%xmm0
  movsd  (%rsi,%rax,8),%xmm1
  mov    0x18(%rsp),%rsi
  mulsd  %xmm1,%xmm0
  addsd  (%rsi,%rax,8),%xmm0
  cmp    $0x1,%ecx
  je     L45
  cmp    $0x2,%ecx
  je     L401
  mulsd  D12(%rip),%xmm1
  addsd  %xmm1,%xmm0
  jmp    L401
  nopl   (%rax)
L310:
  sub    $0x1,%eax
  cltd
  idiv   %ebx
  add    $0x1,%edx
  lea    (%rdx,%rbx,1),%eax
  test   %edx,%edx
  cmovle %eax,%edx
  jmp    L412
  cs nopw 0x0(%rax,%rax,1)
L316:
  mov    0x20(%rsp),%rdi
  mov    (%rdi,%rax,4),%esi
  lea    -0x2(%rdx,%rsi,1),%edx
  cmp    $0x1,%ecx
  je     L218
  cmp    $0x2,%ecx
  je     L376
  mov    0x28(%rsp),%rcx
  add    (%r14,%rax,4),%edx
  movslq %edx,%rdx
  movsd  0x8(%rcx,%rdx,8),%xmm0
L401:
  mov    0x0(%r13,%rax,4),%eax
  test   %eax,%eax
  je     L270
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  jle    L100
  sub    $0x1,%eax
  cltd
  idiv   %ebx
  mov    %eax,%ebx
L334:
  mov    %r15,%rdi
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <tm_modulo_axlen_@plt>
  pxor   %xmm1,%xmm1
  movsd  0x8(%rsp),%xmm0
  imul   %ebx,%eax
  cvtsi2sd %eax,%xmm1
  addsd  %xmm1,%xmm0
  jmp    L270
  nopw   0x0(%rax,%rax,1)
L347:
  push   0x8(%rsp)
  mov    %r12,%rdx
  mov    %rbp,%rdi
  push   0x40(%rsp)
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  push   0x40(%rsp)
  push   %r14
  push   %r15
  mov    0x68(%rsp),%r8
  call   <tm_world_recur_>
  add    $0x40,%rsp
  jmp    L270
  nopl   0x0(%rax,%rax,1)
L45:
  mulsd  D12(%rip),%xmm1
  subsd  %xmm1,%xmm0
  jmp    L401
  nopl   0x0(%rax)
L218:
  mov    0x28(%rsp),%rcx
  add    (%r14,%rax,4),%edx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  jmp    L401
  cs nopw 0x0(%rax,%rax,1)
L100:
  cltd
  idiv   %ebx
  lea    -0x1(%rax),%ebx
  jmp    L334
  nopl   0x0(%rax,%rax,1)
L176:
  mov    0x18(%rsp),%rbx
  mov    0x0(%rbp),%esi
  cvttsd2si (%rbx,%rax,8),%r10d
  mov    0x10(%rsp),%rbx
  sub    $0x1,%esi
  cvttsd2si (%rbx,%rax,8),%edi
  mov    0x8(%rsp),%rbx
  mov    (%rbx,%rax,4),%ebx
  imul   %edi,%esi
  lea    (%r10,%rsi,1),%ebp
  mov    %ebp,0x60(%rsp)
  test   %ebx,%ebx
  jne    L420
  mov    (%r12),%eax
  cmp    $0x2,%eax
  je     L420
  lea    (%rdi,%rsi,1),%r8d
  add    %r10d,%r8d
  cmp    $0x1,%eax
  je     L230
L120:
  xor    %eax,%eax
  mov    %r11,%rdi
  mov    %r9,0x48(%rsp)
  mov    (%r14,%rdx,4),%ebx
  mov    %rcx,0x40(%rsp)
  mov    %r8d,0x68(%rsp)
  mov    %r8d,0x30(%rsp)
  mov    %ebp,0x64(%rsp)
  call   <tm_its_subspan_modulo_int_@plt>
  movslq 0x5c(%rsp),%rdx
  mov    0x48(%rsp),%r9
  mov    0x40(%rsp),%rcx
  lea    (%r9,%rdx,4),%rsi
  movslq (%rsi),%rdx
  mov    0x0(%r13,%rdx,4),%r8d
  test   %r8d,%r8d
  mov    0x30(%rsp),%r8d
  je     L58
  test   %eax,%eax
  je     L172
  lea    0x1(%rbp),%eax
  cmp    $0x1,%eax
  jbe    L289
  lea    0x1(%rbx),%eax
  cmp    %r8d,%eax
  je     L374
L172:
  movl   $0x2,0x70(%rsp)
  lea    0x70(%rsp),%r12
  lea    0x64(%rsp),%rdi
  push   0x8(%rsp)
  mov    %r12,%rdx
  push   0x40(%rsp)
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  mov    0x40(%rsp),%rbp
  push   %rbp
  push   %r14
  push   %r15
  mov    0x68(%rsp),%rbx
  mov    %rbx,%r8
  mov    %r9,0x70(%rsp)
  mov    %rcx,0x68(%rsp)
  call   <tm_world_recur_>
  mov    %rbx,%r8
  mov    %r12,%rdx
  movsd  %xmm0,0x58(%rsp)
  add    $0x40,%rsp
  movslq 0x5c(%rsp),%rax
  mov    0x30(%rsp),%r9
  lea    0x68(%rsp),%rdi
  push   0x8(%rsp)
  push   0x40(%rsp)
  lea    (%r9,%rax,4),%rsi
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  push   %rbp
  push   %r14
  push   %r15
  mov    0x68(%rsp),%rcx
  call   <tm_world_recur_>
  addsd  0x58(%rsp),%xmm0
  add    $0x40,%rsp
  mulsd  D12(%rip),%xmm0
  jmp    L270
  nopl   0x0(%rax)
L261:
  lea    0x70(%rsp),%rdx
  lea    0x68(%rsp),%rsi
  mov    %r15,%rdi
  xor    %eax,%eax
  call   <tm_ww_axlims_@plt>
  mov    (%r12),%eax
  cmp    $0x1,%eax
  je     L62
  movslq 0x5c(%rsp),%rdx
  mov    0x38(%rsp),%rcx
  movsd  0x68(%rsp),%xmm1
  movsd  (%rcx,%rdx,8),%xmm2
  addsd  %xmm2,%xmm1
  cmp    $0x2,%eax
  jne    L21
  addsd  0x70(%rsp),%xmm1
  mulsd  D12(%rip),%xmm1
L21:
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  jle    L428
  sub    $0x1,%eax
  cltd
  idiv   %ebx
L298:
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  jmp    L270
  nopl   0x0(%rax,%rax,1)
L376:
  mov    0x28(%rsp),%rcx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm0
  jmp    L401
  nopw   0x0(%rax,%rax,1)
L58:
  test   %ebp,%ebp
  jle    L215
  cmp    %r8d,%ebx
  jge    L172
L215:
  cmpl   $0x1,(%r12)
  je     L17
  mov    %ebx,0x60(%rsp)
L142:
  lea    0x60(%rsp),%rdi
  push   0x8(%rsp)
  mov    %r12,%rdx
  push   0x40(%rsp)
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  push   0x40(%rsp)
  push   %r14
  push   %r15
  mov    0x68(%rsp),%r8
  call   <tm_world_recur_>
  add    $0x40,%rsp
  jmp    L270
  nopl   0x0(%rax)
L230:
  mov    %esi,%eax
  mov    %ebp,%r8d
  sub    %edi,%eax
  lea    (%rax,%r10,1),%ebp
  jmp    L120
L62:
  movslq 0x5c(%rsp),%rax
  mov    0x38(%rsp),%rcx
  movsd  0x70(%rsp),%xmm1
  movsd  (%rcx,%rax,8),%xmm2
  jmp    L21
  nopw   0x0(%rax,%rax,1)
L420:
  lea    0x60(%rsp),%rdi
  push   0x8(%rsp)
  mov    %r12,%rdx
  mov    %r11,%rsi
  push   0x40(%rsp)
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  push   0x40(%rsp)
  push   %r14
  push   %r15
  mov    0x68(%rsp),%r8
  call   <tm_world_recur_>
  add    $0x40,%rsp
  jmp    L270
  nopl   0x0(%rax,%rax,1)
L428:
  cltd
  idiv   %ebx
  sub    $0x1,%eax
  jmp    L298
L17:
  movl   $0x1,0x60(%rsp)
  jmp    L142
L374:
  mov    %ebx,0x68(%rsp)
  lea    0x70(%rsp),%rdx
  lea    0x68(%rsp),%rdi
  movl   $0x3,0x70(%rsp)
L287:
  push   0x8(%rsp)
  push   0x40(%rsp)
  push   %r13
  push   0x38(%rsp)
  push   0x30(%rsp)
  push   0x40(%rsp)
  push   %r14
  push   %r15
  mov    0x68(%rsp),%r8
  call   <tm_world_recur_>
  add    $0x40,%rsp
  jmp    L270
L289:
  movl   $0x1,0x70(%rsp)
  lea    0x70(%rsp),%rdx
  lea    0x64(%rsp),%rdi
  movl   $0x1,0x64(%rsp)
  jmp    L287
L153:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D23
type_guessed: byte[8]
name: parse_data
arguments: label: D12
type_guessed: f64

tool: {"D23": [0x00,0x00,0x00,0x00,0x00,0x38,0x8f,0xc0]}

tool: D12: 0.5

assistant: ```c
double tm_world_recur_(int *isudirript, int *iaxis, int *where_in_box, int *max_lines, double line_mem[], int line_parent[], int line_class[], int line_dim[], double line_start[], double line_delta[], int line_sudir1[], int line_modulo[], double line_modulo_len[], int line_regular[]) {
  double tempwld, tm_world;
  int isub, rmod;
  int axis = *iaxis;
  int line_len = line_dim[axis];
  int is_subspan;
  int recursive = axis > *max_lines;
  if (recursive) {
    recursive = line_parent[axis] != 0;
    if (recursive) {
      int new_ss, lo_ss, hi_ss, parent_len;
      int new_where;
      switch (line_class[axis]) {
      case 1:
        new_ss = (int)line_start[axis] + (*isudirript - 1) * (int)line_delta[axis];
        if (line_regular[axis] || *where_in_box == 2) {
          tm_world = tm_world_recur_(&new_ss, &(line_parent[axis]), where_in_box, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular);
        } else {
          if (*where_in_box == 1) {
            lo_ss = (int)line_start[axis] + (*isudirript - 2) * (int)line_delta[axis];
            hi_ss = new_ss;
          } else {
            lo_ss = new_ss;
            hi_ss = (int)line_start[axis] + (*isudirript - 0) * (int)line_delta[axis];
          }
          parent_len = line_dim[line_parent[axis]];
          is_subspan = (tm_its_subspan_modulo_int_(&line_parent[axis]));
          if (line_modulo[line_parent[axis]] && is_subspan) {
            if (lo_ss == 0 || lo_ss == -1) {
              new_where = 1;
              lo_ss = 1;
              tm_world = (tm_world_recur_(&lo_ss, &(line_parent[axis]), &new_where, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular));
              return (tm_world);
            }
            if (hi_ss == parent_len + 1) {
              new_where = 3;
              hi_ss = parent_len;
              tm_world = (tm_world_recur_(&hi_ss, &(line_parent[axis]), &new_where, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular));
              return (tm_world);
            }
          }
          if (line_modulo[line_parent[axis]] || (lo_ss >= 1 && hi_ss <= parent_len)) {
            new_where = 2;
            tm_world = 0.5 * (tm_world_recur_(&lo_ss, &(line_parent[axis]), &new_where, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular) + tm_world_recur_(&hi_ss, &(line_parent[axis]), &new_where, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular));
          } else if (*where_in_box == 1) {
            new_ss = 1;
            tm_world = tm_world_recur_(&new_ss, &(line_parent[axis]), where_in_box, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular);
          } else {
            new_ss = parent_len;
            tm_world = tm_world_recur_(&new_ss, &(line_parent[axis]), where_in_box, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular);
          }
        }
        break;
      case 2:
        tm_world = tm_world_recur_(isudirript, iaxis, where_in_box, max_lines, line_mem, line_parent, line_class, line_dim, line_start, line_delta, line_sudir1, line_modulo, line_modulo_len, line_regular);
        break;
      default:
        tm_world = -999.;
      }
      return (tm_world);
    }
  }
  if (tm_its_subspan_modulo_int_(&axis))
    line_len++;
  if (line_modulo[axis]) {
    isub = ((*isudirript - 1) % line_len) + 1;
    if (isub <= 0)
      isub += line_len;
  } else
    isub = (((line_len) < ((((1) < (*isudirript)) ? (*isudirript) : (1)))) ? (line_len) : ((((1) < (*isudirript)) ? (*isudirript) : (1))));
  if (tm_its_subspan_modulo_int_(&axis) && isub == line_len) {
    double lo, hi;
    tm_ww_axlims_(&axis, &lo, &hi);
    if (*where_in_box == 1)
      tempwld = hi;
    else if (*where_in_box == 2)
      tempwld = (hi + (lo + line_modulo_len[axis])) / 2.;
    else
      tempwld = lo + line_modulo_len[axis];
    if (*isudirript <= 0)
      rmod = *isudirript / line_len - 1;
    else
      rmod = (*isudirript - 1) / line_len;
    tm_world = tempwld + rmod * line_modulo_len[axis];
  } else if (line_regular[axis]) {
    double midpoint = line_start[axis] + (isub - 1) * line_delta[axis];
    double box_size = line_delta[axis];
    if (*where_in_box == 1)
      tempwld = midpoint - (box_size / 2.);
    else if (*where_in_box == 2)
      tempwld = midpoint;
    else
      tempwld = midpoint + (box_size / 2.);
    if (line_modulo[axis]) {
      if (*isudirript <= 0)
        rmod = (*isudirript / line_len - 1);
      else
        rmod = ((*isudirript - 1) / line_len);
      tm_world = tempwld + rmod * tm_modulo_axlen_(&axis);
    } else
      tm_world = tempwld;
  } else {
    isub += line_sudir1[axis] - 1;
    isub--;
    if (*where_in_box == 1)
      tempwld = line_mem[isub + line_dim[axis]];
    else if (*where_in_box == 2)
      tempwld = line_mem[isub];
    else
      tempwld = line_mem[isub + line_dim[axis] + 1];
    if (line_modulo[axis]) {
      if (*isudirript <= 0)
        rmod = *isudirript / line_len - 1;
      else
        rmod = (*isudirript - 1) / line_len;
      tm_world = tempwld + rmod * tm_modulo_axlen_(&axis);
    } else
      tm_world = tempwld;
  }
  return (tm_world);
}
```