user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<c_bidir_reflectivity_hapke>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  movsd  %xmm2,-0x68(%rbp)
  movsd  %xmm3,-0x70(%rbp)
  movsd  %xmm4,-0x78(%rbp)
  movsd  -0x68(%rbp),%xmm0
  mulsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  D81(%rip),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  -0x70(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  D81(%rip),%xmm0
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movsd  %xmm0,-0x88(%rbp)
  mov    -0x78(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mulsd  -0x88(%rbp),%xmm0
  addsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  movq   %rax,%xmm0
  call   <acos@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  movsd  -0x50(%rbp),%xmm1
  movsd  D28(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D81(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D10(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D81(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  mulsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x48(%rbp),%xmm1
  movsd  D28(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <tan@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm1
  addsd  -0x38(%rbp),%xmm1
  movsd  -0x80(%rbp),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D77(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D81(%rip),%xmm0
  subsd  -0x20(%rbp),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,%edi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x70(%rbp),%xmm2
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x68(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm1
  movsd  -0x18(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x68(%rbp),%xmm2
  movsd  D81(%rip),%xmm0
  addsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x20(%rbp),%xmm1
  movsd  D29(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x28(%rbp),%xmm2
  movsd  D81(%rip),%xmm0
  addsd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x40(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  addsd  %xmm2,%xmm0
  movsd  D81(%rip),%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x68(%rbp),%xmm1
  addsd  -0x70(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D81
datatype: f64
name: disassemble_data
arguments: data_tag: D28
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D10
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D77
datatype: f64
name: disassemble_data
arguments: data_tag: D29
datatype: byte[8]

tool: D81: 1

tool: {"D28": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D10": [0xb8,0x1e,0x85,0xeb,0x51,0xb8,0xae,0x3f]}

tool: D77: 0.6

tool: {"D29": [0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x3f]}

assistant: ```c
double c_bidir_reflectivity_hapke(double wvnmlo, double wvnmhi, double mu, double mup, double dphi) {
  double b0, b, ctheta, Xgamm, h0, h, hh, p, thetah, w;
  ctheta = mu * mup + sqrt((1. - mu * mu) * (1. - mup * mup)) * cos(dphi);
  thetah = acos(ctheta);
  p = 1. + .5 * ctheta;
  hh = .06;
  b0 = 1.;
  b = b0 * hh / (hh + tan(.5 * thetah));
  w = 0.6;
  Xgamm = sqrt(1. - w);
  h0 = (1. + 2. * mup) / (1. + 2. * Xgamm * mup);
  h = (1. + 2. * mu) / (1. + 2. * Xgamm * mu);
  return .25 * w * ((1. + b) * p + h0 * h - 1.0) / (mu + mup);
}
```