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

```asm
<conv_i32_to_d32_and_d16>:
  endbr64
  test   %ecx,%ecx
  jle    L72
  mov    %rdx,%r8
  mov    %ecx,%edx
  movslq %ecx,%rcx
  push   %r14
  mov    %rcx,%rax
  lea    (%rdi,%rcx,8),%rcx
  push   %rbx
  shl    $0x4,%rax
  add    %rsi,%rax
  cmp    %rax,%rdi
  setae  %al
  cmp    %rcx,%rsi
  setae  %cl
  or     %cl,%al
  je     L6
  lea    -0x1(%rdx),%eax
  cmp    $0x2,%eax
  jbe    L6
  mov    %edx,%ecx
  movapd D19(%rip),%xmm4
  xor    %eax,%eax
  pxor   %xmm3,%xmm3
  shr    $0x2,%ecx
  movdqa D9(%rip),%xmm5
  shl    $0x4,%rcx
  nopl   0x0(%rax)
L30:
  movdqu (%r8,%rax,1),%xmm0
  cvtdq2pd %xmm0,%xmm1
  movapd %xmm1,%xmm2
  cmpltpd %xmm3,%xmm2
  andpd  %xmm4,%xmm2
  addpd  %xmm2,%xmm1
  movups %xmm1,(%rdi,%rax,2)
  pshufd $0xee,%xmm0,%xmm1
  cvtdq2pd %xmm1,%xmm1
  movapd %xmm1,%xmm2
  cmpltpd %xmm3,%xmm2
  andpd  %xmm4,%xmm2
  addpd  %xmm2,%xmm1
  movups %xmm1,0x10(%rdi,%rax,2)
  movdqa %xmm0,%xmm1
  psrld  $0x10,%xmm0
  pand   %xmm5,%xmm1
  cvtdq2pd %xmm0,%xmm6
  pshufd $0xee,%xmm0,%xmm0
  cvtdq2pd %xmm1,%xmm2
  pshufd $0xee,%xmm1,%xmm1
  movapd %xmm2,%xmm7
  unpckhpd %xmm6,%xmm2
  movups %xmm2,0x10(%rsi,%rax,4)
  cvtdq2pd %xmm1,%xmm1
  movapd %xmm1,%xmm2
  cvtdq2pd %xmm0,%xmm0
  unpcklpd %xmm6,%xmm7
  unpcklpd %xmm0,%xmm2
  unpckhpd %xmm0,%xmm1
  movups %xmm7,(%rsi,%rax,4)
  movups %xmm2,0x20(%rsi,%rax,4)
  movups %xmm1,0x30(%rsi,%rax,4)
  add    $0x10,%rax
  cmp    %rax,%rcx
  jne    L30
  mov    %edx,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%dl
  je     L66
  mov    %eax,%r9d
  pxor   %xmm0,%xmm0
  mov    (%r8,%r9,4),%ebx
  lea    0x0(,%r9,4),%r11
  lea    0x0(,%r9,8),%r10
  cvtsi2sd %rbx,%xmm0
  mov    %rbx,%rcx
  lea    (%rax,%rax,1),%ebx
  movzwl %cx,%r14d
  shr    $0x10,%ecx
  movslq %ebx,%rbx
  movd   %ecx,%xmm5
  lea    0x1(%rax),%ecx
  movsd  %xmm0,(%rdi,%r9,8)
  movd   %r14d,%xmm0
  lea    0x0(,%rbx,8),%r9
  punpckldq %xmm5,%xmm0
  cvtdq2pd %xmm0,%xmm0
  movups %xmm0,(%rsi,%rbx,8)
  cmp    %ecx,%edx
  jle    L66
  mov    0x4(%r8,%r11,1),%ebx
  pxor   %xmm0,%xmm0
  add    $0x2,%eax
  cvtsi2sd %rbx,%xmm0
  mov    %rbx,%rcx
  movzwl %bx,%ebx
  shr    $0x10,%ecx
  movd   %ecx,%xmm3
  movsd  %xmm0,0x8(%rdi,%r10,1)
  movd   %ebx,%xmm0
  punpckldq %xmm3,%xmm0
  cvtdq2pd %xmm0,%xmm0
  movups %xmm0,0x10(%rsi,%r9,1)
  cmp    %eax,%edx
  jle    L66
  mov    0x8(%r8,%r11,1),%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  mov    %rdx,%rax
  movzwl %dx,%ebx
  shr    $0x10,%eax
  movd   %eax,%xmm4
  movsd  %xmm0,0x10(%rdi,%r10,1)
  movd   %ebx,%xmm0
  punpckldq %xmm4,%xmm0
  cvtdq2pd %xmm0,%xmm0
  movups %xmm0,0x20(%rsi,%r9,1)
L66:
  pop    %rbx
  pop    %r14
  ret
L6:
  mov    %edx,%edx
  xor    %eax,%eax
  nopl   0x0(%rax)
L74:
  mov    (%r8,%rax,4),%r9d
  pxor   %xmm0,%xmm0
  cvtsi2sd %r9,%xmm0
  mov    %r9,%rcx
  movzwl %r9w,%ebx
  shr    $0x10,%ecx
  movd   %ecx,%xmm5
  mov    %rax,%rcx
  shl    $0x4,%rcx
  movsd  %xmm0,(%rdi,%rax,8)
  movd   %ebx,%xmm0
  add    $0x1,%rax
  punpckldq %xmm5,%xmm0
  cvtdq2pd %xmm0,%xmm0
  movups %xmm0,(%rsi,%rcx,1)
  cmp    %rax,%rdx
  jne    L74
  pop    %rbx
  pop    %r14
  ret
  nopl   0x0(%rax)
L72:
  ret
```

tool_calls: name: parse_data
arguments: tag: D19
type_infered: byte[16]
name: parse_data
arguments: tag: D9
type_infered: byte[16]

tool: {"D19": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x41]}

tool: {"D9": [0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00]}

assistant: ```c
void conv_i32_to_d32_and_d16(double *d32, double *d16, unsigned int *i32, int len) {
  int i = 0;
  unsigned int a;
#pragma pipeloop(0)
  for (; i < len; i++) {
    a = i32[i];
    d32[i] = (double)(i32[i]);
    d16[2 * i] = (double)(a & 0xffff);
    d16[2 * i + 1] = (double)(a >> 16);
  }
}
```