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

```asm
<ffu2fr8>:
  endbr64
  ucomisd D9(%rip),%xmm0
  mov    %rdx,%r8
  mov    $0x0,%edx
  mov    %rcx,%r9
  movapd %xmm0,%xmm5
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  je     L46
  ucomisd D14(%rip),%xmm1
  setnp  %al
  cmovne %edx,%eax
  test   %al,%al
  je     L46
  test   %rsi,%rsi
  jle    L207
  lea    -0x1(%rsi),%rax
  cmp    $0x6,%rax
  jbe    L141
  mov    %rsi,%rcx
  mov    %rdi,%rdx
  pxor   %xmm2,%xmm2
  mov    %r8,%rax
  shr    $0x3,%rcx
  shl    $0x4,%rcx
  add    %rdi,%rcx
  xchg   %ax,%ax
L42:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x40,%rax
  movdqa %xmm0,%xmm1
  punpckhwd %xmm2,%xmm0
  punpcklwd %xmm2,%xmm1
  cvtdq2pd %xmm1,%xmm3
  pshufd $0xee,%xmm1,%xmm1
  movups %xmm3,-0x40(%rax)
  cvtdq2pd %xmm1,%xmm1
  movups %xmm1,-0x30(%rax)
  cvtdq2pd %xmm0,%xmm1
  pshufd $0xee,%xmm0,%xmm0
  cvtdq2pd %xmm0,%xmm0
  movups %xmm1,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %rdx,%rcx
  jne    L42
  mov    %rsi,%rax
  and    $0xfffffffffffffff8,%rax
  test   $0x7,%sil
  je     L207
L126:
  movzwl (%rdi,%rax,2),%r10d
  pxor   %xmm0,%xmm0
  lea    (%rax,%rax,1),%rcx
  lea    0x0(,%rax,8),%rdx
  cvtsi2sd %r10d,%xmm0
  lea    0x1(%rax),%r10
  movsd  %xmm0,(%r8,%rax,8)
  cmp    %rsi,%r10
  jge    L207
  movzwl 0x2(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x2(%rax),%r10
  movsd  %xmm0,0x8(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x4(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x3(%rax),%r10
  movsd  %xmm0,0x10(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x6(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x4(%rax),%r10
  movsd  %xmm0,0x18(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x8(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x5(%rax),%r10
  movsd  %xmm0,0x20(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0xa(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  add    $0x6,%rax
  cvtsi2sd %r10d,%xmm0
  movsd  %xmm0,0x28(%r8,%rdx,1)
  cmp    %rax,%rsi
  jle    L207
  movzwl 0xc(%rdi,%rcx,1),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,0x30(%r8,%rdx,1)
L207:
  mov    (%r9),%eax
  ret
  nopl   0x0(%rax)
L46:
  test   %rsi,%rsi
  jle    L207
  lea    -0x1(%rsi),%rax
  cmp    $0x6,%rax
  jbe    L238
  mov    %rsi,%rcx
  movapd %xmm1,%xmm4
  movapd %xmm5,%xmm3
  mov    %rdi,%rdx
  shr    $0x3,%rcx
  unpcklpd %xmm4,%xmm4
  unpcklpd %xmm3,%xmm3
  mov    %r8,%rax
  shl    $0x4,%rcx
  pxor   %xmm6,%xmm6
  add    %rdi,%rcx
  nopl   0x0(%rax,%rax,1)
L71:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  add    $0x40,%rax
  movdqa %xmm0,%xmm2
  punpckhwd %xmm6,%xmm0
  punpcklwd %xmm6,%xmm2
  cvtdq2pd %xmm2,%xmm7
  pshufd $0xee,%xmm2,%xmm2
  subpd  %xmm4,%xmm7
  cvtdq2pd %xmm2,%xmm2
  subpd  %xmm4,%xmm2
  divpd  %xmm3,%xmm7
  divpd  %xmm3,%xmm2
  movups %xmm7,-0x40(%rax)
  movups %xmm2,-0x30(%rax)
  cvtdq2pd %xmm0,%xmm2
  pshufd $0xee,%xmm0,%xmm0
  subpd  %xmm4,%xmm2
  cvtdq2pd %xmm0,%xmm0
  subpd  %xmm4,%xmm0
  divpd  %xmm3,%xmm2
  divpd  %xmm3,%xmm0
  movups %xmm2,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %rcx,%rdx
  jne    L71
  mov    %rsi,%rax
  and    $0xfffffffffffffff8,%rax
  test   $0x7,%sil
  je     L207
L29:
  movzwl (%rdi,%rax,2),%r10d
  pxor   %xmm0,%xmm0
  lea    (%rax,%rax,1),%rcx
  lea    0x0(,%rax,8),%rdx
  cvtsi2sd %r10d,%xmm0
  lea    0x1(%rax),%r10
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,(%r8,%rax,8)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x2(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x2(%rax),%r10
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x8(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x4(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x3(%rax),%r10
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x10(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x6(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x4(%rax),%r10
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x18(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0x8(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r10d,%xmm0
  lea    0x5(%rax),%r10
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x20(%r8,%rdx,1)
  cmp    %r10,%rsi
  jle    L207
  movzwl 0xa(%rdi,%rcx,1),%r10d
  pxor   %xmm0,%xmm0
  add    $0x6,%rax
  cvtsi2sd %r10d,%xmm0
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x28(%r8,%rdx,1)
  cmp    %rax,%rsi
  jle    L207
  movzwl 0xc(%rdi,%rcx,1),%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    (%r9),%eax
  subsd  %xmm1,%xmm0
  divsd  %xmm5,%xmm0
  movsd  %xmm0,0x30(%r8,%rdx,1)
  ret
L141:
  xor    %eax,%eax
  jmp    L126
L238:
  xor    %eax,%eax
  jmp    L29
```

tool_calls: name: parse_data
arguments: tag: D9
type_infered: f64
name: parse_data
arguments: tag: D14
type_infered: f64

tool: D9: 1

tool: D14: 0

assistant: ```c
int ffu2fr8(unsigned short *input, long ntodo, double scale, double zero, double *output, int *status) {
  long ii;
  if (scale == 1. && zero == 0.) {
    for (ii = 0; ii < ntodo; ii++)
      output[ii] = (double)input[ii];
  } else {
    for (ii = 0; ii < ntodo; ii++)
      output[ii] = ((double)input[ii] - zero) / scale;
  }
  return (*status);
}
```