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

```asm
<lb_kim_hierarchy>:
  endbr64
  mov    %edx,%r8d
  mov    %ecx,%edx
  movapd %xmm0,%xmm7
  movslq %r8d,%rax
  lea    0x0(,%rax,8),%rcx
  movsd  (%rdi,%rax,8),%xmm3
  subsd  %xmm0,%xmm3
  divsd  %xmm1,%xmm3
  lea    -0x1(%r8,%rdx,1),%eax
  cltq
  movsd  (%rdi,%rax,8),%xmm4
  subsd  %xmm0,%xmm4
  divsd  %xmm1,%xmm4
  movsd  (%rsi),%xmm9
  movapd %xmm3,%xmm0
  subsd  %xmm9,%xmm0
  movslq %edx,%rax
  shl    $0x3,%rax
  movsd  -0x8(%rsi,%rax,1),%xmm10
  movapd %xmm4,%xmm5
  subsd  %xmm10,%xmm5
  mulsd  %xmm0,%xmm0
  mulsd  %xmm5,%xmm5
  addsd  %xmm5,%xmm0
  comisd %xmm2,%xmm0
  jae    L30
  movsd  0x8(%rdi,%rcx,1),%xmm5
  subsd  %xmm7,%xmm5
  divsd  %xmm1,%xmm5
  movapd %xmm5,%xmm6
  subsd  %xmm9,%xmm6
  mulsd  %xmm6,%xmm6
  movsd  0x8(%rsi),%xmm12
  movapd %xmm3,%xmm8
  subsd  %xmm12,%xmm8
  mulsd  %xmm8,%xmm8
  minsd  %xmm8,%xmm6
  movapd %xmm5,%xmm8
  subsd  %xmm12,%xmm8
  mulsd  %xmm8,%xmm8
  minsd  %xmm8,%xmm6
  addsd  %xmm6,%xmm0
  comisd %xmm2,%xmm0
  jae    L30
  lea    -0x2(%r8,%rdx,1),%r9d
  movslq %r9d,%r9
  movsd  (%rdi,%r9,8),%xmm8
  subsd  %xmm7,%xmm8
  divsd  %xmm1,%xmm8
  movapd %xmm8,%xmm6
  subsd  %xmm10,%xmm6
  mulsd  %xmm6,%xmm6
  movsd  -0x10(%rsi,%rax,1),%xmm13
  movapd %xmm4,%xmm11
  subsd  %xmm13,%xmm11
  mulsd  %xmm11,%xmm11
  minsd  %xmm11,%xmm6
  movapd %xmm8,%xmm11
  subsd  %xmm13,%xmm11
  mulsd  %xmm11,%xmm11
  minsd  %xmm11,%xmm6
  addsd  %xmm6,%xmm0
  comisd %xmm2,%xmm0
  jae    L30
  movsd  0x10(%rdi,%rcx,1),%xmm6
  subsd  %xmm7,%xmm6
  divsd  %xmm1,%xmm6
  movsd  0x10(%rsi),%xmm11
  subsd  %xmm11,%xmm3
  mulsd  %xmm3,%xmm3
  subsd  %xmm11,%xmm5
  mulsd  %xmm5,%xmm5
  minsd  %xmm5,%xmm3
  movapd %xmm6,%xmm5
  subsd  %xmm11,%xmm5
  mulsd  %xmm5,%xmm5
  minsd  %xmm5,%xmm3
  movapd %xmm6,%xmm5
  subsd  %xmm12,%xmm5
  mulsd  %xmm5,%xmm5
  minsd  %xmm5,%xmm3
  subsd  %xmm9,%xmm6
  mulsd  %xmm6,%xmm6
  minsd  %xmm6,%xmm3
  addsd  %xmm3,%xmm0
  comisd %xmm2,%xmm0
  jae    L30
  lea    -0x3(%r8,%rdx,1),%edx
  movslq %edx,%rdx
  movsd  (%rdi,%rdx,8),%xmm2
  subsd  %xmm7,%xmm2
  divsd  %xmm1,%xmm2
  movsd  -0x18(%rsi,%rax,1),%xmm3
  subsd  %xmm3,%xmm4
  mulsd  %xmm4,%xmm4
  subsd  %xmm3,%xmm8
  mulsd  %xmm8,%xmm8
  minsd  %xmm8,%xmm4
  movapd %xmm2,%xmm1
  subsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm1
  minsd  %xmm1,%xmm4
  movapd %xmm2,%xmm1
  subsd  %xmm13,%xmm1
  mulsd  %xmm1,%xmm1
  minsd  %xmm1,%xmm4
  subsd  %xmm10,%xmm2
  mulsd  %xmm2,%xmm2
  minsd  %xmm2,%xmm4
  addsd  %xmm4,%xmm0
L30:
  ret
```

