user: 请从给定的汇编指令推导出C源代码:

```asm
<biquad_lowshelf>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x30,%rsp
  movsd  D129(%rip),%xmm5
  divsd  D85(%rip),%xmm1
  comisd %xmm0,%xmm5
  ja     L57
  movsd  D80(%rip),%xmm0
  call   <pow@plt>
  add    $0x30,%rsp
  mov    %rbp,%rdi
  xor    %r9d,%r9d
  mulsd  %xmm0,%xmm0
  xor    %r8d,%r8d
  mov    $0x1,%ecx
  xor    %edx,%edx
  xor    %esi,%esi
  mov    $0x1,%eax
  pop    %rbp
  jmp    1090 <set_coefficient@plt>
  nopl   0x0(%rax)
L57:
  pxor   %xmm7,%xmm7
  comisd %xmm0,%xmm7
  jbe    L77
  ucomisd D67(%rip),%xmm1
  jae    L85
L27:
  sub    $0x8,%rsp
  mov    %rbp,%rdi
  xor    %r9d,%r9d
  mov    $0x1,%r8d
  push   $0x0
  xor    %ecx,%ecx
  xor    %edx,%edx
  mov    $0x1,%esi
  xor    %eax,%eax
  call   <set_coefficient@plt>
  add    $0x40,%rsp
  pop    %rbp
  ret
L77:
  movsd  %xmm0,0x8(%rsp)
  movsd  D80(%rip),%xmm0
  call   <pow@plt>
  movsd  0x8(%rsp),%xmm3
  pxor   %xmm7,%xmm7
  movapd %xmm0,%xmm2
  comisd %xmm7,%xmm3
  jbe    L27
  lea    0x28(%rsp),%rdi
  mulsd  D116(%rip),%xmm3
  lea    0x20(%rsp),%rsi
  movsd  %xmm2,0x8(%rsp)
  movapd %xmm3,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  D129(%rip),%xmm0
  pxor   %xmm6,%xmm6
  movsd  D62(%rip),%xmm3
  movsd  0x20(%rsp),%xmm7
  divsd  %xmm2,%xmm0
  mulsd  0x28(%rsp),%xmm3
  addsd  %xmm2,%xmm0
  mulsd  %xmm6,%xmm0
  addsd  D78(%rip),%xmm0
  ucomisd %xmm0,%xmm6
  ja     L58
  sqrtsd %xmm0,%xmm0
L21:
  mulsd  %xmm0,%xmm3
  ucomisd %xmm2,%xmm6
  ja     L4
  movapd %xmm2,%xmm6
  sqrtsd %xmm6,%xmm6
L62:
  addsd  %xmm6,%xmm6
  movapd %xmm2,%xmm5
  movapd %xmm2,%xmm8
  mov    %rbp,%rdi
  subsd  D129(%rip),%xmm5
  addsd  %xmm2,%xmm8
  mov    $0x6,%eax
  movsd  D129(%rip),%xmm4
  mulsd  %xmm3,%xmm6
  addsd  %xmm2,%xmm4
  movapd %xmm7,%xmm3
  mulsd  %xmm5,%xmm3
  mulsd  %xmm4,%xmm7
  movapd %xmm4,%xmm0
  subsd  %xmm3,%xmm0
  addsd  %xmm4,%xmm3
  movapd %xmm7,%xmm4
  addsd  %xmm5,%xmm4
  movapd %xmm0,%xmm9
  subsd  %xmm7,%xmm5
  subsd  %xmm6,%xmm9
  addsd  %xmm6,%xmm0
  mulsd  D82(%rip),%xmm4
  add    $0x30,%rsp
  pop    %rbp
  movapd %xmm5,%xmm1
  movapd %xmm3,%xmm5
  addsd  %xmm6,%xmm3
  mulsd  %xmm2,%xmm0
  subsd  %xmm6,%xmm5
  mulsd  %xmm9,%xmm2
  mulsd  %xmm8,%xmm1
  jmp    1090 <set_coefficient@plt>
L58:
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm7
  pxor   %xmm6,%xmm6
  movsd  0x8(%rsp),%xmm3
  jmp    L21
L4:
  movapd %xmm2,%xmm0
  movsd  %xmm7,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm2,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x18(%rsp),%xmm7
  movsd  0x10(%rsp),%xmm3
  movsd  0x8(%rsp),%xmm2
  movapd %xmm0,%xmm6
  jmp    L62
L85:
  movsd  D80(%rip),%xmm0
  call   <pow@plt>
  jmp    L27
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D129
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D85
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D80
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D67
type_guessed: f32[2]
name: extract_symbolic_data
arguments: data_tag: D116
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D62
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D78
type_guessed: f64
name: extract_symbolic_data
arguments: data_tag: D82
type_guessed: f32[2]

tool: D129: 1

tool: D85: 40

tool: D80: 10

tool: {"D67": [0.0,3.49609375]}

tool: D116: 3.141592653589793

tool: D62: 0.5

tool: D78: 2

tool: {"D82": [0.0,-2.0]}

assistant: ```c
void biquad_lowshelf(struct biquad *bq, double frequency, double db_gain) {
  frequency = ({
    __typeof__(0.0) _a = (0.0);
    __typeof__(({
      __typeof__(frequency) _a = (frequency);
      __typeof__(1.0) _b = (1.0);
      _a < _b ? _a : _b;
    })) _b = (({
      __typeof__(frequency) _a = (frequency);
      __typeof__(1.0) _b = (1.0);
      _a < _b ? _a : _b;
    }));
    _a > _b ? _a : _b;
  });
  double A = pow(10.0, db_gain / 40);
  if (frequency == 1) {
    set_coefficient(bq, A * A, 0, 0, 1, 0, 0);
  } else if (frequency > 0) {
    double w0 = 3.14159265358979323846 * frequency;
    double S = 1;
    double alpha = 0.5 * sin(w0) * sqrt((A + 1 / A) * (1 / S - 1) + 2);
    double k = cos(w0);
    double k2 = 2 * sqrt(A) * alpha;
    double a_plus_one = A + 1;
    double a_minus_one = A - 1;
    double b0 = A * (a_plus_one - a_minus_one * k + k2);
    double b1 = 2 * A * (a_minus_one - a_plus_one * k);
    double b2 = A * (a_plus_one - a_minus_one * k - k2);
    double a0 = a_plus_one + a_minus_one * k + k2;
    double a1 = -2 * (a_minus_one + a_plus_one * k);
    double a2 = a_plus_one + a_minus_one * k - k2;
    set_coefficient(bq, b0, b1, b2, a0, a1, a2);
  } else {
    set_coefficient(bq, 1, 0, 0, 1, 0, 0);
  }
}
```