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

```asm
<get_bounds>:
  endbr64
  push   %rbx
  movapd %xmm0,%xmm10
  movapd %xmm1,%xmm9
  movapd %xmm2,%xmm8
  mov    %rdi,%rbx
  sub    $0x50,%rsp
  movsd  0x60(%rsp),%xmm13
  comisd D49(%rip),%xmm13
  jae    L86
  movsd  D73(%rip),%xmm0
  comisd %xmm13,%xmm0
  jb     L71
L86:
  movapd %xmm8,%xmm12
  movapd %xmm8,%xmm3
  xorpd  D18(%rip),%xmm12
  movapd %xmm12,%xmm11
L10:
  movapd %xmm10,%xmm0
  movapd %xmm9,%xmm1
  subsd  %xmm12,%xmm8
  addsd  %xmm12,%xmm0
  addsd  %xmm11,%xmm1
  subsd  %xmm11,%xmm3
  addsd  %xmm0,%xmm8
  movsd  %xmm0,(%rbx)
  addsd  %xmm1,%xmm3
  movsd  %xmm1,0x8(%rbx)
  movsd  %xmm8,0x10(%rbx)
  movsd  %xmm3,0x18(%rbx)
  add    $0x50,%rsp
  pop    %rbx
  ret
  nopl   (%rax)
L71:
  movapd %xmm3,%xmm0
  movsd  %xmm1,0x8(%rsp)
  movapd %xmm5,%xmm1
  movsd  %xmm13,0x60(%rsp)
  movsd  %xmm7,0x48(%rsp)
  movsd  %xmm2,0x40(%rsp)
  movsd  %xmm5,0x38(%rsp)
  movsd  %xmm3,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm10,(%rsp)
  call   <fmin@plt>
  movsd  (%rsp),%xmm10
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm4
  subsd  %xmm10,%xmm0
  movapd %xmm6,%xmm1
  movsd  %xmm0,0x30(%rsp)
  movapd %xmm4,%xmm0
  call   <fmin@plt>
  movsd  0x8(%rsp),%xmm9
  movsd  0x20(%rsp),%xmm3
  movsd  0x38(%rsp),%xmm5
  subsd  %xmm9,%xmm0
  movapd %xmm5,%xmm1
  movsd  %xmm0,0x28(%rsp)
  movapd %xmm3,%xmm0
  call   <fmax@plt>
  movsd  (%rsp),%xmm10
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm4
  subsd  %xmm10,%xmm0
  movapd %xmm6,%xmm1
  movsd  %xmm10,0x20(%rsp)
  movsd  %xmm0,(%rsp)
  movapd %xmm4,%xmm0
  call   <fmax@plt>
  movsd  0x8(%rsp),%xmm9
  movsd  0x48(%rsp),%xmm7
  pxor   %xmm2,%xmm2
  movapd %xmm0,%xmm3
  movsd  0x60(%rsp),%xmm13
  subsd  %xmm9,%xmm3
  movapd %xmm7,%xmm0
  movsd  %xmm9,0x18(%rsp)
  movapd %xmm13,%xmm1
  movsd  %xmm7,0x8(%rsp)
  movsd  %xmm3,0x10(%rsp)
  call   <contains_angle@plt>
  movsd  0x8(%rsp),%xmm7
  movsd  0x60(%rsp),%xmm13
  test   %rax,%rax
  movsd  0x10(%rsp),%xmm3
  movsd  0x18(%rsp),%xmm9
  movsd  0x20(%rsp),%xmm10
  movsd  0x28(%rsp),%xmm11
  movsd  0x30(%rsp),%xmm12
  movsd  0x40(%rsp),%xmm8
  je     L72
  movapd %xmm8,%xmm2
  minsd  %xmm12,%xmm2
  movapd %xmm2,%xmm12
  movapd %xmm8,%xmm2
  maxsd  (%rsp),%xmm2
  movsd  %xmm2,(%rsp)
L72:
  movapd %xmm13,%xmm1
  movsd  D70(%rip),%xmm2
  movapd %xmm7,%xmm0
  movsd  %xmm8,0x38(%rsp)
  movsd  %xmm9,0x30(%rsp)
  movsd  %xmm10,0x28(%rsp)
  movsd  %xmm3,0x20(%rsp)
  movsd  %xmm11,0x18(%rsp)
  movsd  %xmm12,0x10(%rsp)
  movsd  %xmm13,0x60(%rsp)
  movsd  %xmm7,0x8(%rsp)
  call   <contains_angle@plt>
  movsd  0x8(%rsp),%xmm7
  movsd  0x60(%rsp),%xmm13
  test   %rax,%rax
  movsd  0x10(%rsp),%xmm12
  movsd  0x18(%rsp),%xmm11
  movsd  0x20(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm10
  movsd  0x30(%rsp),%xmm9
  movsd  0x38(%rsp),%xmm8
  je     L56
  movapd %xmm8,%xmm2
  minsd  %xmm11,%xmm2
  movapd %xmm2,%xmm11
  movapd %xmm8,%xmm2
  maxsd  %xmm3,%xmm2
  movapd %xmm2,%xmm3
L56:
  movapd %xmm13,%xmm1
  movsd  D76(%rip),%xmm2
  movapd %xmm7,%xmm0
  movsd  %xmm8,0x38(%rsp)
  movsd  %xmm9,0x30(%rsp)
  movsd  %xmm10,0x28(%rsp)
  movsd  %xmm3,0x20(%rsp)
  movsd  %xmm11,0x18(%rsp)
  movsd  %xmm12,0x10(%rsp)
  movsd  %xmm13,0x60(%rsp)
  movsd  %xmm7,0x8(%rsp)
  call   <contains_angle@plt>
  movsd  0x8(%rsp),%xmm7
  movsd  0x60(%rsp),%xmm13
  test   %rax,%rax
  movsd  0x10(%rsp),%xmm12
  movsd  0x18(%rsp),%xmm11
  movsd  0x20(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm10
  movsd  0x30(%rsp),%xmm9
  movsd  0x38(%rsp),%xmm8
  je     L3
  movapd %xmm8,%xmm0
  xorpd  D18(%rip),%xmm0
  movapd %xmm0,%xmm2
  maxsd  (%rsp),%xmm0
  minsd  %xmm12,%xmm2
  movsd  %xmm0,(%rsp)
  movapd %xmm2,%xmm12
L3:
  movapd %xmm13,%xmm1
  movsd  D33(%rip),%xmm2
  movapd %xmm7,%xmm0
  movsd  %xmm9,0x28(%rsp)
  movsd  %xmm10,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm11,0x10(%rsp)
  movsd  %xmm12,0x8(%rsp)
  movsd  %xmm8,0x30(%rsp)
  call   <contains_angle@plt>
  movsd  0x8(%rsp),%xmm12
  movsd  0x10(%rsp),%xmm11
  test   %rax,%rax
  movsd  0x18(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm10
  movsd  0x28(%rsp),%xmm9
  je     L44
  movsd  0x30(%rsp),%xmm8
  xorpd  D18(%rip),%xmm8
  movapd %xmm8,%xmm5
  comisd %xmm3,%xmm8
  minsd  %xmm11,%xmm5
  movapd %xmm5,%xmm11
  jbe    L44
  movapd %xmm8,%xmm3
  movsd  (%rsp),%xmm8
  jmp    L10
  nopw   0x0(%rax,%rax,1)
L44:
  movsd  (%rsp),%xmm8
  jmp    L10
```

