user: Please show me the C implementation that matches the assembly code listed below:

```asm
<inverse_error_func>:
  endbr64
  sub    $0x38,%rsp
  movapd %xmm0,%xmm2
  movsd  D274(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L153
  movsd  D356(%rip),%xmm4
  comisd %xmm4,%xmm2
  ja     L153
  ucomisd %xmm0,%xmm2
  mov    $0x0,%edx
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L11
  ucomisd %xmm4,%xmm2
  setnp  %dl
  cmove  %edx,%eax
  test   %al,%al
  jne    L11
  comisd %xmm0,%xmm2
  movsd  D87(%rip),%xmm0
  jbe    L176
  comisd %xmm2,%xmm0
  ja     L91
L176:
  comisd %xmm0,%xmm2
  movsd  D425(%rip),%xmm0
  jb     L32
  comisd %xmm2,%xmm0
  jb     L32
  movapd %xmm2,%xmm0
  movsd  D85(%rip),%xmm5
  movsd  D98(%rip),%xmm1
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm2,%xmm0
  mulsd  %xmm0,%xmm1
  movapd %xmm0,%xmm3
  mulsd  %xmm5,%xmm3
  addsd  D226(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  subsd  D256(%rip),%xmm1
  addsd  %xmm5,%xmm3
  mulsd  %xmm0,%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D179(%rip),%xmm1
  addsd  D411(%rip),%xmm3
  mulsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm3
  subsd  D218(%rip),%xmm3
  mulsd  %xmm0,%xmm3
  addsd  %xmm4,%xmm3
  divsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movq   D55(%rip),%xmm5
  movapd %xmm0,%xmm3
  movaps %xmm5,(%rsp)
L44:
  movsd  0x18(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm2
  xorpd  %xmm1,%xmm5
  movapd %xmm5,%xmm4
  mulsd  %xmm1,%xmm4
  jmp    L171
  nopl   0x0(%rax)
L153:
  lea    D330(%rip),%rdi
  call   <printf@plt>
  mov    D274(%rip),%rax
  add    $0x38,%rsp
  movq   %rax,%xmm0
  jmp    10b0 <log@plt>
  nopl   0x0(%rax)
L32:
  comisd %xmm0,%xmm2
  ja     L53
L139:
  movq   D55(%rip),%xmm5
  pxor   %xmm3,%xmm3
  movsd  D55(%rip),%xmm4
  movapd %xmm3,%xmm1
  movaps %xmm5,(%rsp)
L171:
  subsd  %xmm2,%xmm3
  movapd %xmm4,%xmm0
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm1,0x28(%rsp)
  movsd  %xmm3,0x18(%rsp)
  call   <gp_exp@plt>
  movsd  D34(%rip),%xmm4
  movsd  0x18(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm6
  movapd %xmm0,%xmm3
  movsd  0x20(%rsp),%xmm2
  xorpd  %xmm1,%xmm6
  movapd %xmm6,%xmm0
  subsd  %xmm2,%xmm3
  movsd  %xmm2,0x28(%rsp)
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <gp_exp@plt>
  movsd  D34(%rip),%xmm4
  movsd  0x20(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm7
  movapd %xmm0,%xmm3
  movsd  0x28(%rsp),%xmm2
  xorpd  %xmm1,%xmm7
  movapd %xmm7,%xmm0
  subsd  %xmm2,%xmm3
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x20(%rsp)
  call   <gp_exp@plt>
  movsd  D34(%rip),%xmm4
  movsd  0x20(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm4
  divsd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x20(%rsp)
  call   <erf@plt>
  movsd  0x20(%rsp),%xmm1
  movapd (%rsp),%xmm7
  movapd %xmm0,%xmm3
  movsd  0x28(%rsp),%xmm2
  xorpd  %xmm1,%xmm7
  movsd  %xmm1,(%rsp)
  movapd %xmm7,%xmm0
  subsd  %xmm2,%xmm3
  mulsd  %xmm1,%xmm0
  movsd  %xmm3,0x18(%rsp)
  call   <gp_exp@plt>
  movsd  0x18(%rsp),%xmm3
  movsd  (%rsp),%xmm1
  movsd  D34(%rip),%xmm2
  mulsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm3
  subsd  %xmm3,%xmm1
L41:
  movapd %xmm1,%xmm0
  add    $0x38,%rsp
  ret
  nopl   (%rax)
L53:
  comisd %xmm2,%xmm4
  jbe    L139
  movapd %xmm4,%xmm0
  movsd  %xmm2,0x18(%rsp)
  subsd  %xmm2,%xmm0
  mulsd  D382(%rip),%xmm0
  call   <log@plt>
  movq   D55(%rip),%xmm6
  mov    D356(%rip),%rax
  movapd %xmm0,%xmm1
  ucomisd D55(%rip),%xmm1
  movsd  0x18(%rsp),%xmm2
  movaps %xmm6,(%rsp)
  xorpd  %xmm1,%xmm6
  movq   %rax,%xmm4
  movapd %xmm6,%xmm0
  ja     L13
  sqrtsd %xmm0,%xmm0
L63:
  movsd  D287(%rip),%xmm1
  movsd  D180(%rip),%xmm3
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm0,%xmm1
  addsd  D420(%rip),%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D379(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  subsd  D126(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm3,%xmm0
  subsd  D91(%rip),%xmm1
  addsd  %xmm4,%xmm0
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movapd (%rsp),%xmm5
  movapd %xmm0,%xmm3
  jmp    L44
L91:
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x18(%rsp)
  addsd  %xmm4,%xmm0
  mulsd  D382(%rip),%xmm0
  call   <log@plt>
  movq   D55(%rip),%xmm5
  mov    D356(%rip),%rax
  movapd %xmm0,%xmm1
  ucomisd D55(%rip),%xmm1
  movsd  0x18(%rsp),%xmm2
  movaps %xmm5,(%rsp)
  xorpd  %xmm1,%xmm5
  movq   %rax,%xmm4
  movapd %xmm5,%xmm0
  ja     L108
  sqrtsd %xmm0,%xmm0
L0:
  movsd  D287(%rip),%xmm1
  movsd  D180(%rip),%xmm3
  movsd  %xmm2,0x20(%rsp)
  mulsd  %xmm0,%xmm1
  addsd  D420(%rip),%xmm1
  mulsd  %xmm0,%xmm3
  addsd  D379(%rip),%xmm3
  mulsd  %xmm0,%xmm1
  subsd  D126(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mulsd  %xmm3,%xmm0
  subsd  D91(%rip),%xmm1
  xorpd  (%rsp),%xmm1
  addsd  %xmm4,%xmm0
  divsd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <erf@plt>
  movsd  0x18(%rsp),%xmm1
  movapd (%rsp),%xmm6
  movsd  0x20(%rsp),%xmm2
  movapd %xmm0,%xmm3
  xorpd  %xmm1,%xmm6
  movapd %xmm6,%xmm4
  mulsd  %xmm1,%xmm4
  jmp    L171
  nopl   0x0(%rax,%rax,1)
L11:
  pxor   %xmm0,%xmm0
  movsd  %xmm2,(%rsp)
  call   <log@plt>
  movsd  (%rsp),%xmm2
  xorpd  D55(%rip),%xmm2
  movapd %xmm2,%xmm1
  mulsd  %xmm0,%xmm1
  jmp    L41
L108:
  movsd  %xmm2,0x18(%rsp)
  call   <sqrt@plt>
  mov    D356(%rip),%rax
  movsd  0x18(%rsp),%xmm2
  movq   %rax,%xmm4
  jmp    L0
L13:
  movsd  %xmm2,0x18(%rsp)
  call   <sqrt@plt>
  mov    D356(%rip),%rax
  movsd  0x18(%rsp),%xmm2
  movq   %rax,%xmm4
  jmp    L63
```

