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

```asm
<ComputeHueQuadrature>:
  endbr64
  sub    $0x58,%rsp
  movapd %xmm0,%xmm1
  mov    %rdi,%rcx
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  mov    D87(%rip),%rax
  mov    %rax,(%rsp)
  mov    D3(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    D58(%rip),%rax
  mov    %rax,0x10(%rsp)
  mov    D94(%rip),%rax
  mov    %rax,0x18(%rsp)
  movq   $0x0,0x20(%rsp)
  mov    D22(%rip),%rax
  mov    %rax,0x28(%rsp)
  mov    D71(%rip),%rax
  mov    %rax,0x30(%rsp)
  mov    D108(%rip),%rax
  mov    %rax,0x38(%rsp)
  comisd D63(%rip),%xmm0
  jb     L81
  movsd  D61(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L73
L81:
  comisd D61(%rip),%xmm1
  jb     L65
  movsd  D130(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L70
L65:
  comisd D130(%rip),%xmm1
  jb     L35
  movsd  D56(%rip),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  movzbl %al,%eax
  lea    (%rax,%rax,2),%eax
  mov    $0x2,%edx
  mov    $0x3,%edi
  cmovbe %edi,%edx
  jmp    L33
L73:
  mov    $0x1,%eax
  mov    $0x0,%edx
  jmp    L33
L70:
  mov    $0x2,%eax
  mov    $0x1,%edx
  jmp    L33
L35:
  mov    $0x0,%eax
  mov    $0x3,%edx
L33:
  movslq %edx,%rdx
  movsd  (%rsp,%rdx,8),%xmm4
  cltq
  movsd  (%rsp,%rax,8),%xmm6
  movsd  0x20(%rsp,%rdx,8),%xmm5
  movsd  0x20(%rsp,%rax,8),%xmm0
  movapd %xmm1,%xmm3
  subsd  %xmm5,%xmm3
  movapd %xmm6,%xmm2
  subsd  %xmm4,%xmm2
  mulsd  %xmm3,%xmm2
  movapd %xmm0,%xmm7
  subsd  %xmm5,%xmm7
  divsd  %xmm7,%xmm2
  addsd  %xmm4,%xmm2
  movsd  %xmm2,(%rsi)
  movapd %xmm3,%xmm2
  mulsd  D22(%rip),%xmm2
  divsd  %xmm4,%xmm2
  subsd  %xmm1,%xmm0
  divsd  %xmm6,%xmm0
  divsd  %xmm4,%xmm3
  addsd  %xmm3,%xmm0
  movapd %xmm2,%xmm1
  divsd  %xmm0,%xmm1
  addsd  %xmm5,%xmm1
  movsd  %xmm1,(%rcx)
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L80
  add    $0x58,%rsp
  ret
L80:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: label: D87
data_type: f64
name: retrieve_data
arguments: label: D3
data_type: f64
name: retrieve_data
arguments: label: D58
data_type: f64
name: retrieve_data
arguments: label: D94
data_type: f64
name: retrieve_data
arguments: label: D22
data_type: f64
name: retrieve_data
arguments: label: D71
data_type: byte[8]
name: retrieve_data
arguments: label: D108
data_type: byte[8]
name: retrieve_data
arguments: label: D63
data_type: f64[2]
name: retrieve_data
arguments: label: D61
data_type: f64[2]
name: retrieve_data
arguments: label: D130
data_type: f64[2]
name: retrieve_data
arguments: label: D56
data_type: f64

tool: D87: 0.8

tool: D3: 0.7

tool: D58: 1

tool: D94: 1.2

tool: D22: 100

tool: {"D71": [0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x40]}

tool: {"D108": [0x00,0x00,0x00,0x00,0x00,0xc0,0x72,0x40]}

tool: {"D63": [20.14,90.0]}

tool: {"D61": [90.0,164.25]}

tool: {"D130": [164.25,237.53]}

tool: D56: 237.53

assistant: ```c
void ComputeHueQuadrature(double h, double *H, double *e) {
  double e_tab[] = {0.8, 0.7, 1.0, 1.2};
  double H_tab[] = {0, 100, 200, 300};
  int p1, p2;
  double e1, e2, h1, h2;
  if (h >= 20.14 && h < 90.0) {
    p1 = 0;
    p2 = 1;
  } else if (h >= 90.0 && h < 164.25) {
    p1 = 1;
    p2 = 2;
  } else if (h >= 164.25 && h < 237.53) {
    p1 = 2;
    p2 = 3;
  } else {
    p1 = 3;
    p2 = 0;
  }
  e1 = e_tab[p1];
  e2 = e_tab[p2];
  h1 = H_tab[p1];
  h2 = H_tab[p2];
  *e = e1 + ((e2 - e1) * (h - h1) / (h2 - h1));
  *H = h1 + (100. * (h - h1) / e1) / ((h - h1) / e1 + (h2 - h) / e2);
}
```