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

```asm
<interval_mul4>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  movq   %xmm0,%rbx
  movq   %xmm1,%r12
  movq   %xmm2,%rbp
  movq   %xmm3,%r13
  mov    %rdi,%r15
  mov    %rsi,%r14
  ucomisd D58(%rip),%xmm0
  setnp  %al
  mov    $0x0,%edx
  cmovne %edx,%eax
  test   %al,%al
  je     L190
  ucomisd D58(%rip),%xmm1
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  je     L190
L205:
  movq   $0x0,(%r15)
  movq   $0x0,(%r14)
L55:
  mov    $0x0,%eax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L190:
  movq   %rbp,%xmm6
  ucomisd D58(%rip),%xmm6
  setnp  %al
  mov    $0x0,%edx
  cmovne %edx,%eax
  test   %al,%al
  je     L19
  movq   %r13,%xmm7
  ucomisd D58(%rip),%xmm7
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L205
L19:
  movq   %rbx,%xmm7
  comisd D58(%rip),%xmm7
  jb     L38
  movq   %rbp,%xmm6
  comisd D58(%rip),%xmm6
  jae    L147
  pxor   %xmm0,%xmm0
  movq   %r13,%xmm5
  comisd %xmm5,%xmm0
  jae    L196
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %r13,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L147:
  movq   %rbp,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %r13,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L196:
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %r13,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L38:
  pxor   %xmm0,%xmm0
  movq   %r12,%xmm5
  comisd %xmm5,%xmm0
  jae    L160
  movq   %rbp,%xmm7
  comisd D58(%rip),%xmm7
  jae    L51
  pxor   %xmm0,%xmm0
  movq   %r13,%xmm6
  comisd %xmm6,%xmm0
  jae    L10
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %r13,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm6,%xmm6
  cvtsi2sd %eax,%xmm6
  movsd  %xmm6,0x8(%rsp)
  movq   %rbp,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  movq   %r13,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  (%r15),%xmm1
  movsd  0x8(%rsp),%xmm6
  comisd %xmm6,%xmm1
  jbe    L202
  movsd  %xmm6,(%r15)
L202:
  comisd (%r14),%xmm0
  jbe    L55
  movsd  %xmm0,(%r14)
  jmp    L55
L160:
  movq   %rbp,%xmm7
  comisd %xmm0,%xmm7
  jae    L34
  pxor   %xmm0,%xmm0
  movq   %r13,%xmm4
  comisd %xmm4,%xmm0
  jae    L108
  movq   %r13,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %rbp,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L34:
  movq   %r13,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L108:
  movq   %r13,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %rbp,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L51:
  movq   %r13,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %r13,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
L10:
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r15)
  movq   %rbp,%xmm1
  movq   %rbx,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,(%r14)
  jmp    L55
```

tool_calls: name: unpack_data
arguments: data_label: D58
type: f64

tool: D58: 0

assistant: ```c
int interval_mul4(x1, x2, y1, y2, low, high)
double x1, x2, y1, y2, *low, *high;
{
  double lo, hi;
  if (((x1 == 0.0) && (x2 == 0.0)) || ((y1 == 0.0) && (y2 == 0.0))) {
    *low = 0.0;
    *high = 0.0;
    return 0;
  }
  if (x1 >= 0.0) {
    if (y1 >= 0.0) {
      *low = mul_lo(x1, y1);
      *high = mul_hi(x2, y2);
      return 0;
    }
    if (y2 <= 0.0) {
      *low = mul_lo(x2, y1);
      *high = mul_hi(x1, y2);
      return 0;
    }
    *low = mul_lo(x2, y1);
    *high = mul_hi(x2, y2);
    return 0;
  }
  if (x2 <= 0.0) {
    if (y1 >= 0.0) {
      *low = mul_lo(x1, y2);
      *high = mul_hi(x2, y1);
      return 0;
    }
    if (y2 <= 0.0) {
      *low = mul_lo(x2, y2);
      *high = mul_hi(x1, y1);
      return 0;
    }
    *low = mul_lo(x1, y2);
    *high = mul_hi(x1, y1);
    return 0;
  }
  if (y1 >= 0.0) {
    *low = mul_lo(x1, y2);
    *high = mul_hi(x2, y2);
    return 0;
  }
  if (y2 <= 0.0) {
    *low = mul_lo(x2, y1);
    *high = mul_hi(x1, y1);
    return 0;
  }
  *low = mul_lo(x2, y1);
  lo = mul_lo(x1, y2);
  *high = mul_hi(x1, y1);
  hi = mul_hi(x2, y2);
  if (lo < *low)
    *low = lo;
  if (hi > *high)
    *high = hi;
  return 0;
}
```