assistant: ```c
double lb_kim_hierarchy(double *t, double *q, int j, int len, double mean, double std, double bsf) {
  double d, lb;
  double x1, y1, x2, y2;
  double x0 = (t[j] - mean) / std;
  double y0 = (t[(len - 1 + j)] - mean) / std;
  lb = ((x0 - q[0]) * (x0 - q[0])) + ((y0 - q[len - 1]) * (y0 - q[len - 1]));
  if (lb >= bsf)
    return lb;
  x1 = (t[(j + 1)] - mean) / std;
  d = ((((x1 - q[0]) * (x1 - q[0]))) < (((x0 - q[1]) * (x0 - q[1]))) ? (((x1 - q[0]) * (x1 - q[0]))) : (((x0 - q[1]) * (x0 - q[1]))));
  d = ((d) < (((x1 - q[1]) * (x1 - q[1]))) ? (d) : (((x1 - q[1]) * (x1 - q[1]))));
  lb += d;
  if (lb >= bsf)
    return lb;
  y1 = (t[(len - 2 + j)] - mean) / std;
  d = ((((y1 - q[len - 1]) * (y1 - q[len - 1]))) < (((y0 - q[len - 2]) * (y0 - q[len - 2]))) ? (((y1 - q[len - 1]) * (y1 - q[len - 1]))) : (((y0 - q[len - 2]) * (y0 - q[len - 2]))));
  d = ((d) < (((y1 - q[len - 2]) * (y1 - q[len - 2]))) ? (d) : (((y1 - q[len - 2]) * (y1 - q[len - 2]))));
  lb += d;
  if (lb >= bsf)
    return lb;
  x2 = (t[(j + 2)] - mean) / std;
  d = ((((x0 - q[2]) * (x0 - q[2]))) < (((x1 - q[2]) * (x1 - q[2]))) ? (((x0 - q[2]) * (x0 - q[2]))) : (((x1 - q[2]) * (x1 - q[2]))));
  d = ((d) < (((x2 - q[2]) * (x2 - q[2]))) ? (d) : (((x2 - q[2]) * (x2 - q[2]))));
  d = ((d) < (((x2 - q[1]) * (x2 - q[1]))) ? (d) : (((x2 - q[1]) * (x2 - q[1]))));
  d = ((d) < (((x2 - q[0]) * (x2 - q[0]))) ? (d) : (((x2 - q[0]) * (x2 - q[0]))));
  lb += d;
  if (lb >= bsf)
    return lb;
  y2 = (t[(len - 3 + j)] - mean) / std;
  d = ((((y0 - q[len - 3]) * (y0 - q[len - 3]))) < (((y1 - q[len - 3]) * (y1 - q[len - 3]))) ? (((y0 - q[len - 3]) * (y0 - q[len - 3]))) : (((y1 - q[len - 3]) * (y1 - q[len - 3]))));
  d = ((d) < (((y2 - q[len - 3]) * (y2 - q[len - 3]))) ? (d) : (((y2 - q[len - 3]) * (y2 - q[len - 3]))));
  d = ((d) < (((y2 - q[len - 2]) * (y2 - q[len - 2]))) ? (d) : (((y2 - q[len - 2]) * (y2 - q[len - 2]))));
  d = ((d) < (((y2 - q[len - 1]) * (y2 - q[len - 1]))) ? (d) : (((y2 - q[len - 1]) * (y2 - q[len - 1]))));
  lb += d;
  return lb;
}
```