user: What is the c source code of the assembly code below:

```asm
<waveawav>:
  endbr64
  mov    %esi,%r10d
  mov    %rcx,%rax
  mov    %edx,%esi
  test   %edi,%edi
  jle    L30
  movslq %r10d,%rdx
  movslq %esi,%rcx
  shl    $0x3,%rdx
  shl    $0x3,%rcx
  cmp    $0x1,%esi
  jne    L15
  cmp    $0x1,%r10d
  jne    L15
  movslq %edi,%rdi
  movsd  D38(%rip),%xmm7
  movsd  D68(%rip),%xmm8
  xor    %r10d,%r10d
  movsd  D12(%rip),%xmm6
  lea    (%r9,%rdi,4),%rsi
  pxor   %xmm2,%xmm2
  movsd  D72(%rip),%xmm5
  movsd  D52(%rip),%xmm4
  movsd  D2(%rip),%xmm3
  nopl   0x0(%rax)
L105:
  movsd  (%rax),%xmm0
  add    $0x4,%r9
  ucomisd %xmm2,%xmm0
  jp     L28
  jne    L28
  movl   $0x1,-0x4(%r9)
  add    %rdx,%rax
  add    %rcx,%r8
  mov    $0x4,%r10d
  cmp    %rsi,%r9
  jne    L105
L96:
  mov    %r10d,%eax
  ret
  nopl   (%rax)
L28:
  movapd %xmm8,%xmm1
  movapd %xmm7,%xmm10
  movapd %xmm6,%xmm9
  add    %rdx,%rax
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  addsd  %xmm9,%xmm1
  addsd  %xmm3,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%r8)
  add    %rcx,%r8
  movl   $0x0,-0x4(%r9)
  cmp    %rsi,%r9
  jne    L105
  mov    %r10d,%eax
  ret
  nopl   0x0(%rax)
L15:
  movslq %edi,%rdi
  movsd  D38(%rip),%xmm7
  movsd  D68(%rip),%xmm8
  xor    %r10d,%r10d
  movsd  D12(%rip),%xmm6
  lea    (%r9,%rdi,4),%rsi
  pxor   %xmm2,%xmm2
  movsd  D72(%rip),%xmm5
  movsd  D52(%rip),%xmm4
  movsd  D2(%rip),%xmm3
  nopw   0x0(%rax,%rax,1)
L74:
  movsd  (%rax),%xmm0
  add    $0x4,%r9
  ucomisd %xmm2,%xmm0
  jp     L62
  jne    L62
  movl   $0x1,-0x4(%r9)
  add    %rdx,%rax
  add    %rcx,%r8
  mov    $0x4,%r10d
  cmp    %rsi,%r9
  jne    L74
  mov    %r10d,%eax
  ret
  nopl   (%rax)
L62:
  movapd %xmm8,%xmm1
  movapd %xmm7,%xmm10
  movapd %xmm6,%xmm9
  add    %rdx,%rax
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  movapd %xmm7,%xmm10
  addsd  %xmm9,%xmm1
  movapd %xmm6,%xmm9
  addsd  %xmm3,%xmm1
  divsd  %xmm0,%xmm1
  mulsd  %xmm1,%xmm1
  subsd  %xmm1,%xmm10
  divsd  %xmm10,%xmm9
  movapd %xmm5,%xmm10
  subsd  %xmm1,%xmm10
  movapd %xmm4,%xmm1
  divsd  %xmm10,%xmm1
  addsd  %xmm9,%xmm1
  addsd  %xmm3,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%r8)
  add    %rcx,%r8
  movl   $0x0,-0x4(%r9)
  cmp    %rsi,%r9
  jne    L74
  jmp    L96
  nopw   0x0(%rax,%rax,1)
L30:
  xor    %r10d,%r10d
  mov    %r10d,%eax
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D38
datatype: f64
name: parse_data
arguments: data_tag: D68
datatype: f64
name: parse_data
arguments: data_tag: D12
datatype: f64
name: parse_data
arguments: data_tag: D72
datatype: f64
name: parse_data
arguments: data_tag: D52
datatype: f64
name: parse_data
arguments: data_tag: D2
datatype: f64

tool: D38: 41000000000000

tool: D68: 1

tool: D12: 255400000

tool: D72: 146000000000000

tool: D52: 29498100000

tool: D2: 1.000064328

assistant: ```c
int waveawav(dummy, nwave, swave, sawav, wave, awav, stat)
double dummy;
int nwave, swave, sawav;
const double wave[];
double awav[];
int stat[];
{
  int status = 0;
  double n, s;
  register int iwave, k, *statp;
  register const double *wavep;
  register double *awavp;
  wavep = wave;
  awavp = awav;
  statp = stat;
  for (iwave = 0; iwave < nwave; iwave++) {
    if (*wavep != 0.0) {
      n = 1.0;
      for (k = 0; k < 4; k++) {
        s = n / (*wavep);
        s *= s;
        n = 2.554e8 / (0.41e14 - s);
        n += 294.981e8 / (1.46e14 - s);
        n += 1.000064328;
      }
      *awavp = (*wavep) / n;
      *(statp++) = 0;
    } else {
      *(statp++) = 1;
      status = 4;
    }
    wavep += swave;
    awavp += sawav;
  }
  return status;
}
```