user: 请将以下的汇编代码转换成C语言代码:

```asm
<expint>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  movsd  %xmm0,-0x98(%rbp)
  movsd  %xmm1,-0xa0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  comisd -0x98(%rbp),%xmm0
  ja     L292
  pxor   %xmm0,%xmm0
  comisd -0xa0(%rbp),%xmm0
  ja     L292
  lea    -0x80(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,%rdi
  movq   %rax,%xmm0
  call   <modf@plt>
  test   %rax,%rax
  je     L77
L292:
  movsd  D140(%rip),%xmm0
  jmp    L185
L77:
  pxor   %xmm0,%xmm0
  ucomisd -0xa0(%rbp),%xmm0
  jp     L168
  pxor   %xmm0,%xmm0
  ucomisd -0xa0(%rbp),%xmm0
  jne    L168
  movsd  D14(%rip),%xmm0
  comisd -0x98(%rbp),%xmm0
  jbe    L168
  movsd  D140(%rip),%xmm0
  jmp    L185
L168:
  pxor   %xmm0,%xmm0
  ucomisd -0x98(%rbp),%xmm0
  jp     L16
  pxor   %xmm0,%xmm0
  ucomisd -0x98(%rbp),%xmm0
  jne    L16
  movsd  -0xa0(%rbp),%xmm0
  movq   D110(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  divsd  -0xa0(%rbp),%xmm0
  jmp    L185
L16:
  pxor   %xmm0,%xmm0
  ucomisd -0xa0(%rbp),%xmm0
  jp     L293
  pxor   %xmm0,%xmm0
  ucomisd -0xa0(%rbp),%xmm0
  jne    L293
  movsd  -0x98(%rbp),%xmm0
  movsd  D49(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D49(%rip),%xmm0
  divsd  %xmm1,%xmm0
  jmp    L185
L293:
  movsd  -0xa0(%rbp),%xmm0
  comisd D149(%rip),%xmm0
  jbe    L105
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movl   $0x0,-0x84(%rbp)
  jmp    L136
L99:
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x84(%rbp),%xmm0
  addsd  -0x98(%rbp),%xmm0
  mulsd  -0x70(%rbp),%xmm0
  movsd  -0x68(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x84(%rbp),%xmm0
  addsd  -0x98(%rbp),%xmm0
  mulsd  -0x60(%rbp),%xmm0
  movsd  -0x58(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x84(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x68(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x84(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x58(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x18(%rbp),%xmm0
  divsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x78(%rbp),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L193
  movsd  -0x78(%rbp),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  je     L132
L193:
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x10(%rbp),%xmm0
  comisd D237(%rip),%xmm0
  jb     L80
  movsd  -0x70(%rbp),%xmm0
  movsd  D237(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movsd  D237(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x60(%rbp),%xmm0
  movsd  D237(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x58(%rbp),%xmm0
  movsd  D237(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
L80:
  addl   $0x1,-0x84(%rbp)
L136:
  cmpl   $0x14c,-0x84(%rbp)
  jle    L99
  jmp    L14
L132:
  nop
L14:
  movsd  -0xa0(%rbp),%xmm0
  movq   D110(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movsd  -0x78(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  jmp    L93
L105:
  movsd  D19(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movq   D110(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  mov    -0xa0(%rbp),%rax
  movq   %rax,%xmm0
  call   <log@plt>
  movapd %xmm0,%xmm1
  movsd  -0xa8(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L117
L31:
  movsd  -0x40(%rbp),%xmm0
  movq   D110(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x40(%rbp),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x38(%rbp),%xmm1
  movsd  -0x78(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x78(%rbp),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  jp     L140
  movsd  -0x78(%rbp),%xmm0
  ucomisd -0x48(%rbp),%xmm0
  je     L241
L140:
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x38(%rbp),%xmm1
  movsd  D49(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
L117:
  movsd  D172(%rip),%xmm0
  comisd -0x38(%rbp),%xmm0
  ja     L31
  jmp    L39
L241:
  nop
L39:
  movsd  D49(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  jmp    L265
L262:
  movsd  -0xa0(%rbp),%xmm0
  movq   D110(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  movq   %xmm0,%rax
  movsd  -0xa0(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x78(%rbp),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  divsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x38(%rbp),%xmm1
  movsd  D49(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
L265:
  movsd  -0x98(%rbp),%xmm0
  comisd -0x38(%rbp),%xmm0
  ja     L262
L93:
  movsd  -0x78(%rbp),%xmm0
L185:
  movq   %xmm0,%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L104
  call   <__stack_chk_fail@plt>
L104:
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D140
type_guessed: f32[2]
name: disassemble_data
arguments: tag: D14
type_guessed: f32[2]
name: disassemble_data
arguments: tag: D110
type_guessed: f32[2]
name: disassemble_data
arguments: tag: D49
type_guessed: f64
name: disassemble_data
arguments: tag: D149
type_guessed: f32[4]
name: disassemble_data
arguments: tag: D237
type_guessed: byte[16]
name: disassemble_data
arguments: tag: D19
type_guessed: byte[8]
name: disassemble_data
arguments: tag: D172
type_guessed: f32[2]

tool: {"D140": [0.0,-1.875]}

tool: {"D14": [0.0,2.0]}

tool: {"D110": [0.0,-0.0]}

tool: D49: 1

tool: {"D149": [0.0,2.125,215.4105682373047,80943.4375]}

tool: {"D237": [0x1b,0x69,0x57,0x43,0xb8,0x17,0x9e,0x47,0x19,0xb6,0x6f,0xfc,0x8c,0x78,0xe2,0x3f]}

tool: {"D19": [0x19,0xb6,0x6f,0xfc,0x8c,0x78,0xe2,0x3f]}

tool: {"D172": [0.0,3.8251953125]}

assistant: ```c
double expint(double n, double z) {
  double y;
  {
    double junk;
    if (n < 0 || z < 0 || modf(n, &junk))
      return -1.0;
    if (z == 0 && n < 2)
      return -1.0;
  }
  if (n == 0)
    return exp(-z) / z;
  if (z == 0)
    return 1 / (n - 1);
  if (z > 3) {
    double n0, n1, n2, n3, d0, d1, d2, d3, y_prev = 1;
    int i;
    n0 = 0;
    n1 = 1;
    d0 = 1;
    d1 = z;
    for (i = 0; i < 333; i++) {
      n2 = n0 * (n + i) + n1;
      d2 = d0 * (n + i) + d1;
      n3 = n1 * (1 + i) + n2 * z;
      d3 = d1 * (1 + i) + d2 * z;
      y = n3 / d3;
      if (y == y_prev)
        break;
      y_prev = y;
      n0 = n2;
      n1 = n3;
      d0 = d2;
      d1 = d3;
      if (d3 >= 1.0E+37) {
        n0 /= 1.0E+37;
        n1 /= 1.0E+37;
        d0 /= 1.0E+37;
        d1 /= 1.0E+37;
      }
    }
    y = exp(-z) * y;
  } else {
    double euler_constant = .577215664901532860606512;
    double y_prev = 0;
    double t, m;
    y = -euler_constant - log(z);
    t = 1;
    for (m = 1; m < 333; m++) {
      t = -t * z / m;
      y = y - t / m;
      if (y == y_prev)
        break;
      y_prev = y;
    }
    for (m = 1; m < n; m++)
      y = (exp(-z) - z * y) / m;
  }
  return y;
}
```