tool_calls: name: parse_data
arguments: tag: D274
type: f32[2]
name: parse_data
arguments: tag: D356
type: f64
name: parse_data
arguments: tag: D87
type: byte[8]
name: parse_data
arguments: tag: D425
type: f64
name: parse_data
arguments: tag: D85
type: f64
name: parse_data
arguments: tag: D98
type: byte[8]
name: parse_data
arguments: tag: D226
type: f64
name: parse_data
arguments: tag: D256
type: f64
name: parse_data
arguments: tag: D179
type: f64
name: parse_data
arguments: tag: D411
type: f64
name: parse_data
arguments: tag: D218
type: f64
name: parse_data
arguments: tag: D55
type: f32[4]
name: parse_data
arguments: tag: D330
type: string
name: parse_data
arguments: tag: D34
type: byte[8]
name: parse_data
arguments: tag: D382
type: f32[2]
name: parse_data
arguments: tag: D287
type: f64
name: parse_data
arguments: tag: D180
type: f64
name: parse_data
arguments: tag: D420
type: f64
name: parse_data
arguments: tag: D379
type: f64
name: parse_data
arguments: tag: D126
type: f64
name: parse_data
arguments: tag: D91
type: f64

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

tool: D356: 1

tool: {"D87": [0x66,0x66,0x66,0x66,0x66,0x66,0xe6,0xbf]}

