user: What would the C source look like for the assembly code provided here?

```asm
<gauinv>:
  endbr64
  movsd  D128(%rip),%xmm3
  movapd %xmm0,%xmm1
  comisd %xmm3,%xmm0
  jbe    L44
  movsd  D155(%rip),%xmm0
  subsd  %xmm1,%xmm0
L44:
  movsd  D48(%rip),%xmm2
  comisd %xmm0,%xmm2
  ja     L6
  ucomisd %xmm3,%xmm0
  movl   $0x0,(%rdi)
  jp     L36
  jne    L36
  pxor   %xmm0,%xmm0
  ret
  nopw   0x0(%rax,%rax,1)
L36:
  mulsd  %xmm0,%xmm0
  sub    $0x18,%rsp
  movsd  D155(%rip),%xmm2
  movsd  %xmm1,0x8(%rsp)
  divsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  call   <log@plt>
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  D63(%rip),%xmm2
  mov    D128(%rip),%rax
  movapd %xmm0,%xmm4
  movsd  D67(%rip),%xmm0
  movsd  0x8(%rsp),%xmm1
  mulsd  %xmm4,%xmm2
  movq   %rax,%xmm3
  mulsd  %xmm4,%xmm0
  comisd %xmm1,%xmm3
  addsd  D157(%rip),%xmm2
  subsd  D57(%rip),%xmm0
  mulsd  %xmm4,%xmm2
  mulsd  %xmm4,%xmm0
  addsd  D66(%rip),%xmm2
  subsd  D61(%rip),%xmm0
  mulsd  %xmm4,%xmm2
  mulsd  %xmm4,%xmm0
  addsd  D102(%rip),%xmm2
  subsd  D155(%rip),%xmm0
  mulsd  %xmm4,%xmm2
  mulsd  %xmm4,%xmm0
  addsd  D94(%rip),%xmm2
  subsd  D82(%rip),%xmm0
  divsd  %xmm2,%xmm0
  addsd  %xmm4,%xmm0
  jbe    L0
  xorpd  D115(%rip),%xmm0
L0:
  add    $0x18,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L6:
  movl   $0x1,(%rdi)
  pxor   %xmm0,%xmm0
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D128
data_type: f64
name: extract_symbolic_data
arguments: label: D155
data_type: f64
name: extract_symbolic_data
arguments: label: D48
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D63
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D67
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D157
data_type: f64
name: extract_symbolic_data
arguments: label: D57
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D66
data_type: f64
name: extract_symbolic_data
arguments: label: D61
data_type: f64
name: extract_symbolic_data
arguments: label: D102
data_type: f64
name: extract_symbolic_data
arguments: label: D94
data_type: byte[8]
name: extract_symbolic_data
arguments: label: D82
data_type: f64
name: extract_symbolic_data
arguments: label: D115
data_type: f32[4]

tool: D128: 0.5

tool: D155: 1

tool: {"D48": [0x23,0x42,0x92,0x0c,0xa1,0x9c,0xc7,0x3b]}

tool: {"D63": [0x88,0x45,0x07,0xda,0xc3,0x96,0x6f,0x3f]}

tool: {"D67": [0x62,0x1a,0xed,0xc3,0xae,0xc8,0x07,0xbf]}

tool: D157: 0.10353775285

tool: {"D57": [0x30,0xa8,0x87,0x73,0xcc,0xe9,0x94,0x3f]}

tool: D66: 0.531103462366

tool: D61: 0.342242088547

tool: D102: 0.588581560495

tool: {"D94": [0x54,0xf7,0xcc,0x9d,0xe6,0x6e,0xb9,0x3f]}

tool: D82: 0.322232431088

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

assistant: ```c
double gauinv(double p, int *ifault) {
  static double p0 = -0.322232431088, p1 = -1.0, p2 = -0.342242088547, p3 = -0.204231210245e-01, p4 = -0.453642210148e-04;
  static double q0 = 0.99348462606e-01, q1 = 0.588581560495, q2 = 0.531103462366, q3 = 0.103537752850, q4 = 0.38560700634e-02;
  double tem, ps, yi;
  tem = 0.0;
  ps = p;
  if (ps > 0.5)
    ps = 1.0 - ps;
  *ifault = 1;
  if (ps < 1.0e-20)
    return tem;
  *ifault = 0;
  if (ps == 0.5)
    return tem;
  yi = sqrt(log(1.0 / (ps * ps)));
  tem = yi + ((((yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0) / ((((yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);
  if (p < 0.5)
    tem = -tem;
  return tem;
}
```