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

```asm
<fisTriangleMf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  movsd  %xmm0,-0x28(%rbp)
  mov    %rdi,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L292
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  call   <fisError@plt>
L292:
  movsd  -0x10(%rbp),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L277
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <fisError@plt>
L277:
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L286
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jne    L286
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L286
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jne    L286
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jp     L273
  movsd  -0x28(%rbp),%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jne    L273
  movsd  D30(%rip),%xmm0
  jmp    L265
L273:
  pxor   %xmm0,%xmm0
  jmp    L265
L286:
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L287
  movsd  -0x18(%rbp),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jne    L287
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x10(%rbp),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd -0x10(%rbp),%xmm0
  jb     L46
  movsd  D30(%rip),%xmm0
  jmp    L6
L46:
  pxor   %xmm0,%xmm0
L6:
  mulsd  %xmm0,%xmm1
  movsd  -0x8(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jb     L293
  movsd  D30(%rip),%xmm0
  jmp    L71
L293:
  pxor   %xmm0,%xmm0
L71:
  mulsd  %xmm1,%xmm0
  jmp    L265
L287:
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jp     L264
  movsd  -0x10(%rbp),%xmm0
  ucomisd -0x8(%rbp),%xmm0
  jne    L264
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  movapd %xmm1,%xmm2
  subsd  -0x18(%rbp),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  -0x28(%rbp),%xmm0
  comisd -0x18(%rbp),%xmm0
  jb     L169
  movsd  D30(%rip),%xmm0
  jmp    L59
L169:
  pxor   %xmm0,%xmm0
L59:
  mulsd  %xmm0,%xmm1
  movsd  -0x10(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jb     L50
  movsd  D30(%rip),%xmm0
  jmp    L251
L50:
  pxor   %xmm0,%xmm0
L251:
  mulsd  %xmm1,%xmm0
  jmp    L265
L264:
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  movapd %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  subsd  -0x10(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  comisd %xmm2,%xmm0
  jbe    L49
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  seta   %al
  jmp    L99
L49:
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  subsd  -0x10(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  seta   %al
L99:
  test   %al,%al
  je     L232
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  movapd %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  subsd  -0x10(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  comisd %xmm2,%xmm0
  jbe    L83
  movsd  -0x28(%rbp),%xmm0
  subsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  subsd  -0x18(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L265
L83:
  movsd  -0x8(%rbp),%xmm0
  subsd  -0x28(%rbp),%xmm0
  movsd  -0x8(%rbp),%xmm1
  subsd  -0x10(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L265
L232:
  pxor   %xmm0,%xmm0
L265:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D24
type_infered: string
name: read_data
arguments: data_label: D3
type_infered: string
name: read_data
arguments: data_label: D30
type_infered: f64

tool: D24: Illegal parameters in fisTriangleMf() --> a > b

tool: D3: Illegal parameters in fisTriangleMf() --> b > c

tool: D30: 1

assistant: ```c
double fisTriangleMf(double x, double *params) {
  double a = params[0], b = params[1], c = params[2];
  if (a > b)
    fisError("Illegal parameters in fisTriangleMf() --> a > b");
  if (b > c)
    fisError("Illegal parameters in fisTriangleMf() --> b > c");
  if (a == b && b == c)
    return (x == a);
  if (a == b)
    return ((c - x) / (c - b) * (b <= x) * (x <= c));
  if (b == c)
    return ((x - a) / (b - a) * (a <= x) * (x <= b));
  return ((((((x - a) / (b - a)) < ((c - x) / (c - b)) ? ((x - a) / (b - a)) : ((c - x) / (c - b)))) > (0) ? ((((x - a) / (b - a)) < ((c - x) / (c - b)) ? ((x - a) / (b - a)) : ((c - x) / (c - b)))) : (0)));
}
```