user: 这段汇编代码用C语言表示是什么样的:

```asm
<odrra_>:
  endbr64
  push   %r15
  pxor   %xmm4,%xmm4
  mov    %rsi,%rax
  mov    %rcx,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  movsd  (%r8),%xmm1
  mov    0x80(%rsp),%r14
  mov    0x88(%rsp),%rcx
  comisd %xmm1,%xmm4
  mov    0x90(%rsp),%rsi
  lea    -0x4(%rcx),%r13
  movl   $0x0,(%rsi)
  movl   $0x1,(%r14)
  ja     L109
  movslq (%rdi),%r12
  cmp    $0x1,%r12d
  jle    L86
  movq   D16(%rip),%xmm3
  mov    $0x1,%ebx
  jmp    L51
L54:
  movsd  (%r8),%xmm1
L51:
  movsd  -0x8(%rax,%rbx,8),%xmm0
  movsd  -0x8(%rdx,%rbx,8),%xmm2
  mov    %ebx,%ebp
  andpd  %xmm3,%xmm0
  andpd  %xmm3,%xmm2
  ucomisd %xmm0,%xmm4
  ja     L16
  sqrtsd %xmm0,%xmm0
L95:
  mulsd  %xmm0,%xmm1
  movsd  (%rax,%rbx,8),%xmm0
  andpd  %xmm3,%xmm0
  ucomisd %xmm0,%xmm4
  ja     L53
  sqrtsd %xmm0,%xmm0
L24:
  mulsd  %xmm0,%xmm1
  comisd %xmm2,%xmm1
  jb     L100
  movq   $0x0,-0x8(%rdx,%rbx,8)
  movslq (%r14),%rsi
  movq   $0x0,-0x8(%r15,%rbx,8)
  mov    %ebp,0x0(%r13,%rsi,4)
  addl   $0x1,(%r14)
L100:
  add    $0x1,%rbx
  cmp    %rbx,%r12
  jne    L54
  movslq (%r14),%rax
  mov    (%rdi),%r12d
  lea    0x0(%r13,%rax,4),%rcx
L86:
  mov    %r12d,(%rcx)
  add    $0x48,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L109:
  movq   D16(%rip),%xmm3
  movslq (%rdi),%r12
  andpd  %xmm3,%xmm1
  mulsd  (%r9),%xmm1
  cmp    $0x1,%r12d
  jle    L86
  mov    $0x1,%eax
  mov    $0x1,%ecx
  nopl   0x0(%rax)
L11:
  movsd  -0x8(%rdx,%rax,8),%xmm0
  andpd  %xmm3,%xmm0
  comisd %xmm0,%xmm1
  jb     L37
  movq   $0x0,-0x8(%rdx,%rax,8)
  movslq %ecx,%rcx
  movq   $0x0,-0x8(%r15,%rax,8)
  mov    %eax,0x0(%r13,%rcx,4)
  mov    (%r14),%esi
  lea    0x1(%rsi),%ecx
  mov    %ecx,(%r14)
L37:
  add    $0x1,%rax
  cmp    %rax,%r12
  jne    L11
  movslq %ecx,%rcx
  mov    (%rdi),%r12d
  lea    0x0(%r13,%rcx,4),%rcx
  jmp    L86
L53:
  mov    %r8,0x28(%rsp)
  mov    %rdx,0x20(%rsp)
  mov    %rax,0x18(%rsp)
  mov    %rdi,0x10(%rsp)
  movaps %xmm3,0x30(%rsp)
  movsd  %xmm2,0x8(%rsp)
  movsd  %xmm1,(%rsp)
  call   <sqrt@plt>
  movapd 0x30(%rsp),%xmm3
  mov    0x28(%rsp),%r8
  pxor   %xmm4,%xmm4
  mov    0x20(%rsp),%rdx
  mov    0x18(%rsp),%rax
  mov    0x10(%rsp),%rdi
  movsd  0x8(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  jmp    L24
L16:
  mov    %r8,0x28(%rsp)
  mov    %rdx,0x20(%rsp)
  mov    %rax,0x18(%rsp)
  mov    %rdi,0x10(%rsp)
  movaps %xmm3,0x30(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  %xmm2,(%rsp)
  call   <sqrt@plt>
  movapd 0x30(%rsp),%xmm3
  mov    0x28(%rsp),%r8
  pxor   %xmm4,%xmm4
  mov    0x20(%rsp),%rdx
  mov    0x18(%rsp),%rax
  mov    0x10(%rsp),%rdi
  movsd  0x8(%rsp),%xmm1
  movsd  (%rsp),%xmm2
  jmp    L95
```

tool_calls: name: disassemble_data
arguments: data_tag: D16
type_infered: qword

tool: D16: 9223372036854775807

assistant: ```c
int odrra_(int *n, double *d__, double *e, double *e2, double *spltol, double *tnrm, int *nsplit, int *isplit, int *info) {
  int i__1;
  double d__1, d__2;
  int i__;
  double tmp1, eabs;
  --isplit;
  --e2;
  --e;
  --d__;
  *info = 0;
  *nsplit = 1;
  if (*spltol < 0.) {
    tmp1 = fabs(*spltol) * *tnrm;
    i__1 = *n - 1;
    for (i__ = 1; i__ <= i__1; ++i__) {
      eabs = (d__1 = e[i__], fabs(d__1));
      if (eabs <= tmp1) {
        e[i__] = 0.;
        e2[i__] = 0.;
        isplit[*nsplit] = i__;
        ++(*nsplit);
      }
    }
  } else {
    i__1 = *n - 1;
    for (i__ = 1; i__ <= i__1; ++i__) {
      eabs = (d__1 = e[i__], fabs(d__1));
      if (eabs <= *spltol * sqrt((d__1 = d__[i__], fabs(d__1))) * sqrt((d__2 = d__[i__ + 1], fabs(d__2)))) {
        e[i__] = 0.;
        e2[i__] = 0.;
        isplit[*nsplit] = i__;
        ++(*nsplit);
      }
    }
  }
  isplit[*nsplit] = *n;
  return 0;
}
```