user: Converte this assembly snippet into its equivalent C code:

```asm
<fisTriangleMf>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  movsd  %xmm0,0x8(%rsp)
  mov    (%rdi),%r12
  mov    0x8(%rdi),%rbx
  mov    0x10(%rdi),%rbp
  movq   %r12,%xmm3
  movq   %rbx,%xmm4
  comisd %xmm4,%xmm3
  ja     L23
  movq   %rbp,%xmm6
  comisd %xmm6,%xmm4
  ja     L132
  ucomisd %xmm6,%xmm4
  setnp  %al
  mov    $0x0,%ecx
  cmovne %ecx,%eax
  movq   %r12,%xmm7
  ucomisd %xmm4,%xmm7
  setnp  %dl
  cmovne %ecx,%edx
  test   %dl,%dl
  je     L108
  test   %al,%al
  je     L108
  movsd  0x8(%rsp),%xmm2
  ucomisd %xmm2,%xmm7
  jp     L9
  movsd  D53(%rip),%xmm0
  je     L188
L9:
  pxor   %xmm0,%xmm0
  jmp    L188
L23:
  lea    D22(%rip),%rdi
  call   <fisError@plt>
  movq   %rbx,%xmm7
  movq   %rbp,%xmm4
  comisd %xmm4,%xmm7
  ja     L132
  ucomisd %xmm4,%xmm7
  jp     L248
  je     L76
L248:
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm0
  movq   %r12,%xmm6
  subsd  %xmm6,%xmm0
  movq   %rbx,%xmm1
  subsd  %xmm6,%xmm1
  divsd  %xmm1,%xmm0
  movq   %rbp,%xmm1
  subsd  %xmm7,%xmm1
  movq   %rbp,%xmm2
  movq   %rbx,%xmm4
  subsd  %xmm4,%xmm2
  divsd  %xmm2,%xmm1
  comisd %xmm0,%xmm1
  jbe    L14
  comisd D68(%rip),%xmm0
  ja     L188
  pxor   %xmm0,%xmm0
  jmp    L188
L132:
  lea    D60(%rip),%rdi
  call   <fisError@plt>
  movq   %rbx,%xmm3
  movq   %rbp,%xmm5
  ucomisd %xmm5,%xmm3
  setnp  %al
  mov    $0x0,%edx
  cmovne %edx,%eax
  movq   %r12,%xmm7
  ucomisd %xmm3,%xmm7
  jp     L40
  jne    L40
L200:
  movq   %rbp,%xmm1
  movq   %rbx,%xmm3
  subsd  %xmm3,%xmm1
  movq   %rbp,%xmm0
  movsd  0x8(%rsp),%xmm6
  subsd  %xmm6,%xmm0
  divsd  %xmm1,%xmm0
  movsd  D53(%rip),%xmm1
  comisd %xmm3,%xmm6
  jae    L116
  pxor   %xmm1,%xmm1
L116:
  mulsd  %xmm1,%xmm0
  movsd  D53(%rip),%xmm1
  movq   %rbp,%xmm6
  comisd 0x8(%rsp),%xmm6
  jae    L180
  pxor   %xmm1,%xmm1
L180:
  mulsd  %xmm1,%xmm0
L188:
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L108:
  movq   %r12,%xmm5
  movq   %rbx,%xmm6
  ucomisd %xmm6,%xmm5
  jp     L40
  je     L200
L40:
  test   %al,%al
  je     L248
L76:
  movsd  0x8(%rsp),%xmm7
  movapd %xmm7,%xmm0
  movq   %r12,%xmm6
  subsd  %xmm6,%xmm0
  movq   %rbx,%xmm1
  subsd  %xmm6,%xmm1
  divsd  %xmm1,%xmm0
  movsd  D53(%rip),%xmm1
  comisd %xmm6,%xmm7
  jae    L135
  pxor   %xmm1,%xmm1
L135:
  mulsd  %xmm1,%xmm0
  movsd  D53(%rip),%xmm1
  movq   %rbx,%xmm7
  comisd 0x8(%rsp),%xmm7
  jae    L194
  pxor   %xmm1,%xmm1
L194:
  mulsd  %xmm1,%xmm0
  jmp    L188
L14:
  comisd D68(%rip),%xmm1
  jbe    L111
  minsd  %xmm1,%xmm0
  jmp    L188
L111:
  pxor   %xmm0,%xmm0
  jmp    L188
```

tool_calls: name: extract_symbolic_data
arguments: tag: D53
type_infered: f64
name: extract_symbolic_data
arguments: tag: D22
type_infered: string
name: extract_symbolic_data
arguments: tag: D68
type_infered: f64
name: extract_symbolic_data
arguments: tag: D60
type_infered: string

tool: D53: 1

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

tool: D68: 0

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

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)));
}
```