tool: D425: 0.7

tool: D85: 0.012229801

tool: {"D98": [0x82,0x6f,0x28,0xe9,0x52,0xfd,0xc1,0xbf]}

tool: D226: 0.914624893

tool: D256: 1.645349621

tool: D179: 0.886226899

tool: D411: 1.442710462

tool: D218: 2.118377725

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

tool: D330: inverse_error_func: The value out of the range of the function

tool: {"D34": [0x6d,0x9b,0x42,0x50,0xd7,0x0d,0xf2,0x3f]}

tool: {"D382": [0.0,1.75]}

tool: D287: 1.641345311

tool: D180: 1.6370678

tool: D420: 3.429567803

tool: D379: 3.5438892

tool: D126: 1.624906493

tool: D91: 1.970840454

assistant: ```c
double inverse_error_func(double y) {
  double x = 0.0;
  double z = 0.0;
  double y0 = 0.7;
  static const double a[4] = {0.886226899, -1.645349621, 0.914624893, -0.140543331};
  static const double b[4] = {-2.118377725, 1.442710462, -0.329097515, 0.012229801};
  static const double c[4] = {-1.970840454, -1.624906493, 3.429567803, 1.641345311};
  static const double d[2] = {3.543889200, 1.637067800};
  if ((y < -1.0) || (1.0 < y)) {
    printf("inverse_error_func: The value out of the range of the function");
    x = log(-1.0);
    return (x);
  } else if ((y == -1.0) || (1.0 == y)) {
    x = -y * log(0.0);
    return (x);
  } else if ((-1.0 < y) && (y < -y0)) {
    z = sqrt(-log((1.0 + y) / 2.0));
    x = -(((c[3] * z + c[2]) * z + c[1]) * z + c[0]) / ((d[1] * z + d[0]) * z + 1.0);
  } else {
    if ((-y0 <= y) && (y <= y0)) {
      z = y * y;
      x = y * (((a[3] * z + a[2]) * z + a[1]) * z + a[0]) / ((((b[3] * z + b[3]) * z + b[1]) * z + b[0]) * z + 1.0);
    } else if ((y0 < y) && (y < 1.0)) {
      z = sqrt(-log((1.0 - y) / 2.0));
      x = (((c[3] * z + c[2]) * z + c[1]) * z + c[0]) / ((d[1] * z + d[0]) * z + 1.0);
    }
  }
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  x = x - (erf(x) - y) / (2.0 / sqrt(3.14159265358979323846) * gp_exp(-x * x));
  return (x);
}
```