user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<leigen>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rsi,%rbx
  movsd  (%rdi),%xmm7
  movsd  0x20(%rdi),%xmm3
  movsd  0x40(%rdi),%xmm5
  movapd %xmm7,%xmm0
  addsd  %xmm3,%xmm0
  movapd %xmm0,%xmm14
  addsd  %xmm5,%xmm14
  movsd  %xmm14,0x10(%rsp)
  movsd  0x8(%rdi),%xmm11
  movsd  0x18(%rdi),%xmm2
  movsd  0x10(%rdi),%xmm9
  movsd  0x30(%rdi),%xmm8
  movsd  0x28(%rdi),%xmm0
  movsd  0x38(%rdi),%xmm10
  movapd %xmm0,%xmm6
  mulsd  %xmm10,%xmm6
  movapd %xmm3,%xmm4
  mulsd  %xmm5,%xmm4
  movapd %xmm11,%xmm1
  mulsd  %xmm2,%xmm1
  movapd %xmm9,%xmm12
  mulsd  %xmm8,%xmm12
  addsd  %xmm12,%xmm1
  addsd  %xmm6,%xmm1
  movapd %xmm7,%xmm12
  mulsd  %xmm3,%xmm12
  subsd  %xmm12,%xmm1
  subsd  %xmm4,%xmm1
  movapd %xmm7,%xmm12
  mulsd  %xmm5,%xmm12
  subsd  %xmm12,%xmm1
  movapd %xmm14,%xmm13
  mulsd  %xmm14,%xmm13
  movapd %xmm1,%xmm12
  mulsd  D76(%rip),%xmm12
  movapd %xmm13,%xmm15
  addsd  %xmm12,%xmm15
  movsd  %xmm15,0x8(%rsp)
  mulsd  %xmm8,%xmm0
  mulsd  %xmm2,%xmm5
  subsd  %xmm5,%xmm0
  mulsd  %xmm11,%xmm0
  subsd  %xmm6,%xmm4
  mulsd  %xmm7,%xmm4
  addsd  %xmm4,%xmm0
  mulsd  %xmm10,%xmm2
  mulsd  %xmm8,%xmm3
  subsd  %xmm3,%xmm2
  mulsd  %xmm9,%xmm2
  addsd  %xmm2,%xmm0
  mulsd  D127(%rip),%xmm0
  movapd %xmm14,%xmm2
  addsd  %xmm14,%xmm2
  mulsd  %xmm14,%xmm2
  mulsd  %xmm14,%xmm2
  mulsd  D56(%rip),%xmm14
  mulsd  %xmm14,%xmm1
  addsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  xorpd  D186(%rip),%xmm0
  movq   %xmm0,%r13
  pxor   %xmm0,%xmm0
  comisd %xmm15,%xmm0
  ja     L126
  movsd  0x8(%rsp),%xmm7
  ucomisd D154(%rip),%xmm7
  jp     L101
  jne    L101
  movq   $0x0,0x10(%rsi)
  movq   $0x0,0x8(%rsi)
  movq   $0x0,(%rsi)
L89:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L126:
  movapd %xmm15,%xmm0
  call   <fabs@plt>
  pxor   %xmm5,%xmm5
  cvtsi2sd %eax,%xmm5
  movq   %xmm5,%rbp
  movsd  D142(%rip),%xmm1
  movapd %xmm5,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm1
  movsd  D126(%rip),%xmm0
  movq   %r13,%xmm7
  mulsd  %xmm7,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rsp)
  movq   %rbp,%xmm0
  call   <sqrt@plt>
  mov    %eax,%r12d
  movsd  0x8(%rsp),%xmm0
  call   <fabs@plt>
  mov    %eax,%ebp
  movsd  0x8(%rsp),%xmm6
  movapd %xmm6,%xmm0
  mulsd  %xmm6,%xmm0
  addsd  D222(%rip),%xmm0
  call   <sqrt@plt>
  lea    0x0(%rbp,%rax,1),%edi
  call   <log@plt>
  mov    %eax,%edx
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm6
  comisd %xmm0,%xmm6
  seta   %al
  movzbl %al,%eax
  comisd %xmm6,%xmm0
  seta   %cl
  movzbl %cl,%ecx
  sub    %ecx,%eax
  imul   %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  pxor   %xmm5,%xmm5
  cvtsi2sd %edx,%xmm5
  movq   %xmm5,%rbp
  movapd %xmm5,%xmm0
  call   <exp@plt>
  movq   %xmm0,%r13
  movq   %rbp,%xmm0
  xorpd  D186(%rip),%xmm0
  call   <exp@plt>
  movapd %xmm0,%xmm2
  movsd  0x10(%rsp),%xmm3
  divsd  D76(%rip),%xmm3
  add    %r12d,%r12d
  movslq %r12d,%rax
  imul   $0x55555556,%rax,%rax
  shr    $0x20,%rax
  sar    $0x1f,%r12d
  sub    %r12d,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  D126(%rip),%xmm0
  movq   %r13,%xmm1
  subsd  %xmm2,%xmm1
  mulsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm3
  movq   %xmm3,%rbp
  jmp    L85
