user: Please show me the C implementation that matches the assembly code listed below:

```asm
<plotEllipseRect>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edi,%ebp
  mov    %esi,%r14d
  mov    %edx,%ebx
  mov    %ecx,%r13d
  mov    %edx,%edi
  sub    %ebp,%edi
  call   <abs@plt>
  mov    %rax,%r12
  mov    %r13d,%edi
  sub    %r14d,%edi
  call   <abs@plt>
  mov    %rax,0x18(%rsp)
  mov    %rax,%rdx
  and    $0x1,%edx
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %r12,%xmm2
  movsd  D1(%rip),%xmm0
  subsd  %xmm2,%xmm0
  mulsd  D9(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movapd %xmm0,%xmm6
  mulsd  %xmm1,%xmm6
  movsd  %xmm6,0x8(%rsp)
  lea    0x1(%rdx),%rax
  imul   %r12,%rax
  mov    %rax,%rcx
  imul   %r12,%rcx
  shl    $0x2,%rcx
  pxor   %xmm5,%xmm5
  cvtsi2sd %rcx,%xmm5
  movsd  %xmm5,0x10(%rsp)
  sub    %r12,%rax
  imul   %r12,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  addsd  %xmm5,%xmm6
  addsd  %xmm6,%xmm1
  movsd  %xmm1,(%rsp)
  cmp    %ebp,%ebx
  jge    L32
  mov    %ebx,%ebp
  lea    (%rbx,%r12,1),%ebx
L32:
  mov    0x18(%rsp),%rdi
  lea    0x1(%rdi),%rcx
  mov    %rcx,%rax
  shr    $0x3f,%rax
  add    %rcx,%rax
  sar    %rax
  cmp    %r14d,%r13d
  cmovle %r13d,%r14d
  add    %eax,%r14d
  mov    %r14d,%r15d
  sub    %edx,%r14d
  imul   %r12,%r12
  lea    0x0(,%r12,8),%r13
  mov    %rdi,%r12
  imul   %rdi,%r12
  shl    $0x3,%r12
  jmp    L66
L35:
  add    $0x1,%ebp
  sub    $0x1,%ebx
  pxor   %xmm0,%xmm0
  cvtsi2sd %r12,%xmm0
  addsd  0x8(%rsp),%xmm0
  movsd  %xmm0,0x8(%rsp)
  movsd  (%rsp),%xmm5
  addsd  %xmm0,%xmm5
  movsd  %xmm5,(%rsp)
L82:
  cmp    %ebx,%ebp
  jg     L24
L66:
  mov    %r15d,%esi
  mov    %ebx,%edi
  call   <setPixel@plt>
  mov    %r15d,%esi
  mov    %ebp,%edi
  call   <setPixel@plt>
  mov    %r14d,%esi
  mov    %ebp,%edi
  call   <setPixel@plt>
  mov    %r14d,%esi
  mov    %ebx,%edi
  call   <setPixel@plt>
  movsd  (%rsp),%xmm3
  movapd %xmm3,%xmm0
  addsd  %xmm3,%xmm0
  movsd  0x10(%rsp),%xmm4
  comisd %xmm0,%xmm4
  jb     L67
  add    $0x1,%r15d
  sub    $0x1,%r14d
  pxor   %xmm1,%xmm1
  cvtsi2sd %r13,%xmm1
  addsd  %xmm4,%xmm1
  movsd  %xmm1,0x10(%rsp)
  addsd  %xmm1,%xmm3
  movsd  %xmm3,(%rsp)
L67:
  comisd 0x8(%rsp),%xmm0
  jae    L35
  movsd  (%rsp),%xmm7
  movapd %xmm7,%xmm0
  addsd  %xmm7,%xmm0
  comisd 0x10(%rsp),%xmm0
  jbe    L82
  jmp    L35
L24:
  mov    %r15d,%eax
  sub    %r14d,%eax
  cltq
  cmp    %rax,0x18(%rsp)
  jl     L85
  movslq %r15d,%r13
  movslq %r14d,%rax
  sub    %rax,%r13
  mov    %r15d,%r12d
  lea    (%r14,%r15,1),%eax
  mov    %eax,0x8(%rsp)
L7:
  mov    0x8(%rsp),%eax
  sub    %r12d,%eax
  mov    %eax,(%rsp)
  lea    -0x1(%rbp),%r15d
  mov    %r12d,%esi
  mov    %r15d,%edi
  call   <setPixel@plt>
  mov    %r12d,%esi
  add    $0x1,%r12d
  lea    0x1(%rbx),%r14d
  mov    %r14d,%edi
  call   <setPixel@plt>
  mov    (%rsp),%esi
  mov    %r15d,%edi
  call   <setPixel@plt>
  mov    (%rsp),%esi
  mov    %r14d,%edi
  call   <setPixel@plt>
  add    $0x2,%r13
  cmp    %r13,0x18(%rsp)
  jge    L7
L85:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: parse_data
arguments: label: D1
type_guessed: f64
name: parse_data
arguments: label: D9
type_guessed: f64

tool: D1: 1

tool: D9: 4

assistant: ```c
void plotEllipseRect(int x0, int y0, int x1, int y1) {
  long a = abs(x1 - x0), b = abs(y1 - y0), b1 = b & 1;
  double dx = 4 * (1.0 - a) * b * b, dy = 4 * (b1 + 1) * a * a;
  double err = dx + dy + b1 * a * a, e2;
  if (x0 > x1) {
    x0 = x1;
    x1 += a;
  }
  if (y0 > y1)
    y0 = y1;
  y0 += (b + 1) / 2;
  y1 = y0 - b1;
  a = 8 * a * a;
  b1 = 8 * b * b;
  do {
    setPixel(x1, y0);
    setPixel(x0, y0);
    setPixel(x0, y1);
    setPixel(x1, y1);
    e2 = 2 * err;
    if (e2 <= dy) {
      y0++;
      y1--;
      err += dy += a;
    }
    if (e2 >= dx || 2 * err > dy) {
      x0++;
      x1--;
      err += dx += b1;
    }
  } while (x0 <= x1);
  while (y0 - y1 <= b) {
    setPixel(x0 - 1, y0);
    setPixel(x1 + 1, y0++);
    setPixel(x0 - 1, y1);
    setPixel(x1 + 1, y1--);
  }
}
```