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

```asm
<biquad_lowshelf>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rbx
  movapd %xmm0,%xmm2
  movsd  %xmm0,(%rsp)
  movsd  D56(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L32
  divsd  D70(%rip),%xmm1
  movsd  D3(%rip),%xmm0
  call   <pow@plt>
  mulsd  %xmm0,%xmm0
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x1,%ecx
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  mov    $0x1,%eax
  call   <set_coefficient@plt>
  jmp    L48
L32:
  pxor   %xmm0,%xmm0
  comisd %xmm2,%xmm0
  jbe    L74
  divsd  D70(%rip),%xmm1
  movsd  D3(%rip),%xmm0
  call   <pow@plt>
L0:
  sub    $0x8,%rsp
  push   $0x0
  mov    $0x0,%r9d
  mov    $0x1,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <set_coefficient@plt>
  add    $0x10,%rsp
  jmp    L48
L24:
  call   <sqrt@plt>
  jmp    L76
L30:
  movsd  0x8(%rsp),%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm6
  jmp    L21
L74:
  divsd  D70(%rip),%xmm1
  movsd  D3(%rip),%xmm0
  call   <pow@plt>
  movsd  %xmm0,0x8(%rsp)
  movsd  (%rsp),%xmm6
  comisd D19(%rip),%xmm6
  jbe    L0
  lea    0x18(%rsp),%rdi
  lea    0x10(%rsp),%rsi
  movsd  (%rsp),%xmm0
  mulsd  D26(%rip),%xmm0
  call   <sincos@plt>
  mov    0x10(%rsp),%rbp
  movsd  D75(%rip),%xmm0
  mulsd  0x18(%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  movsd  D56(%rip),%xmm0
  movsd  0x8(%rsp),%xmm7
  divsd  %xmm7,%xmm0
  addsd  %xmm7,%xmm0
  pxor   %xmm1,%xmm1
  mulsd  %xmm1,%xmm0
  addsd  D52(%rip),%xmm0
  ucomisd %xmm0,%xmm1
  ja     L24
  sqrtsd %xmm0,%xmm0
L76:
  mulsd  (%rsp),%xmm0
  movsd  %xmm0,(%rsp)
  pxor   %xmm0,%xmm0
  movsd  0x8(%rsp),%xmm4
  ucomisd %xmm4,%xmm0
  ja     L30
  sqrtsd %xmm4,%xmm4
  movapd %xmm4,%xmm6
L21:
  addsd  %xmm6,%xmm6
  mulsd  (%rsp),%xmm6
  movsd  D56(%rip),%xmm0
  movsd  0x8(%rsp),%xmm10
  movapd %xmm10,%xmm1
  addsd  %xmm0,%xmm1
  movapd %xmm10,%xmm5
  subsd  %xmm0,%xmm5
  movq   %rbp,%xmm3
  mulsd  %xmm5,%xmm3
  movapd %xmm1,%xmm0
  subsd  %xmm3,%xmm0
  movq   %rbp,%xmm7
  mulsd  %xmm1,%xmm7
  addsd  %xmm1,%xmm3
  movapd %xmm7,%xmm4
  addsd  %xmm5,%xmm4
  movapd %xmm0,%xmm2
  subsd  %xmm6,%xmm2
  movapd %xmm10,%xmm8
  addsd  %xmm10,%xmm8
  subsd  %xmm7,%xmm5
  movapd %xmm5,%xmm1
  addsd  %xmm6,%xmm0
  mulsd  %xmm10,%xmm0
  movapd %xmm3,%xmm5
  subsd  %xmm6,%xmm5
  mulsd  D36(%rip),%xmm4
  addsd  %xmm6,%xmm3
  mulsd  %xmm10,%xmm2
  mulsd  %xmm8,%xmm1
  mov    %rbx,%rdi
  mov    $0x6,%eax
  call   <set_coefficient@plt>
L48:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D56
data_type: f64
name: parse_data
arguments: data_tag: D70
data_type: f64
name: parse_data
arguments: data_tag: D3
data_type: f64
name: parse_data
arguments: data_tag: D19
data_type: f64[2]
name: parse_data
arguments: data_tag: D26
data_type: f64
name: parse_data
arguments: data_tag: D75
data_type: f64
name: parse_data
arguments: data_tag: D52
data_type: f64
name: parse_data
arguments: data_tag: D36
data_type: byte[8]

tool: D56: 1

tool: D70: 40

tool: D3: 10

tool: {"D19": [0.0,3.141592653589793]}

tool: D26: 3.141592653589793

tool: D75: 0.5

tool: D52: 2

tool: {"D36": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0]}

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