tool_calls: name: retrieve_data
arguments: label: D49
datatype: f64[2]
name: retrieve_data
arguments: label: D73
datatype: f32[2]
name: retrieve_data
arguments: label: D18
datatype: f32[4]
name: retrieve_data
arguments: label: D70
datatype: f64
name: retrieve_data
arguments: label: D76
datatype: f64
name: retrieve_data
arguments: label: D33
datatype: f64

tool: {"D49": [360.0,-360.0]}

tool: {"D73": [0.0,-3.8515625]}

tool: {"D18": [0.0,-0.0,0.0,0.0]}

tool: D70: 90

tool: D76: 180

tool: D33: 270

assistant: ```c
void get_bounds(double center_x, double center_y, double radius, double start_x, double start_y, double end_x, double end_y, double start_angle, double arc_angle, double *bounds) {
  double x_min;
  double y_min;
  double x_max;
  double y_max;
  if (arc_angle >= 360.0 || arc_angle <= -360.0) {
    x_min = -radius;
    y_min = -radius;
    x_max = radius;
    y_max = radius;
  } else {
    x_min = fmin(start_x, end_x) - center_x;
    y_min = fmin(start_y, end_y) - center_y;
    x_max = fmax(start_x, end_x) - center_x;
    y_max = fmax(start_y, end_y) - center_y;
    if (contains_angle(start_angle, arc_angle, 0.0)) {
      if (x_min > radius) {
        x_min = radius;
      }
      if (x_max < radius) {
        x_max = radius;
      }
    }
    if (contains_angle(start_angle, arc_angle, 90.0)) {
      if (y_min > radius) {
        y_min = radius;
      }
      if (y_max < radius) {
        y_max = radius;
      }
    }
    if (contains_angle(start_angle, arc_angle, 180.0)) {
      if (x_min > -radius) {
        x_min = -radius;
      }
      if (x_max < -radius) {
        x_max = -radius;
      }
    }
    if (contains_angle(start_angle, arc_angle, 270.0)) {
      if (y_min > -radius) {
        y_min = -radius;
      }
      if (y_max < -radius) {
        y_max = -radius;
      }
    }
  }
  bounds[0] = center_x + x_min;
  bounds[1] = center_y + y_min;
  bounds[2] = bounds[0] + (x_max - x_min);
  bounds[3] = bounds[1] + (y_max - y_min);
}
```