user: Demonstrate the C code that generates the assembly output below:

```asm
<interval_mul4>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movsd  %xmm0,-0x18(%rbp)
  movsd  %xmm1,-0x20(%rbp)
  movsd  %xmm2,-0x28(%rbp)
  movsd  %xmm3,-0x30(%rbp)
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jp     L183
  pxor   %xmm0,%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jne    L183
  pxor   %xmm0,%xmm0
  ucomisd -0x20(%rbp),%xmm0
  jp     L183
  pxor   %xmm0,%xmm0
  ucomisd -0x20(%rbp),%xmm0
  je     L269
L183:
  pxor   %xmm0,%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jp     L123
  pxor   %xmm0,%xmm0
  ucomisd -0x28(%rbp),%xmm0
  jne    L123
  pxor   %xmm0,%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L123
  pxor   %xmm0,%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L123
L269:
  mov    -0x38(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x40(%rbp),%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L123:
  movsd  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L177
  movsd  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L76
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L76:
  pxor   %xmm0,%xmm0
  comisd -0x30(%rbp),%xmm0
  jb     L79
  movsd  -0x28(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L79:
  movsd  -0x28(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L177:
  pxor   %xmm0,%xmm0
  comisd -0x20(%rbp),%xmm0
  jb     L99
  movsd  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L53
  movsd  -0x30(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L53:
  pxor   %xmm0,%xmm0
  comisd -0x30(%rbp),%xmm0
  jb     L184
  movsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L184:
  movsd  -0x30(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L99:
  movsd  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L107
  movsd  -0x30(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L107:
  pxor   %xmm0,%xmm0
  comisd -0x30(%rbp),%xmm0
  jb     L46
  movsd  -0x28(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L83
L46:
  movsd  -0x28(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_lo@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x28(%rbp),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x30(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x2,%eax
  call   <mul_hi@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  comisd -0x10(%rbp),%xmm0
  jbe    L104
  mov    -0x38(%rbp),%rax
  movsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L104:
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  -0x8(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L189
  mov    -0x40(%rbp),%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
L189:
  mov    $0x0,%eax
L83:
  leave
  ret
```

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