L101:
  movsd  D142(%rip),%xmm1
  movsd  0x8(%rsp),%xmm0
  call   <pow@plt>
  movq   %r13,%xmm3
  mulsd  D126(%rip),%xmm3
  movapd %xmm3,%xmm5
  mulsd  %xmm0,%xmm5
  movsd  %xmm5,0x18(%rsp)
  movsd  0x8(%rsp),%xmm0
  call   <sqrt@plt>
  add    %eax,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  pxor   %xmm6,%xmm6
  cvtsi2sd %edx,%xmm6
  movsd  %xmm6,0x8(%rsp)
  movsd  0x18(%rsp),%xmm5
  comisd D180(%rip),%xmm5
  jb     L169
  movsd  D222(%rip),%xmm0
  comisd %xmm5,%xmm0
  jae    L141
L169:
  movsd  0x18(%rsp),%xmm0
  call   <fabs@plt>
  mov    %eax,%ebp
  movsd  0x18(%rsp),%xmm0
  mulsd  %xmm0,%xmm0
  subsd  D222(%rip),%xmm0
  call   <sqrt@plt>
  lea    0x0(%rbp,%rax,1),%edi
  call   <log@plt>
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  pxor   %xmm7,%xmm7
  cvtsi2sd %edx,%xmm7
  movq   %xmm7,%r12
  movapd %xmm7,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rbp
  movq   %r12,%xmm0
  xorpd  D186(%rip),%xmm0
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm1
  mulsd  D126(%rip),%xmm1
  movq   %rbp,%xmm4
  addsd  %xmm0,%xmm4
  movapd %xmm4,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  0x10(%rsp),%xmm1
  divsd  D76(%rip),%xmm1
  addsd  %xmm1,%xmm0
  movq   %xmm0,%rbp
L85:
  mov    %rbp,(%rbx)
  movq   $0x0,0x10(%rbx)
  movq   $0x0,0x8(%rbx)
  pxor   %xmm0,%xmm0
  movq   %rbp,%xmm6
  comisd %xmm6,%xmm0
  jbe    L74
  mov    D154(%rip),%r12
L124:
  mov    %rbp,0x8(%rbx)
  mov    %r12,(%rbx)
L36:
  movsd  0x8(%rbx),%xmm0
  movsd  0x10(%rbx),%xmm1
  comisd %xmm0,%xmm1
  jbe    L74
  movsd  %xmm1,0x8(%rbx)
  movsd  %xmm0,0x10(%rbx)
L74:
  movsd  (%rbx),%xmm1
  movsd  0x8(%rbx),%xmm0
  comisd %xmm1,%xmm0
  jbe    L89
  movsd  %xmm1,0x8(%rbx)
  movsd  %xmm0,(%rbx)
  jmp    L89
L141:
  movapd %xmm5,%xmm0
  call   <asin@plt>
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  pxor   %xmm6,%xmm6
  cvtsi2sd %edx,%xmm6
  movq   %xmm6,%r13
  movapd %xmm6,%xmm0
  subsd  D89(%rip),%xmm0
  call   <sin@plt>
  movsd  0x10(%rsp),%xmm4
  divsd  D76(%rip),%xmm4
  movsd  %xmm4,0x10(%rsp)
  mulsd  0x8(%rsp),%xmm0
  addsd  %xmm4,%xmm0
  movq   %xmm0,%rbp
  pxor   %xmm0,%xmm0
  movq   %rbp,%xmm6
  comisd %xmm6,%xmm0
  ja     L137
