user: 请将这段汇编代码片段转换成等效的C代码：

```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 D27(%rip),%xmm13
  jae    L42
  movsd  D64(%rip),%xmm0
  comisd %xmm13,%xmm0
  jb     L17
L42:
  movapd %xmm8,%xmm12
  movapd %xmm8,%xmm3
  xorpd  D58(%rip),%xmm12
  movapd %xmm12,%xmm11
L22:
  movapd %xmm10,%xmm0
  movapd %xmm9,%xmm1
  subsd  %xmm12,%xmm8
  addsd  %xmm12,%xmm0
  addsd  %xmm11,%xmm1
  subsd  %xmm11,%xmm3
  addsd  %xmm0,%xmm8
  movapd %xmm0,%xmm2
  addsd  %xmm1,%xmm3
  unpcklpd %xmm1,%xmm2
  movups %xmm2,(%rbx)
  movsd  %xmm8,0x10(%rbx)
  movsd  %xmm3,0x18(%rbx)
  add    $0x50,%rsp
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L17:
  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     L57
  movapd %xmm8,%xmm5
  minsd  %xmm12,%xmm5
  movapd %xmm5,%xmm12
  movapd %xmm8,%xmm5
  maxsd  (%rsp),%xmm5
  movsd  %xmm5,(%rsp)
L57:
  movapd %xmm13,%xmm1
  movsd  D33(%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     L87
  movapd %xmm8,%xmm4
  movapd %xmm8,%xmm6
  minsd  %xmm11,%xmm4
  maxsd  %xmm3,%xmm6
  movapd %xmm4,%xmm11
  movapd %xmm6,%xmm3
L87:
  movapd %xmm13,%xmm1
  movsd  D4(%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     L31
  movapd %xmm8,%xmm0
  xorpd  D58(%rip),%xmm0
  movapd %xmm0,%xmm5
  maxsd  (%rsp),%xmm0
  minsd  %xmm12,%xmm5
  movsd  %xmm0,(%rsp)
  movapd %xmm5,%xmm12
L31:
  movapd %xmm13,%xmm1
  movsd  D77(%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     L63
  movsd  0x30(%rsp),%xmm8
  xorpd  D58(%rip),%xmm8
  movapd %xmm8,%xmm4
  comisd %xmm3,%xmm8
  minsd  %xmm11,%xmm4
  movapd %xmm4,%xmm11
  jbe    L63
  movapd %xmm8,%xmm3
  movsd  (%rsp),%xmm8
  jmp    L22
  nop
L63:
  movsd  (%rsp),%xmm8
  jmp    L22
```

tool_calls: name: parse_data
arguments: label: D27
data_type: f64[2]
name: parse_data
arguments: label: D64
data_type: f32[2]
name: parse_data
arguments: label: D58
data_type: f32[4]
name: parse_data
arguments: label: D33
data_type: f64
name: parse_data
arguments: label: D4
data_type: f64
name: parse_data
arguments: label: D77
data_type: f64

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

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

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

tool: D33: 90

tool: D4: 180

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