user: 下面的汇编指令对应的C源代码是什么:

```asm
<calcDiagptableFlex>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x268,%rsp
  movsd  %xmm0,-0x248(%rbp)
  mov    %edi,-0x24c(%rbp)
  mov    %rsi,-0x258(%rbp)
  mov    %rdx,-0x260(%rbp)
  mov    %rcx,-0x268(%rbp)
  mov    %r8d,-0x250(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x250(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x22c(%rbp)
  cmpl   $0x40,-0x250(%rbp)
  setle  %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  movsd  D0(%rip),%xmm0
  comisd -0x248(%rbp),%xmm0
  jbe    L73
  movsd  D26(%rip),%xmm0
  movsd  %xmm0,-0x228(%rbp)
  jmp    L33
L73:
  mov    -0x248(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x228(%rbp)
L33:
  movl   $0x0,-0x230(%rbp)
  jmp    L31
L21:
  mov    -0x230(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x260(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  -0x228(%rbp),%xmm0
  mov    -0x230(%rbp),%eax
  cltq
  movsd  %xmm0,-0x220(%rbp,%rax,8)
  addl   $0x1,-0x230(%rbp)
L31:
  mov    -0x230(%rbp),%eax
  cmp    -0x22c(%rbp),%eax
  jl     L21
  movl   $0x0,-0x234(%rbp)
  jmp    L27
L45:
  mov    -0x234(%rbp),%eax
  imul   -0x250(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x268(%rbp),%rax
  add    %rdx,%rax
  movsd  D22(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x230(%rbp)
  jmp    L85
L63:
  mov    -0x234(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x258(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x230(%rbp),%eax
  sub    $0x1,%eax
  cltq
  movsd  -0x220(%rbp,%rax,8),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  mov    -0x234(%rbp),%edx
  mov    %edx,%ecx
  imul   -0x250(%rbp),%ecx
  mov    -0x230(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0x268(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addl   $0x1,-0x230(%rbp)
L85:
  mov    -0x230(%rbp),%eax
  cmp    -0x250(%rbp),%eax
  jl     L63
  addl   $0x1,-0x234(%rbp)
L27:
  mov    -0x234(%rbp),%eax
  cmp    -0x24c(%rbp),%eax
  jl     L45
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D0
type_guessed: byte[8]
name: parse_data
arguments: data_label: D26
type_guessed: byte[8]
name: parse_data
arguments: data_label: D22
type_guessed: f64

tool: {"D0": [0x16,0x56,0xe7,0x9e,0xaf,0x03,0xd2,0x3c]}

tool: {"D26": [0xc4,0xff,0xf9,0x9f,0xf6,0x44,0x41,0xc0]}

tool: D22: 1

assistant: ```c
void calcDiagptableFlex(double z, int numberOfCategories, double *rptr, double *EIGN, double *diagptable, const int numStates) {
  int i, l;
  double lz, lza[64];
  const int rates = numStates - 1;
  assert(numStates <= 64);
  if (z < 1.0E-15)
    lz = log(1.0E-15);
  else
    lz = log(z);
  for (l = 0; l < rates; l++)
    lza[l] = EIGN[l] * lz;
  for (i = 0; i < numberOfCategories; i++) {
    diagptable[i * numStates] = 1.0;
    for (l = 1; l < numStates; l++)
      diagptable[i * numStates + l] = exp(rptr[i] * lza[l - 1]);
  }
}
```