L70:
  mov    %rbp,(%rbx)
  movq   %r13,%xmm0
  call   <sin@plt>
  mulsd  0x8(%rsp),%xmm0
  addsd  0x10(%rsp),%xmm0
  movq   %xmm0,%r12
  pxor   %xmm0,%xmm0
  movq   %r12,%xmm5
  comisd %xmm5,%xmm0
  ja     L174
L0:
  mov    %r12,0x8(%rbx)
  movq   %r13,%xmm0
  addsd  D89(%rip),%xmm0
  call   <sin@plt>
  mulsd  0x8(%rsp),%xmm0
  addsd  0x10(%rsp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L113
  movsd  %xmm0,0x10(%rbx)
L80:
  movq   %r12,%xmm7
  movq   %rbp,%xmm5
  comisd %xmm5,%xmm7
  jbe    L36
  jmp    L124
L137:
  movq   %xmm0,%rbp
  jmp    L70
L174:
  movq   %xmm0,%r12
  jmp    L0
L113:
  movq   $0x0,0x10(%rbx)
  jmp    L80
```

tool_calls: name: disassemble_data
arguments: data_tag: D76
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D127
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D56
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D186
datatype: byte[16]
name: disassemble_data
arguments: data_tag: D154
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D142
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D126
datatype: f64
name: disassemble_data
arguments: data_tag: D222
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D180
datatype: byte[16]
name: disassemble_data
arguments: data_tag: D89
datatype: byte[8]

tool: {"D76": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

tool: {"D127": [0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x40]}

tool: {"D56": [0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x40]}

tool: {"D186": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D154": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D142": [0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0xbf]}

tool: D126: 0.5

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

tool: {"D180": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf,0x65,0x73,0x2d,0x38,0x52,0xc1,0x00,0x40]}

tool: {"D89": [0x65,0x73,0x2d,0x38,0x52,0xc1,0x00,0x40]}

assistant: ```c
void leigen(double *m, double *l) {
  double b, c, d, n, o, s, sc, t;
  long neg = 0;
  b = m[0] + m[4] + m[8];
  c = m[1] * m[3] + m[2] * m[6] + m[5] * m[7] - m[0] * m[4] - m[4] * m[8] - m[0] * m[8];
  d = m[0] * (m[4] * m[8] - m[5] * m[7]) + m[1] * (m[5] * m[6] - m[3] * m[8]) + m[2] * (m[3] * m[7] - m[4] * m[6]);
  n = b * b + 3 * c;
  o = -(2 * b * b * b + 9 * b * c + 27 * d);
  if (n < 0) {
    n = fabs(n);
    sc = 0.5 * o * pow(n, -1.5);
    t = 2 * sqrt(n) / 3;
    s = log(fabs(sc) + sqrt(sc * sc + 1)) * ((sc > 0) - (sc < 0)) / 3;
    l[0] = b / 3 - t * 0.5 * (exp(s) - exp(-s));
    l[1] = l[2] = 0;
  } else if (!n) {
    l[0] = l[1] = l[2] = 0;
    return;
  } else {
    sc = 0.5 * o * pow(n, -1.5);
    t = 2 * sqrt(n) / 3;
    if (sc >= -1 && sc <= 1) {
      s = asin(sc) / 3;
      l[0] = t * sin(s - 2 * 3.14159265358979323846264338327950 / 3) + b / 3;
      if (l[0] < 0)
        l[0] = 0;
      l[1] = t * sin(s) + b / 3;
      if (l[1] < 0)
        l[1] = 0;
      l[2] = t * sin(s + 2 * 3.14159265358979323846264338327950 / 3) + b / 3;
      if (l[2] < 0)
        l[2] = 0;
    } else {
      s = log(fabs(sc) + sqrt(sc * sc - 1)) / 3;
      l[0] = t * 0.5 * (exp(s) + exp(-s)) + b / 3;
      l[1] = l[2] = 0;
    }
  }
  if (l[0] < l[1]) {
    d = l[1];
    l[1] = l[0];
    l[0] = d;
  }
  if (l[1] < l[2]) {
    d = l[1];
    l[1] = l[2];
    l[2] = d;
  }
  if (l[0] < l[1]) {
    d = l[1];
    l[1] = l[0];
    l[0] = d;
  }
}
```